Correct handling of NULL arguments in json funcs.
authorAndrew Dunstan <andrew@dunslane.net>
Mon, 15 Apr 2013 20:20:21 +0000 (16:20 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Mon, 15 Apr 2013 20:20:21 +0000 (16:20 -0400)
Per gripe from Tom Lane.

src/backend/utils/adt/jsonfuncs.c

index 73bcdf46b1266e449af5db50b8bc712b55760098..03378a3ea9b4e1cdd214c1375f212ab04e8dedb7 100644 (file)
@@ -1217,8 +1217,8 @@ Datum
 json_populate_record(PG_FUNCTION_ARGS)
 {
        Oid                     argtype = get_fn_expr_argtype(fcinfo->flinfo, 0);
-       text       *json = PG_GETARG_TEXT_P(1);
-       bool            use_json_as_text = PG_GETARG_BOOL(2);
+       text       *json;
+       bool            use_json_as_text;
        HTAB       *json_hash;
        HeapTupleHeader rec;
        Oid                     tupType;
@@ -1234,6 +1234,7 @@ json_populate_record(PG_FUNCTION_ARGS)
        char            fname[NAMEDATALEN];
        JsonHashEntry hashentry;
 
+       use_json_as_text = PG_ARGISNULL(2) ? false : PG_GETARG_BOOL(2);
 
        if (!type_is_rowtype(argtype))
                ereport(ERROR,
@@ -1267,6 +1268,8 @@ json_populate_record(PG_FUNCTION_ARGS)
                tupTypmod = HeapTupleHeaderGetTypMod(rec);
        }
 
+       json = PG_GETARG_TEXT_P(1);
+
        json_hash = get_json_object_as_hash(json, "json_populate_record", use_json_as_text);
 
        /*
@@ -1559,8 +1562,8 @@ Datum
 json_populate_recordset(PG_FUNCTION_ARGS)
 {
        Oid                     argtype = get_fn_expr_argtype(fcinfo->flinfo, 0);
-       text       *json = PG_GETARG_TEXT_P(1);
-       bool            use_json_as_text = PG_GETARG_BOOL(2);
+       text       *json;
+       bool            use_json_as_text;
        ReturnSetInfo *rsi;
        MemoryContext old_cxt;
        Oid                     tupType;
@@ -1573,6 +1576,8 @@ json_populate_recordset(PG_FUNCTION_ARGS)
        JsonSemAction sem;
        PopulateRecordsetState state;
 
+       use_json_as_text = PG_ARGISNULL(2) ? false : PG_GETARG_BOOL(2);
+
        if (!type_is_rowtype(argtype))
                ereport(ERROR,
                                (errcode(ERRCODE_DATATYPE_MISMATCH),
@@ -1616,6 +1621,8 @@ json_populate_recordset(PG_FUNCTION_ARGS)
        if (PG_ARGISNULL(1))
                PG_RETURN_NULL();
 
+       json = PG_GETARG_TEXT_P(1);
+
        if (PG_ARGISNULL(0))
                rec = NULL;
        else