a test for stringify "whitelist" which WebKit fails

Oliver Hunt oliver at apple.com
Tue Sep 1 21:39:42 PDT 2009


On Sep 1, 2009, at 7:39 AM, Hallvord R. M. Steen wrote:

>> correctness/045.js uses Number as the object to serialise, but Number
>> is a function so does not get stringified - JSON.stringify(function()
>> { return arguments; }(), ["length"]) should do.
>
> Thanks - though funny that Safari is the only browser here that  
> actually passes the test. So Safari has a bug here? :)
Yes, because shipping Safari serialises function objects as ordinary  
objects :-(

>
>> integration/004.js makes Math.toJSON returns a stringified object
>> instead of the new object itself,
>
> If that's wrong, I've misunderstood how toJSON() is supposed to work  
> (thought it was meant to return a *string* representation of the  
> object). I see from the algorithm that the output of the toJSON()  
> call goes through the quote operation if it is a string and the JA/ 
> JO serializations if it's array or object, but the spec does not  
> really cover this issue in prose anywhere?! It's a bit late for such  
> feedback but the functionality of a custom toJSON() method seems  
> really underdefined.

toJSON returns the object that is expected to be serialised -- eg.  
Date.prototype.toJSON returns an unquoted string.  Step 2. of the  
abstract operation Str handles toJSON as (basically)

    if (typeof value.toJSON === "function")
        value = value.toJSON();

>
>> integrity/004.js and 005.js have incorrect regexps as they fail to
>> account for 8.b.iii "if gap is not the empty string"
>
> Fixed.

You also need to check for the new line following every brace or  
bracket, if there's a gap the output is multiline, so your regexps  
should be
/\{\n {10}"prop1": \{\}/ and /\{\na{10}"prop1": \{/

--Oliver



More information about the es-discuss mailing list