Bug Tracker

Ticket #8034 (closed bug: invalid)

Opened 5 years ago

Last modified 4 years ago

parseJSON() fails when special characters are passed in

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


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

comment:1 Changed 5 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 5 years ago by ievolve (previous) (diff)

comment:2 Changed 5 years ago by rwaldron

  • Owner set to rwaldron
  • Status changed from new to assigned
  • Component changed from unfiled to core

comment:3 Changed 5 years ago by rwaldron

We can test for these...


comment:4 Changed 5 years ago by jitter

  • Priority changed from undecided to low
  • Status changed from assigned to closed
  • Resolution set to invalid

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.