json 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of json might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1efee0e68bf5921252dd9b741bbcca87cc9fd5a7
4
- data.tar.gz: 0d211eec8241b54738a9a42e3cd598e4980fead3
3
+ metadata.gz: 320c2302d7fb456edd4ef4a745cc5ed7ad4e1846
4
+ data.tar.gz: 71abe50769b7736fbcec5051546c3a1df959c18e
5
5
  SHA512:
6
- metadata.gz: eacc17c70c8cc3573725d9d9bd5b311bae7cdc77608ba72f6f346df04c2e64ad4f15e0ace6b7fd4e0da8bf06df24e03a3ae7f144a55de4fa178c61d50f8b0b75
7
- data.tar.gz: 793ed905cb3143430683f0d65ba2e58dbcef2b04e06e49511c6b994bb61a34343c7d72da273ce4f4116f6a4a961208048665000e6153ac89475519b9aabfa0e6
6
+ metadata.gz: 58774480805deb214c3f28fbd11c306d98de072de879726457077e23884ca49573f64f83ee41882518b958dbc621732c6f463324ad891e0875f2a8847c52e188
7
+ data.tar.gz: de4ab46ed538410857c7f4118147d6ee92348eb4dc6dbb85447c1142692a5dfefc6f01333565f909869ab249ea5043cf8c0debb851d7ff870602ab1900589d59
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changes
2
2
 
3
+ ## 2016-07-26 (2.0.2)
4
+ * Specify `required_ruby_version` for json\_pure.
5
+ * Fix issue #295 failure when parsing frozen strings.
6
+
3
7
  ## 2016-07-01 (2.0.1)
4
8
  * Fix problem when requiring json\_pure and Parser constant was defiend top
5
9
  level.
@@ -28,7 +32,7 @@
28
32
  `JSON.dump_default_options`.
29
33
  * More tests by Michael Mac-Vicar <mmacvicar@gmail.com> and fixing
30
34
  `space_before` accessor in generator.
31
- * Performance on Jruby improvemed by Ben Browning <bbrownin@redhat.com>.
35
+ * Performance on Jruby improved by Ben Browning <bbrownin@redhat.com>.
32
36
  * Some fixes to be compatible with the new Ruby 2.2 by Zachary Scott <e@zzak.io>
33
37
  and SHIBATA Hiroshi <hsbt@ruby-lang.org>.
34
38
 
data/README.md CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
  ## Description
5
5
 
6
- This is a implementation of the JSON specification according to RFC 4627
7
- http://www.ietf.org/rfc/rfc4627.txt . Starting from version 1.0.0 on there
6
+ This is a implementation of the JSON specification according to RFC 7159
7
+ http://www.ietf.org/rfc/rfc7159.txt . Starting from version 1.0.0 on there
8
8
  will be two variants available:
9
9
 
10
10
  * A pure ruby variant, that relies on the iconv and the stringscan
data/Rakefile CHANGED
@@ -95,6 +95,7 @@ if defined?(Gem) and defined?(Gem::PackageTask)
95
95
  s.email = "flori@ping.de"
96
96
  s.homepage = "http://flori.github.com/#{PKG_NAME}"
97
97
  s.license = 'Ruby'
98
+ s.required_ruby_version = '~> 2.0'
98
99
  end
99
100
 
100
101
  desc 'Creates a json_pure.gemspec file'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.0.2
@@ -951,6 +951,7 @@ static VALUE cState_generate(VALUE self, VALUE obj)
951
951
  {
952
952
  VALUE result = cState_partial_generate(self, obj);
953
953
  GET_STATE(self);
954
+ (void)state;
954
955
  return result;
955
956
  }
956
957
 
@@ -1670,6 +1670,9 @@ static VALUE convert_encoding(VALUE source)
1670
1670
  #ifdef HAVE_RUBY_ENCODING_H
1671
1671
  rb_encoding *enc = rb_enc_get(source);
