Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
Date
Msg-id 54760440.2080501@dunslane.net
Whole thread Raw
In response to Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON
List pgsql-hackers
On 11/26/2014 11:19 AM, Tom Lane wrote:
> bouda@edookit.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






pgsql-hackers by date:

Previous
From: Geoff Montee
Date:
Subject: Re: [pgsql-packagers] Palle Girgensohn's ICU patch
Next
From: Andrew Dunstan
Date:
Subject: Re: [BUGS] BUG #12070: hstore extension: hstore_to_json_loose produces invalid JSON