From: Jonathan Dieter Date: Fri, 14 Sep 2018 12:35:09 +0000 (+0100) Subject: Fix dereference before NULL check and add extra checks X-Git-Tag: archive/raspbian/1.1.9+ds1-1+rpi1~1^2~122 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=62733a8606afa2139908577d3970cb04f1b16170;p=zchunk.git Fix dereference before NULL check and add extra checks (Coverity ID: 310908) Signed-off-by: Jonathan Dieter --- diff --git a/src/lib/comp/nocomp/nocomp.c b/src/lib/comp/nocomp/nocomp.c index f46fbaa..90b480d 100644 --- a/src/lib/comp/nocomp/nocomp.c +++ b/src/lib/comp/nocomp/nocomp.c @@ -24,6 +24,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -43,13 +44,13 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, const size_t src_size, char **dst, size_t *dst_size, bool use_dict) { VALIDATE_INT(zck); + ALLOCD_INT(zck, dst); + ALLOCD_INT(zck, src); + ALLOCD_INT(zck, dst_size); ALLOCD_INT(zck, comp); *dst = zmalloc(src_size); - if(dst == NULL) { - set_fatal_error(zck, "Unable to allocate %lu bytes", src_size); - return -1; - } + assert(*dst); memcpy(*dst, src, src_size); *dst_size = src_size; @@ -60,6 +61,8 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, static bool end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, bool use_dict) { VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, dst); + ALLOCD_BOOL(zck, dst_size); ALLOCD_BOOL(zck, comp); *dst = NULL; @@ -86,10 +89,16 @@ static bool decompress(zckCtx *zck, zckComp *comp, const bool use_dict) { static bool end_dchunk(zckCtx *zck, zckComp *comp, const bool use_dict, const size_t fd_size) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + return true; } static bool close(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + return true; } @@ -97,12 +106,18 @@ static bool close(zckCtx *zck, zckComp *comp) { * was attempted */ static bool set_parameter(zckCtx *zck, zckComp *comp, int option, const void *value) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + set_error(zck, "Invalid compression parameter for ZCK_COMP_NONE"); return false; } /* No default parameters to set when there's no compression */ static bool set_default_parameters(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + return true; } diff --git a/src/lib/comp/zstd/zstd.c b/src/lib/comp/zstd/zstd.c index b723f03..71e3527 100644 --- a/src/lib/comp/zstd/zstd.c +++ b/src/lib/comp/zstd/zstd.c @@ -87,6 +87,9 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, const size_t src_size, char **dst, size_t *dst_size, bool use_dict) { VALIDATE_INT(zck); + ALLOCD_INT(zck, dst); + ALLOCD_INT(zck, src); + ALLOCD_INT(zck, dst_size); ALLOCD_INT(zck, comp); comp->dc_data = realloc(comp->dc_data, comp->dc_data_size + src_size); @@ -104,6 +107,8 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, static bool end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, bool use_dict) { VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, dst); + ALLOCD_BOOL(zck, dst_size); ALLOCD_BOOL(zck, comp); size_t max_size = ZSTD_compressBound(comp->dc_data_size); @@ -199,6 +204,9 @@ decomp_error_1: static bool set_parameter(zckCtx *zck, zckComp *comp, int option, const void *value) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + if(option == ZCK_ZSTD_COMP_LEVEL) { if(*(int*)value >= 0 && *(int*)value <= ZSTD_maxCLevel()) { comp->level = *(int*)value; @@ -210,6 +218,9 @@ static bool set_parameter(zckCtx *zck, zckComp *comp, int option, } static bool set_default_parameters(zckCtx *zck, zckComp *comp) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(zck, comp); + /* Set default compression level to 16 */ int level=16; return set_parameter(zck, comp, ZCK_ZSTD_COMP_LEVEL, &level);