1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #10534 from cmaruz/master

Escape of U+2028 and U+2029 in the JSON Encoder

Conflicts:
	activesupport/lib/active_support/json/encoding.rb
This commit is contained in:
Rafael Mendonça França 2013-05-10 14:38:23 -03:00
commit 4b57bc0c2a
3 changed files with 12 additions and 3 deletions

View file

@ -1,3 +1,9 @@
* Added escaping of U+2028 and U+2029 inside the json encoder.
These characters are legal in JSON but break the Javascript interpreter.
After escaping them, the JSON is still legal and can be parsed by Javascript.
*Mario Caropreso*
* Fix skipping object callbacks using metadata fetched via callback chain
inspection methods (`_*_callbacks`)

View file

@ -108,7 +108,10 @@ module ActiveSupport
'\\' => '\\\\',
'>' => '\u003E',
'<' => '\u003C',
'&' => '\u0026' }
'&' => '\u0026',
"#{0xe2.chr}#{0x80.chr}#{0xa8.chr}" => '\u2028',
"#{0xe2.chr}#{0x80.chr}#{0xa9.chr}" => '\u2029',
}
class << self
# If true, use ISO 8601 format for dates and times. Otherwise, fall back

View file

@ -45,8 +45,8 @@ class TestJSONEncoding < ActiveSupport::TestCase
StringTests = [[ 'this is the <string>', %("this is the \\u003Cstring\\u003E")],
[ 'a "string" with quotes & an ampersand', %("a \\"string\\" with quotes \\u0026 an ampersand") ],
[ 'http://test.host/posts/1', %("http://test.host/posts/1")],
[ "Control characters: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
%("Control characters: \\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000B\\f\\r\\u000E\\u000F\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F") ]]
[ "Control characters: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\342\200\250\342\200\251",
%("Control characters: \\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000B\\f\\r\\u000E\\u000F\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029") ]]
ArrayTests = [[ ['a', 'b', 'c'], %([\"a\",\"b\",\"c\"]) ],
[ [1, 'a', :b, nil, false], %([1,\"a\",\"b\",null,false]) ]]