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:
commit
4b57bc0c2a
3 changed files with 12 additions and 3 deletions
|
@ -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`)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]) ]]
|
||||
|
|
Loading…
Reference in a new issue