1672
1672
  if (enc == rb_ascii8bit_encoding()) {
1673
+ if (OBJ_FROZEN(source)) {
1674
+ source = rb_str_dup(source);
1675
+ }
1673
1676
  FORCE_UTF8(source);
1674
1677
  } else {
1675
1678
  source = rb_str_conv_enc(source, NULL, rb_utf8_encoding());
@@ -1805,7 +1808,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1805
1808
  }
1806
1809
 
1807
1810
 
1808
- #line 1809 "parser.c"
1811
+ #line 1812 "parser.c"
1809
1812
  enum {JSON_start = 1};
1810
1813
  enum {JSON_first_final = 10};
1811
1814
  enum {JSON_error = 0};
@@ -1813,7 +1816,7 @@ enum {JSON_error = 0};
1813
1816
  enum {JSON_en_main = 1};
1814
1817
 
1815
1818
 
1816
- #line 717 "parser.rl"
1819
+ #line 720 "parser.rl"
1817
1820
 
1818
1821
 
1819
1822
  /*
@@ -1830,16 +1833,16 @@ static VALUE cParser_parse(VALUE self)
1830
1833
  GET_PARSER;
1831
1834
 
1832
1835
 
1833
- #line 1834 "parser.c"
1836
+ #line 1837 "parser.c"
1834
1837
  {
1835
1838
  cs = JSON_start;
1836
1839
  }
1837
1840
 
1838
- #line 733 "parser.rl"
1841
+ #line 736 "parser.rl"
1839
1842
  p = json->source;
1840
1843
  pe = p + json->len;
1841
1844
 
1842
- #line 1843 "parser.c"
1845
+ #line 1846 "parser.c"
1843
1846
  {
1844
1847
  if ( p == pe )
1845
1848
  goto _test_eof;
@@ -1873,7 +1876,7 @@ st0:
1873
1876
  cs = 0;
1874
1877
  goto _out;
1875
1878
  tr2:
1876
- #line 709 "parser.rl"
1879
+ #line 712 "parser.rl"
1877
1880
  {
1878
1881
  char *np = JSON_parse_value(json, p, pe, &result, 0);
1879
1882
  if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -1883,7 +1886,7 @@ st10:
1883
1886
  if ( ++p == pe )
1884
1887
  goto _test_eof10;
1885
1888
  case 10:
1886
- #line 1887 "parser.c"
1889
+ #line 1890 "parser.c"
1887
1890
  switch( (*p) ) {
1888
1891
  case 13: goto st10;
1889
1892
  case 32: goto st10;
@@ -1972,7 +1975,7 @@ case 9:
1972
1975
  _out: {}
1973
1976
  }
1974
1977
 
1975
- #line 736 "parser.rl"
1978
+ #line 739 "parser.rl"
1976
1979
 
1977
1980
  if (cs >= JSON_first_final && p == pe) {
1978
1981
  return result;
@@ -565,6 +565,9 @@ static VALUE convert_encoding(VALUE source)
565
565
  #ifdef HAVE_RUBY_ENCODING_H
566
566
  rb_encoding *enc = rb_enc_get(source);
567
567
  if (enc == rb_ascii8bit_encoding()) {
568
+ if (OBJ_FROZEN(source)) {
569
+ source = rb_str_dup(source);
570
+ }
568
571
  FORCE_UTF8(source);
569
572
  } else {
570
573
  source = rb_str_conv_enc(source, NULL, rb_utf8_encoding());
@@ -181,6 +181,9 @@ public class Parser extends RubyObject {
181
181
  private RubyString convertEncoding(ThreadContext context, RubyString source) {
182
182
  RubyEncoding encoding = (RubyEncoding)source.encoding(context);
183
183
  if (encoding == info.ascii8bit.get()) {
184
+ if (source.isFrozen()) {
185
+ source = (RubyString) source.dup();
186
+ }
184
187
  source.force_encoding(context, info.utf8.get());
185
188
  } else {
186
189
  source = (RubyString) source.encode(context, info.utf8.get());
@@ -304,11 +307,11 @@ public class Parser extends RubyObject {
304
307
  }
305
308
 
306
309
 
307
- // line 330 "Parser.rl"
310
+ // line 333 "Parser.rl"
308
311
 
309
312
 
310
313
 
311
- // line 312 "Parser.java"
314
+ // line 315 "Parser.java"
312
315
  private static byte[] init__JSON_value_actions_0()
313
316
  {
314
317
  return new byte [] {
@@ -422,7 +425,7 @@ static final int JSON_value_error = 0;
422
425
  static final int JSON_value_en_main = 1;
423
426
 
424
427
 
425
- // line 436 "Parser.rl"
428
+ // line 439 "Parser.rl"
426
429
 
427
430
 
428
431
  void parseValue(ParserResult res, int p, int pe) {
@@ -430,14 +433,14 @@ static final int JSON_value_en_main = 1;
430
433
  IRubyObject result = null;
431
434
 
432
435
 
433
- // line 434 "Parser.java"
436
+ // line 437 "Parser.java"
434
437
  {
435
438
  cs = JSON_value_start;
436
439
  }
437
440
 
438
- // line 443 "Parser.rl"
441
+ // line 446 "Parser.rl"
439
442
 
440
- // line 441 "Parser.java"
443
+ // line 444 "Parser.java"
441
444
  {
442
445
  int _klen;
443
446
  int _trans = 0;
@@ -463,13 +466,13 @@ case 1:
463
466
  while ( _nacts-- > 0 ) {
464
467
  switch ( _JSON_value_actions[_acts++] ) {
465
468
  case 9:
466
- // line 421 "Parser.rl"
469
+ // line 424 "Parser.rl"
467
470
  {
468
471
  p--;
469
472
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
470
473
  }
471
474
  break;
472
- // line 473 "Parser.java"
475
+ // line 476 "Parser.java"
473
476
  }
474
477
  }
475
478
 
@@ -532,25 +535,25 @@ case 1:
532
535
  switch ( _JSON_value_actions[_acts++] )
533
536
  {
534
537
  case 0:
535
- // line 338 "Parser.rl"
538
+ // line 341 "Parser.rl"
536
539
  {
537
540
  result = getRuntime().getNil();
538
541
  }
539
542
  break;
540
543
  case 1:
541
- // line 341 "Parser.rl"
544
+ // line 344 "Parser.rl"
542
545
  {
543
546
  result = getRuntime().getFalse();
544
547
  }
545
548
  break;
546
549
  case 2:
547
- // line 344 "Parser.rl"
550
+ // line 347 "Parser.rl"
548
551
  {
549
552
  result = getRuntime().getTrue();
550
553
  }
551
554
  break;
552
555
  case 3:
553
- // line 347 "Parser.rl"
556
+ // line 350 "Parser.rl"
554
557
  {
555
558
  if (parser.allowNaN) {
556
559
  result = getConstant(CONST_NAN);
@@ -560,7 +563,7 @@ case 1:
560
563
  }
561
564
  break;
562
565
  case 4:
563
- // line 354 "Parser.rl"
566
+ // line 357 "Parser.rl"
564
567
  {
565
568
  if (parser.allowNaN) {
566
569
  result = getConstant(CONST_INFINITY);
@@ -570,7 +573,7 @@ case 1:
570
573
  }
571
574
  break;
572
575
  case 5:
573
- // line 361 "Parser.rl"
576
+ // line 364 "Parser.rl"
574
577
  {
575
578
  if (pe > p + 8 &&
576
579
  absSubSequence(p, p + 9).equals(JSON_MINUS_INFINITY)) {
@@ -599,7 +602,7 @@ case 1:
599
602
  }
600
603
  break;
601
604
  case 6:
602
- // line 387 "Parser.rl"
605
+ // line 390 "Parser.rl"
603
606
  {
604
607
  parseString(res, p, pe);
605
608
  if (res.result == null) {
@@ -612,7 +615,7 @@ case 1:
612
615
  }
613
616
  break;
614
617
  case 7:
615
- // line 397 "Parser.rl"
618
+ // line 400 "Parser.rl"
616
619
  {
617
620
  currentNesting++;
618
621
  parseArray(res, p, pe);
@@ -627,7 +630,7 @@ case 1:
627
630
  }
628
631
  break;
629
632
  case 8:
630
- // line 409 "Parser.rl"
633
+ // line 412 "Parser.rl"
631
634
  {
632
635
  currentNesting++;
633
636
  parseObject(res, p, pe);
@@ -641,7 +644,7 @@ case 1:
641
644
  }
642
645
  }
643
646
  break;
644
- // line 645 "Parser.java"
647
+ // line 648 "Parser.java"
645
648
  }
646
649
  }
647
650
  }
@@ -661,7 +664,7 @@ case 5:
661
664
  break; }
662
665
  }
663
666
 
664
- // line 444 "Parser.rl"
667
+ // line 447 "Parser.rl"
665
668
 
666
669
  if (cs >= JSON_value_first_final && result != null) {
667
670
  res.update(result, p);
@@ -671,7 +674,7 @@ case 5:
671
674
  }
672
675
 
673
676
 
674
- // line 675 "Parser.java"
677
+ // line 678 "Parser.java"
675
678
  private static byte[] init__JSON_integer_actions_0()
676
679
  {
677
680
  return new byte [] {
@@ -770,7 +773,7 @@ static final int JSON_integer_error = 0;
770
773
  static final int JSON_integer_en_main = 1;
771
774
 
772
775
 
773
- // line 463 "Parser.rl"
776
+ // line 466 "Parser.rl"
774
777
 
775
778
 
776
779
  void parseInteger(ParserResult res, int p, int pe) {
@@ -788,15 +791,15 @@ static final int JSON_integer_en_main = 1;
788
791
  int cs = EVIL;
789
792
 
790
793
 
791
- // line 792 "Parser.java"
794
+ // line 795 "Parser.java"
792
795
  {
793
796
  cs = JSON_integer_start;
794
797
  }
795
798
 
796
- // line 480 "Parser.rl"
799
+ // line 483 "Parser.rl"
797
800
  int memo = p;
798
801
 
799
- // line 800 "Parser.java"
802
+ // line 803 "Parser.java"
800
803
  {
801
804
  int _klen;
802
805
  int _trans = 0;
@@ -877,13 +880,13 @@ case 1:
877
880
  switch ( _JSON_integer_actions[_acts++] )
878
881
  {
879
882
  case 0:
880
- // line 457 "Parser.rl"
883
+ // line 460 "Parser.rl"
881
884
  {
882
885
  p--;
883
886
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
884
887
  }
885
888
  break;
886
- // line 887 "Parser.java"
889
+ // line 890 "Parser.java"
887
890
  }
888
891
  }
889
892
  }
@@ -903,7 +906,7 @@ case 5:
903
906
  break; }
904
907
  }
905
908
 
906
- // line 482 "Parser.rl"
909
+ // line 485 "Parser.rl"
907
910
 
908
911
  if (cs < JSON_integer_first_final) {
909
912
  return -1;
@@ -925,7 +928,7 @@ case 5:
925
928
  }
926
929
 
927
930
 
928
- // line 929 "Parser.java"
931
+ // line 932 "Parser.java"
929
932
  private static byte[] init__JSON_float_actions_0()
930
933
  {
931
934
  return new byte [] {
@@ -1027,7 +1030,7 @@ static final int JSON_float_error = 0;
1027
1030
  static final int JSON_float_en_main = 1;
1028
1031
 
1029
1032
 
1030
- // line 517 "Parser.rl"
1033
+ // line 520 "Parser.rl"
1031
1034
 
1032
1035
 
1033
1036
  void parseFloat(ParserResult res, int p, int pe) {
@@ -1045,15 +1048,15 @@ static final int JSON_float_en_main = 1;
1045
1048
  int cs = EVIL;
1046
1049
 
1047
1050
 
1048
- // line 1049 "Parser.java"
1051
+ // line 1052 "Parser.java"
1049
1052
  {
1050
1053
  cs = JSON_float_start;
1051
1054
  }
1052
1055
 
1053
- // line 534 "Parser.rl"
1056
+ // line 537 "Parser.rl"
1054
1057
  int memo = p;
1055
1058
 
1056
- // line 1057 "Parser.java"
1059
+ // line 1060 "Parser.java"
1057
1060
  {
1058
1061
  int _klen;
1059
1062
  int _trans = 0;
@@ -1134,13 +1137,13 @@ case 1:
1134
1137
  switch ( _JSON_float_actions[_acts++] )
1135
1138
  {
1136
1139
  case 0:
1137
- // line 508 "Parser.rl"
1140
+ // line 511 "Parser.rl"
1138
1141
  {
1139
1142
  p--;
1140
1143
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1141
1144
  }
1142
1145
  break;
1143
- // line 1144 "Parser.java"
1146
+ // line 1147 "Parser.java"
1144
1147
  }
1145
1148
  }
1146
1149
  }
@@ -1160,7 +1163,7 @@ case 5:
1160
1163
  break; }
1161
1164
  }
1162
1165
 
1163
- // line 536 "Parser.rl"
1166
+ // line 539 "Parser.rl"
1164
1167
 
1165
1168
  if (cs < JSON_float_first_final) {
1166
1169
  return -1;
@@ -1176,7 +1179,7 @@ case 5:
1176
1179
  }
1177
1180
 
1178
1181
 
1179
- // line 1180 "Parser.java"
1182
+ // line 1183 "Parser.java"
1180
1183
  private static byte[] init__JSON_string_actions_0()
1181
1184
  {
1182
1185
  return new byte [] {
@@ -1278,7 +1281,7 @@ static final int JSON_string_error = 0;
1278
1281
  static final int JSON_string_en_main = 1;
1279
1282
 
1280
1283
 
1281
- // line 581 "Parser.rl"
1284
+ // line 584 "Parser.rl"
1282
1285
 
1283
1286
 
1284
1287
  void parseString(ParserResult res, int p, int pe) {
@@ -1286,15 +1289,15 @@ static final int JSON_string_en_main = 1;
1286
1289
  IRubyObject result = null;
1287
1290
 
1288
1291
 
1289
- // line 1290 "Parser.java"
1292
+ // line 1293 "Parser.java"
1290
1293
  {
1291
1294
  cs = JSON_string_start;
1292
1295
  }
1293
1296
 
1294
- // line 588 "Parser.rl"
1297
+ // line 591 "Parser.rl"
1295
1298
  int memo = p;
1296
1299
 
1297
- // line 1298 "Parser.java"
1300
+ // line 1301 "Parser.java"
1298
1301
  {
1299
1302
  int _klen;
1300
1303
  int _trans = 0;
@@ -1375,7 +1378,7 @@ case 1:
1375
1378
  switch ( _JSON_string_actions[_acts++] )
1376
1379
  {
1377
1380
  case 0:
1378
- // line 556 "Parser.rl"
1381
+ // line 559 "Parser.rl"
1379
1382
  {
1380
1383
  int offset = byteList.begin();
1381
1384
  ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
@@ -1390,13 +1393,13 @@ case 1:
1390
1393
  }
1391
1394
  break;
1392
1395
  case 1:
1393
- // line 569 "Parser.rl"
1396
+ // line 572 "Parser.rl"
1394
1397
  {
1395
1398
  p--;
1396
1399
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1397
1400
  }
1398
1401
  break;
1399
- // line 1400 "Parser.java"
1402
+ // line 1403 "Parser.java"
1400
1403
  }
1401
1404
  }
1402
1405
  }
@@ -1416,7 +1419,7 @@ case 5:
1416
1419
  break; }
1417
1420
  }
1418
1421
 
1419
- // line 590 "Parser.rl"
1422
+ // line 593 "Parser.rl"
1420
1423
 
1421
1424
  if (parser.createAdditions) {
1422
1425
  RubyHash matchString = parser.matchString;
@@ -1454,7 +1457,7 @@ case 5:
1454
1457
  }
1455
1458
 
1456
1459
 
1457
- // line 1458 "Parser.java"
1460
+ // line 1461 "Parser.java"
1458
1461
  private static byte[] init__JSON_array_actions_0()
1459
1462
  {
1460
1463
  return new byte [] {
@@ -1567,7 +1570,7 @@ static final int JSON_array_error = 0;
1567
1570
  static final int JSON_array_en_main = 1;
1568
1571
 
1569
1572
 
1570
- // line 663 "Parser.rl"
1573
+ // line 666 "Parser.rl"
1571
1574
 
1572
1575
 
1573
1576
  void parseArray(ParserResult res, int p, int pe) {
@@ -1587,14 +1590,14 @@ static final int JSON_array_en_main = 1;
1587
1590
  }
1588
1591
 
1589
1592
 
1590
- // line 1591 "Parser.java"
1593
+ // line 1594 "Parser.java"
1591
1594
  {
1592
1595
  cs = JSON_array_start;
1593
1596
  }
1594
1597
 
1595
- // line 682 "Parser.rl"
1598
+ // line 685 "Parser.rl"
1596
1599
 
1597
- // line 1598 "Parser.java"
1600
+ // line 1601 "Parser.java"
1598
1601
  {
1599
1602
  int _klen;
1600
1603
  int _trans = 0;
@@ -1675,7 +1678,7 @@ case 1:
1675
1678
  switch ( _JSON_array_actions[_acts++] )
1676
1679
  {
1677
1680
  case 0:
1678
- // line 632 "Parser.rl"
1681
+ // line 635 "Parser.rl"
1679
1682
  {
1680
1683
  parseValue(res, p, pe);
1681
1684
  if (res.result == null) {
@@ -1692,13 +1695,13 @@ case 1:
1692
1695
  }
1693
1696
  break;
1694
1697
  case 1:
1695
- // line 647 "Parser.rl"
1698
+ // line 650 "Parser.rl"
1696
1699
  {
1697
1700
  p--;
1698
1701
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1699
1702
  }
1700
1703
  break;
1701
- // line 1702 "Parser.java"
1704
+ // line 1705 "Parser.java"
1702
1705
  }
1703
1706
  }
1704
1707
  }
@@ -1718,7 +1721,7 @@ case 5:
1718
1721
  break; }
1719
1722
  }
1720
1723
 
1721
- // line 683 "Parser.rl"
1724
+ // line 686 "Parser.rl"
1722
1725
 
1723
1726
  if (cs >= JSON_array_first_final) {
1724
1727
  res.update(result, p + 1);
@@ -1728,7 +1731,7 @@ case 5:
1728
1731
  }
1729
1732
 
1730
1733
 
1731
- // line 1732 "Parser.java"
1734
+ // line 1735 "Parser.java"
1732
1735
  private static byte[] init__JSON_object_actions_0()
1733
1736
  {
1734
1737
  return new byte [] {
@@ -1851,7 +1854,7 @@ static final int JSON_object_error = 0;
1851
1854
  static final int JSON_object_en_main = 1;
1852
1855
 
1853
1856
 
1854
- // line 742 "Parser.rl"
1857
+ // line 745 "Parser.rl"
1855
1858
 
1856
1859
 
1857
1860
  void parseObject(ParserResult res, int p, int pe) {
@@ -1876,14 +1879,14 @@ static final int JSON_object_en_main = 1;
1876
1879
  }
1877
1880
 
1878
1881
 
1879
- // line 1880 "Parser.java"
1882
+ // line 1883 "Parser.java"
1880
1883
  {
1881
1884
  cs = JSON_object_start;
1882
1885
  }
1883
1886
 
1884
- // line 766 "Parser.rl"
1887
+ // line 769 "Parser.rl"
1885
1888
 
1886
- // line 1887 "Parser.java"
1889
+ // line 1890 "Parser.java"
1887
1890
  {
1888
1891
  int _klen;
1889
1892
  int _trans = 0;
@@ -1964,7 +1967,7 @@ case 1:
1964
1967
  switch ( _JSON_object_actions[_acts++] )
1965
1968
  {
1966
1969
  case 0:
1967
- // line 697 "Parser.rl"
1970
+ // line 700 "Parser.rl"
1968
1971
  {
1969
1972
  parseValue(res, p, pe);
1970
1973
  if (res.result == null) {
@@ -1981,7 +1984,7 @@ case 1:
1981
1984
  }
1982
1985
  break;
1983
1986
  case 1:
1984
- // line 712 "Parser.rl"
1987
+ // line 715 "Parser.rl"
1985
1988
  {
1986
1989
  parseString(res, p, pe);
1987
1990
  if (res.result == null) {
@@ -2001,13 +2004,13 @@ case 1:
2001
2004
  }
2002
2005
  break;
2003
2006
  case 2:
2004
- // line 730 "Parser.rl"
2007
+ // line 733 "Parser.rl"
2005
2008
  {
2006
2009
  p--;
2007
2010
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
2008
2011
  }
2009
2012
  break;
2010
- // line 2011 "Parser.java"
2013
+ // line 2014 "Parser.java"
2011
2014
  }
2012
2015
  }
2013
2016
  }
@@ -2027,7 +2030,7 @@ case 5:
2027
2030
  break; }
2028
2031
  }
2029
2032
 
2030
- // line 767 "Parser.rl"
2033
+ // line 770 "Parser.rl"
2031
2034
 
2032
2035
  if (cs < JSON_object_first_final) {
2033
2036
  res.update(null, p + 1);
@@ -2060,7 +2063,7 @@ case 5:
2060
2063
  }
2061
2064
 
2062
2065
 
2063
- // line 2064 "Parser.java"
2066
+ // line 2067 "Parser.java"
2064
2067
  private static byte[] init__JSON_actions_0()
2065
2068
  {
2066
2069
  return new byte [] {
@@ -2163,7 +2166,7 @@ static final int JSON_error = 0;
2163
2166
  static final int JSON_en_main = 1;
2164
2167
 
2165
2168
 
2166
- // line 818 "Parser.rl"
2169
+ // line 821 "Parser.rl"
2167
2170
 
2168
2171
 
2169
2172
  public IRubyObject parseImplemetation() {
@@ -2173,16 +2176,16 @@ static final int JSON_en_main = 1;
2173
2176
  ParserResult res = new ParserResult();
2174
2177
 
2175
2178
 
2176
- // line 2177 "Parser.java"
2179
+ // line 2180 "Parser.java"
2177
2180
  {
2178
2181
  cs = JSON_start;
2179
2182
  }
2180
2183
 
2181
- // line 827 "Parser.rl"
2184
+ // line 830 "Parser.rl"
2182
2185
  p = byteList.begin();
2183
2186
  pe = p + byteList.length();
2184
2187
 
2185
- // line 2186 "Parser.java"
2188
+ // line 2189 "Parser.java"
2186
2189
  {
2187
2190
  int _klen;
2188
2191
  int _trans = 0;
@@ -2263,7 +2266,7 @@ case 1:
2263
2266
  switch ( _JSON_actions[_acts++] )
2264
2267
  {
2265
2268
  case 0:
2266
- // line 804 "Parser.rl"
2269
+ // line 807 "Parser.rl"
2267
2270
  {
2268
2271
  parseValue(res, p, pe);
2269
2272
  if (res.result == null) {
@@ -2275,7 +2278,7 @@ case 1:
2275
2278
  }
2276
2279
  }
2277
2280
  break;
2278
- // line 2279 "Parser.java"
2281
+ // line 2282 "Parser.java"
2279
2282
  }
2280
2283
  }
2281
2284
  }
@@ -2295,7 +2298,7 @@ case 5:
2295
2298
  break; }
2296
2299
  }
2297
2300
 
2298
- // line 830 "Parser.rl"
2301
+ // line 833 "Parser.rl"
2299
2302
 
2300
2303
  if (cs >= JSON_first_final && p == pe) {
2301
2304
  return result;
@@ -179,6 +179,9 @@ public class Parser extends RubyObject {
179
179
  private RubyString convertEncoding(ThreadContext context, RubyString source) {
180
180
  RubyEncoding encoding = (RubyEncoding)source.encoding(context);
181
181
  if (encoding == info.ascii8bit.get()) {
182
+ if (source.isFrozen()) {
183
+ source = (RubyString) source.dup();
184
+ }
182
185
  source.force_encoding(context, info.utf8.get());
183
186
  } else {
184
187
  source = (RubyString) source.encode(context, info.utf8.get());
Binary file
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: json_pure 2.0.1 ruby lib
2
+ # stub: json_pure 2.0.2 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "json_pure".freeze
6
- s.version = "2.0.1"
6
+ s.version = "2.0.2"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2016-07-01"
11
+ s.date = "2016-07-26"
12
12
  s.description = "This is a JSON implementation in pure Ruby.".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze]
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.homepage = "http://flori.github.com/json".freeze
17
17
  s.licenses = ["Ruby".freeze]
18
18
  s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze, "--main".freeze, "README.md".freeze]
19
+ s.required_ruby_version = Gem::Requirement.new("~> 2.0".freeze)
19
20
  s.rubygems_version = "2.6.4".freeze
20
21
  s.summary = "JSON Implementation for Ruby".freeze
21
22
  s.test_files = ["./tests/test_helper.rb".freeze]
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
  module JSON
3
3
  # JSON version
4
- VERSION = '2.0.1'
4
+ VERSION = '2.0.2'
5
5
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
6
6
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
7
7
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -47,7 +47,7 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
47
47
  end
48
48
 
49
49
  def test_deep_const_get
50
- assert_raises(ArgumentError) { JSON.deep_const_get('Nix::Da') }
50
+ assert_raise(ArgumentError) { JSON.deep_const_get('Nix::Da') }
51
51
  assert_equal File::SEPARATOR, JSON.deep_const_get('File::SEPARATOR')
52
52
  end
53
53
 
@@ -93,8 +93,8 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
93
93
 
94
94
  def test_load_null
95
95
  assert_equal nil, JSON.load(nil, nil, :allow_blank => true)
96
- assert_raises(TypeError) { JSON.load(nil, nil, :allow_blank => false) }
97
- assert_raises(JSON::ParserError) { JSON.load('', nil, :allow_blank => false) }
96
+ assert_raise(TypeError) { JSON.load(nil, nil, :allow_blank => false) }
97
+ assert_raise(JSON::ParserError) { JSON.load('', nil, :allow_blank => false) }
98
98
  end
99
99
 
100
100
  def test_dump
@@ -40,6 +40,18 @@ class JSONParserTest < Test::Unit::TestCase
40
40
  assert_equal({ 'a' => 'b' }, parser.parse)
41
41
  end
42
42
 
43
+ def test_parse_values
44
+ assert_equal(nil, parse('null'))
45
+ assert_equal(false, parse('false'))
46
+ assert_equal(true, parse('true'))
47
+ assert_equal(-23, parse('-23'))
48
+ assert_equal(23, parse('23'))
49
+ assert_in_delta(0.23, parse('0.23'), 1e-2)
50
+ assert_in_delta(0.0, parse('0e0'), 1e-2)
51
+ assert_equal("", parse('""'))
52
+ assert_equal("foobar", parse('"foobar"'))
53
+ end
54
+
43
55
  def test_parse_simple_arrays
44
56
  assert_equal([], parse('[]'))
45
57
  assert_equal([], parse(' [ ] '))
@@ -277,7 +289,6 @@ EOT
277
289
  assert_equal data, parse(json)
278
290
  end
279
291
 
280
-
281
292
  class SubArray < Array
282
293
  def <<(v)
283
294
  @shifted = true
@@ -438,6 +449,13 @@ EOT
438
449
  assert_equal obj, obj_again
439
450
  end
440
451
 
452
+ def test_parsing_frozen_ascii8bit_string
453
+ assert_equal(
454
+ { 'foo' => 'bar' },
455
+ JSON('{ "foo": "bar" }'.force_encoding(Encoding::ASCII_8BIT).freeze)
456
+ )
457
+ end
458
+
441
459
  private
442
460
 
443
461
  def assert_equal_float(expected, actual, delta = 1e-2)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-01 00:00:00.000000000 Z
11
+ date: 2016-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake