Bug Tracker

Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#8034 closed bug (invalid)

parseJSON() fails when special characters are passed in

Reported by: ievolve Owned by: Rick Waldron
Priority: low Milestone: 1.next
Component: core Version: 1.4.2
Keywords: Cc:
Blocked by: Blocking:

Description

I came across a situation where some oddly encoded characters cause the JSON parser to bomb. In my case it was the cancel character (0x18) that a user had submitted.

Worth noting that JSON parse that is at the link below will parse things just fine. Where JSON.parse() bombs just like the jQuery method. https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js

Code that contains the cancel character can be copied and pasted from here to relicate the issue. The bad character sits between the n and the s in the word "brains" http://pastie.org/1485459

Change History (4)

comment:1 Changed 13 years ago by ievolve

To see this bug in action see the example here: http://jsfiddle.net/eBEeC/

Should note that the bug also occurs in 1.4.4 as well

Last edited 13 years ago by ievolve (previous) (diff)

comment:2 Changed 13 years ago by Rick Waldron

Component: unfiledcore
Owner: set to Rick Waldron
Status: newassigned

comment:3 Changed 13 years ago by Rick Waldron

We can test for these...

http://jsfiddle.net/rwaldron/zP3NJ/8/

comment:4 Changed 13 years ago by jitter

Priority: undecidedlow
Resolution: invalid
Status: assignedclosed

This isn't a bug, the JSON specification is clear about which characters need to be escaped in valid json.

2.5. Strings
[...]
All Unicode characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).

As U+0018 lies in this range, throwing an exception is the specified behavior of jQuery.parseJSON.

Running your sample json through the JSON validator also reveals that this is invalid json.

Note: See TracTickets for help on using tickets.