I want to bring this discussion around to focus on concrete points that we need 
to make decisions on.

1) There is a bug in the ES5 candidate spec. in that it says that:
JSONSourceCharacter ::
    SourceCharacter but not U+0000 thru U+001F

This is pretty clearly bogus as it means that tabs and new line characters 
cannot occur anywhere in JSON source text (not just string literals).  I'll 
probably fix it by simply equating JSONSourceCharter to SourceCharacter.

2) Do we want to permit conforming implementations to extend the JSON grammar 
that they recognize?  This probably could be done by extending the syntax error 
extension allowance in section 16 to include the JSON grammar.  If we allow 
this then most of the observed variation for the current emerging 
implementation that we have been talking about would probably be acceptable 
extensions.

My inclination is to say we should disallow such open-ended extensions. As I 
suggest earlier, an implementation can always provide a non-standard extended 
parse function if it wants to support an extended grammar.

3) If we disallow JSON grammar extensions (for JSON.parse) should we extend the 
existing grammar with some Postel's Law flexibility?

I could accept this for cases where we have some evidence that there are actual 
JSON encoders in the wild that violate/extend the JSON grammar in the 
identified manner.

Here are the individual cases that I know of to consider:

a) Allow strings, numbers, Booleans, and null in addition to objects and arrays 
as top level JSON text.

The ES5 spec. already has this although it isn't in the RFC.  I haven't heard 
any suggestions that we remove it.

b) Permit leading zeros on numbers either with or without octal implications.

I'm with Brendan on this, I don't think we should let octal constants into 
JSON. I don't have deep problem with leading zeroes for decimal constants but 
given the historic octal interpretation within JavaScript it is probably safer 
to syntax error than to simply ignore leading zeros.

Does anyone know of any encoders or uses that actually insert leading 0's?

c) Trailing commas in objects and arrays

Are there encoders that do this or are we just anticipating that there might be 
manually generated files where this is convenient?

I could go either way on this one but would prefer some supporting evidence

d)  Holes in arrays, eg [1,,3]

I don't think we should allow it unless we know there are encoders that 
generate it was acceptable to legacy eval based parsers.

e) Allow some/all control characters to appear unescaped in JSON string 
literals. Which ones?

Might be plausible.  Crock, why did you originally forbid them?  Are there 
known encoders that pass through such characters without escaping them?

f) Allow single quotes within JSON text as string delimiters

I'm not really suggesting we allow this, but I'm told that at least one major 
web site has done this.

Any other possible Postelisms?  I have to say, that going through this list I 
don't find many of them very compelling.


Votes??

Allen

  

>-----Original Message-----
>From: Rob Sayre [mailto:[email protected]]
>Sent: Wednesday, June 03, 2009 11:32 AM
>To: Oliver Hunt
>Cc: Allen Wirfs-Brock; Robert Sayre; Mark S.Miller; es-
>[email protected]
>Subject: Re: JSON parser grammar
>
>On 6/3/09 2:25 PM, Oliver Hunt wrote:
>>>>> 2.) trailing commas in objects and arrays are allowed
>>>>> ({"foo":42,"bar":42,})
>>>> V8's JSON implementation also accepts [1,,,2]
>>>
>>> What does it produce? An array with holes, or an array with null
>>> members?
>> An array with holes -- in so far as i can tell V8's json object
>> exactly matches the result of eval(string), just prohibiting arbitrary
>> code execution.
>I don't think we want to live with this. You should never get a
>hole/undefined out of JSON.
>
>- Rob
>

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to