mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Fix that JSON parser fails to read escaped backslashes.
[#973 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
committed by
Jeremy Kemper
parent
0c391b46fb
commit
b3381cacaf
@@ -20,7 +20,7 @@ module ActiveSupport
|
||||
rescue ArgumentError => e
|
||||
raise ParseError, "Invalid JSON string"
|
||||
end
|
||||
|
||||
|
||||
protected
|
||||
# Ensure that ":" and "," are always followed by a space
|
||||
def convert_json_to_yaml(json) #:nodoc:
|
||||
@@ -42,6 +42,8 @@ module ActiveSupport
|
||||
end
|
||||
when ":",","
|
||||
marks << scanner.pos - 1 unless quoting
|
||||
when "\\"
|
||||
scanner.skip(/\\/)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -89,3 +91,4 @@ module ActiveSupport
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@ class TestJSONDecoding < ActiveSupport::TestCase
|
||||
%({"a": "a's, b's and c's", "b": "5,000"}) => {"a" => "a's, b's and c's", "b" => "5,000"},
|
||||
# multibyte
|
||||
%({"matzue": "松江", "asakusa": "浅草"}) => {"matzue" => "松江", "asakusa" => "浅草"},
|
||||
%({"a": "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
|
||||
%({"a": "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
|
||||
%({"a": "2007-01-01"}) => {'a' => Date.new(2007, 1, 1)},
|
||||
%({"a": "2007-01-01 01:12:34 Z"}) => {'a' => Time.utc(2007, 1, 1, 1, 12, 34)},
|
||||
# no time zone
|
||||
%({"a": "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
|
||||
%({"a": "2007-01-01 01:12:34"}) => {'a' => "2007-01-01 01:12:34"},
|
||||
# needs to be *exact*
|
||||
%({"a": " 2007-01-01 01:12:34 Z "}) => {'a' => " 2007-01-01 01:12:34 Z "},
|
||||
%({"a": "2007-01-01 : it's your birthday"}) => {'a' => "2007-01-01 : it's your birthday"},
|
||||
@@ -29,6 +29,7 @@ class TestJSONDecoding < ActiveSupport::TestCase
|
||||
%({"a": null}) => {"a" => nil},
|
||||
%({"a": true}) => {"a" => true},
|
||||
%({"a": false}) => {"a" => false},
|
||||
%q({"bad":"\\\\","trailing":""}) => {"bad" => "\\", "trailing" => ""},
|
||||
%q({"a": "http:\/\/test.host\/posts\/1"}) => {"a" => "http://test.host/posts/1"},
|
||||
%q({"a": "\u003cunicode\u0020escape\u003e"}) => {"a" => "<unicode escape>"},
|
||||
%q({"a": "\\\\u0020skip double backslashes"}) => {"a" => "\\u0020skip double backslashes"},
|
||||
@@ -83,3 +84,4 @@ class TestJSONDecoding < ActiveSupport::TestCase
|
||||
assert_raise(ActiveSupport::JSON::ParseError) { ActiveSupport::JSON.decode(%({: 1})) }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user