Fix dereference before NULL check and add extra checks
authorJonathan Dieter <jdieter@gmail.com>
Fri, 14 Sep 2018 12:35:09 +0000 (13:35 +0100)
committerJonathan Dieter <jdieter@gmail.com>
Fri, 14 Sep 2018 12:35:09 +0000 (13:35 +0100)
(Coverity ID: 310908)

Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/lib/comp/nocomp/nocomp.c
src/lib/comp/zstd/zstd.c

index f46fbaa4814947ce712a130baa57db6c077638d6..90b480d22d221f411dcfae86c4cc2e6dbeb679e9 100644 (file)
@@ -24,6 +24,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <assert.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <stdbool.h>
@@ -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;
 }
 
index b723f031a5cdee5c45db9dac4a837bc30135f0fa..71e35275ad3c03ef2c5991e88cbe5f54286e02ef 100644 (file)
@@ -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);