From 4b209e1baae576f7a409ffc13cf79b7c57e0b2fa Mon Sep 17 00:00:00 2001 From: hsbt Date: Mon, 1 Aug 2016 03:16:30 +0000 Subject: * ext/json/*, test/json/json_parser_test.rb: Update json-2.0.2. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ ext/json/generator/generator.c | 1 + ext/json/json.gemspec | Bin 5473 -> 5473 bytes ext/json/lib/json/version.rb | 2 +- ext/json/parser/parser.c | 19 +++++++++++-------- ext/json/parser/parser.rl | 3 +++ test/json/json_parser_test.rb | 20 +++++++++++++++++++- 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index a5b5ce575f..8af164a8d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Mon Aug 1 12:16:19 2016 SHIBATA Hiroshi + + * ext/json/*, test/json/json_parser_test.rb: Update json-2.0.2. + Sun Jul 31 16:17:23 2016 Nobuyoshi Nakada * ext/win32/resolv/resolv.c (get_dns_server_list): [Win32] get DNS diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c index 2b56721b2d..ef85bb7337 100644 --- a/ext/json/generator/generator.c +++ b/ext/json/generator/generator.c @@ -951,6 +951,7 @@ static VALUE cState_generate(VALUE self, VALUE obj) { VALUE result = cState_partial_generate(self, obj); GET_STATE(self); + (void)state; return result; } diff --git a/ext/json/json.gemspec b/ext/json/json.gemspec index c5a3c1003d..2c304ef918 100644 Binary files a/ext/json/json.gemspec and b/ext/json/json.gemspec differ diff --git a/ext/json/lib/json/version.rb b/ext/json/lib/json/version.rb index 5184ad3c19..8997def28b 100644 --- a/ext/json/lib/json/version.rb +++ b/ext/json/lib/json/version.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false module JSON # JSON version - VERSION = '2.0.1' + VERSION = '2.0.2' VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc: VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc: VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: diff --git a/ext/json/parser/parser.c b/ext/json/parser/parser.c index 975a267695..0dae674c88 100644 --- a/ext/json/parser/parser.c +++ b/ext/json/parser/parser.c @@ -1670,6 +1670,9 @@ static VALUE convert_encoding(VALUE source) #ifdef HAVE_RUBY_ENCODING_H rb_encoding *enc = rb_enc_get(source); if (enc == rb_ascii8bit_encoding()) { + if (OBJ_FROZEN(source)) { + source = rb_str_dup(source); + } FORCE_UTF8(source); } else { source = rb_str_conv_enc(source, NULL, rb_utf8_encoding()); @@ -1805,7 +1808,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) } -#line 1809 "parser.c" +#line 1812 "parser.c" enum {JSON_start = 1}; enum {JSON_first_final = 10}; enum {JSON_error = 0}; @@ -1813,7 +1816,7 @@ enum {JSON_error = 0}; enum {JSON_en_main = 1}; -#line 717 "parser.rl" +#line 720 "parser.rl" /* @@ -1830,16 +1833,16 @@ static VALUE cParser_parse(VALUE self) GET_PARSER; -#line 1834 "parser.c" +#line 1837 "parser.c" { cs = JSON_start; } -#line 733 "parser.rl" +#line 736 "parser.rl" p = json->source; pe = p + json->len; -#line 1843 "parser.c" +#line 1846 "parser.c" { if ( p == pe ) goto _test_eof; @@ -1873,7 +1876,7 @@ st0: cs = 0; goto _out; tr2: -#line 709 "parser.rl" +#line 712 "parser.rl" { char *np = JSON_parse_value(json, p, pe, &result, 0); if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;} @@ -1883,7 +1886,7 @@ st10: if ( ++p == pe ) goto _test_eof10; case 10: -#line 1887 "parser.c" +#line 1890 "parser.c" switch( (*p) ) { case 13: goto st10; case 32: goto st10; @@ -1972,7 +1975,7 @@ case 9: _out: {} } -#line 736 "parser.rl" +#line 739 "parser.rl" if (cs >= JSON_first_final && p == pe) { return result; diff --git a/ext/json/parser/parser.rl b/ext/json/parser/parser.rl index c67634b8ba..dd24cf94cc 100644 --- a/ext/json/parser/parser.rl +++ b/ext/json/parser/parser.rl @@ -565,6 +565,9 @@ static VALUE convert_encoding(VALUE source) #ifdef HAVE_RUBY_ENCODING_H rb_encoding *enc = rb_enc_get(source); if (enc == rb_ascii8bit_encoding()) { + if (OBJ_FROZEN(source)) { + source = rb_str_dup(source); + } FORCE_UTF8(source); } else { source = rb_str_conv_enc(source, NULL, rb_utf8_encoding()); diff --git a/test/json/json_parser_test.rb b/test/json/json_parser_test.rb index c1c2779b96..40ad500cb6 100644 --- a/test/json/json_parser_test.rb +++ b/test/json/json_parser_test.rb @@ -40,6 +40,18 @@ class JSONParserTest < Test::Unit::TestCase assert_equal({ 'a' => 'b' }, parser.parse) end + def test_parse_values + assert_equal(nil, parse('null')) + assert_equal(false, parse('false')) + assert_equal(true, parse('true')) + assert_equal(-23, parse('-23')) + assert_equal(23, parse('23')) + assert_in_delta(0.23, parse('0.23'), 1e-2) + assert_in_delta(0.0, parse('0e0'), 1e-2) + assert_equal("", parse('""')) + assert_equal("foobar", parse('"foobar"')) + end + def test_parse_simple_arrays assert_equal([], parse('[]')) assert_equal([], parse(' [ ] ')) @@ -277,7 +289,6 @@ EOT assert_equal data, parse(json) end - class SubArray < Array def <<(v) @shifted = true @@ -438,6 +449,13 @@ EOT assert_equal obj, obj_again end + def test_parsing_frozen_ascii8bit_string + assert_equal( + { 'foo' => 'bar' }, + JSON('{ "foo": "bar" }'.force_encoding(Encoding::ASCII_8BIT).freeze) + ) + end + private def assert_equal_float(expected, actual, delta = 1e-2) -- cgit v1.2.3