Re: [HACKERS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, bouda(at)edookit(dot)com
Cc: pgsql-bugs(at)postgresql(dot)org, pgsql-hackers(at)postgresql(dot)org
Subject: Re: [HACKERS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
Date: 2014-11-26 16:48:00
Message-ID: 54760440.2080501@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers


On 11/26/2014 11:19 AM, Tom Lane wrote:
> bouda(at)edookit(dot)com writes:
>> The hstore_to_json_loose(hstore) produces an invalid JSON in the following
>> case:
>> SELECT hstore_to_json_loose(hstore(ARRAY ['name'], ARRAY ['1.'] :: TEXT
>> []))
>> Output: {"name": 1.}
>> The actual output is indeed incorrect as JSON does not permit `1.` - it must
>> be a string.
> Yeah. The problem seems to be the ad-hoc (I'm being polite) code in
> hstore_to_json_loose to decide whether a string should be treated as a
> number. It does much more work than it needs to, and fails to have any
> tight connection to the JSON syntax rules for numbers.
>
> Offhand, it seems like the nicest fix would be if the core json code
> exposed a function that would say whether a string matches the JSON
> number syntax. Does that functionality already exist someplace,
> or is it too deeply buried in the JSON parser guts?
>
> regards, tom lane
>
>

In json.c we now check numbers like this:

JsonLexContext dummy_lex;
bool numeric_error;
...
dummy_lex.input = *outputstr == '-' ? outputstr + 1 : outputstr;
dummy_lex.input_length = strlen(dummy_lex.input);
json_lex_number(&dummy_lex, dummy_lex.input, &numeric_error);

numeric_error is true IFF outputstr is a legal json number.

Exposing a function to do this should be trivial.

cheers

andrew

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Andrew Dunstan 2014-11-26 17:03:16 Re: [HACKERS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
Previous Message Tom Lane 2014-11-26 16:19:49 Re: BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2014-11-26 17:03:16 Re: [HACKERS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
Previous Message Geoff Montee 2014-11-26 16:46:11 Re: [pgsql-packagers] Palle Girgensohn's ICU patch