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