Opened 6 years ago

Last modified 13 months ago

#1879 new defect

Reliably serialize NaN values

Reported by: Ben Brian Owned by:
Priority: Should Have Milestone: Alpha 24
Component: Core engine Keywords:
Cc: Patch:

Description (last modified by temple)

In #1828, it was discovered the cause of serialization test failure was Spidermonkey using different values internally for NaN. According to ECMAScript-262, there is only a single NaN value which can have different internal representation depending on the implementation. Because this might vary on different systems and even the same system in JIT vs. non-JIT paths, we should probably canonize it when serializing so it doesn't cause an OOS or serialization test failure.

Related problem: the debug serializer doesn't handle NaN or Infinity, so a simple text diff won't reveal these errors. For floating-point values in the engine, we can fix that by completing the canonfloat() function. For script vals, it's a bit more difficult because we use JS_Stringify, which per the JSON spec doesn't allow NaN or Infinity (replacing them with null).

Change History (5)

comment:1 Changed 6 years ago by ben

In 13322:

Fixes serialization test failure caused by CmpFoundation?'s buildMultiplier property sometimes being NaN (which can assume different internal values in Spidermonkey). For now, NaN cannot be reliably serialized. Fixes #1828, refs #1879

comment:2 Changed 5 years ago by Yves

Owner: set to Yves
Status: newassigned

I'm taking this ticket because I currently work with SpiderMonkey and Serialization which is both related and I will probably run into that problem too (or figure out it's solved now).

comment:3 Changed 3 years ago by Yves

Owner: Yves deleted
Status: assignednew

comment:4 Changed 13 months ago by temple

In 21231:

Avoid NaN in Foundation and Repairable

Differential Revision: https://code.wildfiregames.com/D1296
Reviewed by: elexis
Comments by: bb, mimo
Fixes: #5030
Refs: #1879

comment:5 Changed 13 months ago by temple

Description: modified (diff)
Milestone: BacklogAlpha 24
Priority: Nice to HaveShould Have

Some discussion at Phab:D1296.

Note: See TracTickets for help on using tickets.