From 9111d46351e8c3d82452a7454e43ccbf1991b3dc Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 25 Sep 2014 15:08:42 -0400 Subject: [PATCH] Remove ill-conceived ban on zero length json object keys. We removed a similar ban on this in json_object recently, but the ban in datum_to_json was left, which generate4d sprutious errors in othee json generators, notable json_build_object. Along the way, add an assertion that datum_to_json is not passed a null key. All current callers comply with this rule, but the assertion will catch any possible future misbehaviour. --- src/backend/utils/adt/json.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index c52f6732b05..6f678eb8b22 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -1342,6 +1342,9 @@ datum_to_json(Datum val, bool is_null, StringInfo result, bool numeric_error; JsonLexContext dummy_lex; + /* callers are expected to ensure that null keys are not passed in */ + Assert( ! (key_scalar && is_null)); + if (is_null) { appendStringInfoString(result, "null"); @@ -1487,10 +1490,6 @@ datum_to_json(Datum val, bool is_null, StringInfo result, break; default: outputstr = OidOutputFunctionCall(outfuncoid, val); - if (key_scalar && *outputstr == '\0') - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("key value must not be empty"))); escape_json(result, outputstr); pfree(outputstr); break; -- 2.30.2