Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion java/src/json/ext/Parser.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions test/json/json_parser_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1069,6 +1069,23 @@ def test_mutating_source_string_during_parsing
assert_equal expected, actual
end

def test_mutating_source_string_with_known_coderange_during_parsing
expected = ([1] * 100) + [2.3] + ([1] * 100)
source = JSON.generate(expected)
source.ascii_only? # caches the coderange, which lets JRuby's String#tr! write in place
expected.delete_at(100)

fake_decimal_class = Class.new
fake_decimal_class.define_method(:initialize) do |number|
source.tr!('1', '0')
number.to_f
end

actual = JSON.parse(source, decimal_class: fake_decimal_class)
actual.delete_at(100)
assert_equal expected, actual
end

def test_adversary_encode
fake_string = Class.new(String) do
def encode(*)
Expand Down
Loading