]> granicus.if.org Git - postgresql/commitdiff
Fix some jsonb issues found by Coverity in recent commits.
authorAndrew Dunstan <andrew@dunslane.net>
Tue, 16 Dec 2014 15:32:06 +0000 (10:32 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Tue, 16 Dec 2014 15:32:06 +0000 (10:32 -0500)
Mostly these issues concern the non-use of function results. These
have been changed to use (void) pushJsonbValue(...) instead of assigning
the result to a variable that gets overwritten before it is used.

There is a larger issue that we should possibly examine the API for
pushJsonbValue(), so that instead of returning a value it modifies a
state argument. The current idiom is rather clumsy. However, changing
that requires quite a bit more work, so this change should do for the
moment.

src/backend/utils/adt/jsonb.c
src/backend/utils/adt/jsonfuncs.c

index a520b361b83640e00b7ef7ea18266561dd53be14..80c8ee11350db4cafd2261204c4f7dd256419d5b 100644 (file)
@@ -1194,7 +1194,7 @@ jsonb_build_object_noargs(PG_FUNCTION_ARGS)
 
        memset(&result, 0, sizeof(JsonbInState));
 
-       result.res = pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
+       (void) pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
        result.res = pushJsonbValue(&result.parseState, WJB_END_OBJECT, NULL);
 
        PG_RETURN_POINTER(JsonbValueToJsonb(result.res));
@@ -1255,7 +1255,7 @@ jsonb_build_array_noargs(PG_FUNCTION_ARGS)
 
        memset(&result, 0, sizeof(JsonbInState));
 
-       result.res = pushJsonbValue(&result.parseState, WJB_BEGIN_ARRAY, NULL);
+       (void) pushJsonbValue(&result.parseState, WJB_BEGIN_ARRAY, NULL);
        result.res = pushJsonbValue(&result.parseState, WJB_END_ARRAY, NULL);
 
        PG_RETURN_POINTER(JsonbValueToJsonb(result.res));
@@ -1283,7 +1283,7 @@ jsonb_object(PG_FUNCTION_ARGS)
 
        memset(&result, 0, sizeof(JsonbInState));
 
-       result.res = pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
+       (void) pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
 
        switch (ndims)
        {
@@ -1336,7 +1336,7 @@ jsonb_object(PG_FUNCTION_ARGS)
                v.val.string.len = len;
                v.val.string.val = str;
 
-               result.res = pushJsonbValue(&result.parseState, WJB_KEY, &v);
+               (void) pushJsonbValue(&result.parseState, WJB_KEY, &v);
 
                if (in_nulls[i * 2 + 1])
                {
@@ -1353,7 +1353,7 @@ jsonb_object(PG_FUNCTION_ARGS)
                        v.val.string.val = str;
                }
 
-               result.res = pushJsonbValue(&result.parseState, WJB_VALUE, &v);
+               (void) pushJsonbValue(&result.parseState, WJB_VALUE, &v);
        }
 
        pfree(in_datums);
@@ -1389,7 +1389,7 @@ jsonb_object_two_arg(PG_FUNCTION_ARGS)
 
        memset(&result, 0, sizeof(JsonbInState));
 
-       result.res = pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
+       (void) pushJsonbValue(&result.parseState, WJB_BEGIN_OBJECT, NULL);
 
        if (nkdims > 1 || nkdims != nvdims)
                ereport(ERROR,
@@ -1431,7 +1431,7 @@ jsonb_object_two_arg(PG_FUNCTION_ARGS)
                v.val.string.len = len;
                v.val.string.val = str;
 
-               result.res = pushJsonbValue(&result.parseState, WJB_KEY, &v);
+               (void) pushJsonbValue(&result.parseState, WJB_KEY, &v);
 
                if (val_nulls[i])
                {
@@ -1448,7 +1448,7 @@ jsonb_object_two_arg(PG_FUNCTION_ARGS)
                        v.val.string.val = str;
                }
 
-               result.res = pushJsonbValue(&result.parseState, WJB_VALUE, &v);
+               (void) pushJsonbValue(&result.parseState, WJB_VALUE, &v);
        }
 
        result.res = pushJsonbValue(&result.parseState, WJB_END_OBJECT, NULL);
index 0a85ee81091ca9bb41a00976e79931ae55b8d945..93cbe274f071838ba8b3dab25260dc7160b310de 100644 (file)
@@ -3182,7 +3182,7 @@ jsonb_strip_nulls(PG_FUNCTION_ARGS)
                                continue;
 
                        /* otherwise, do a delayed push of the key */
-                       res = pushJsonbValue(&parseState, WJB_KEY, &k);
+                       (void) pushJsonbValue(&parseState, WJB_KEY, &k);
                }
 
                if (type == WJB_VALUE || type == WJB_ELEM)
@@ -3191,5 +3191,7 @@ jsonb_strip_nulls(PG_FUNCTION_ARGS)
                        res = pushJsonbValue(&parseState, type, NULL);
        }
 
+       Assert(res != NULL);
+
        PG_RETURN_POINTER(JsonbValueToJsonb(res));
 }