json 1.8.3 → 2.2.0

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.

Files changed (82) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.travis.yml +7 -10
  4. data/{CHANGES → CHANGES.md} +186 -90
  5. data/Gemfile +10 -6
  6. data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
  7. data/{README.rdoc → README.md} +184 -133
  8. data/Rakefile +33 -37
  9. data/VERSION +1 -1
  10. data/ext/json/ext/fbuffer/fbuffer.h +0 -3
  11. data/ext/json/ext/generator/generator.c +47 -61
  12. data/ext/json/ext/generator/generator.h +7 -2
  13. data/ext/json/ext/parser/extconf.rb +3 -0
  14. data/ext/json/ext/parser/parser.c +374 -459
  15. data/ext/json/ext/parser/parser.h +4 -5
  16. data/ext/json/ext/parser/parser.rl +133 -181
  17. data/ext/json/extconf.rb +0 -1
  18. data/java/src/json/ext/ByteListTranscoder.java +1 -2
  19. data/java/src/json/ext/Generator.java +11 -12
  20. data/java/src/json/ext/GeneratorMethods.java +1 -2
  21. data/java/src/json/ext/GeneratorService.java +1 -2
  22. data/java/src/json/ext/GeneratorState.java +3 -56
  23. data/java/src/json/ext/OptionsReader.java +2 -3
  24. data/java/src/json/ext/Parser.java +132 -415
  25. data/java/src/json/ext/Parser.rl +48 -124
  26. data/java/src/json/ext/ParserService.java +1 -2
  27. data/java/src/json/ext/RuntimeInfo.java +1 -6
  28. data/java/src/json/ext/StringDecoder.java +1 -2
  29. data/java/src/json/ext/StringEncoder.java +5 -0
  30. data/java/src/json/ext/Utils.java +1 -2
  31. data/json-java.gemspec +15 -0
  32. data/json.gemspec +0 -0
  33. data/json_pure.gemspec +24 -26
  34. data/lib/json/add/bigdecimal.rb +1 -0
  35. data/lib/json/add/complex.rb +2 -1
  36. data/lib/json/add/core.rb +1 -0
  37. data/lib/json/add/date.rb +1 -1
  38. data/lib/json/add/date_time.rb +1 -1
  39. data/lib/json/add/exception.rb +1 -1
  40. data/lib/json/add/ostruct.rb +3 -3
  41. data/lib/json/add/range.rb +1 -1
  42. data/lib/json/add/rational.rb +1 -0
  43. data/lib/json/add/regexp.rb +1 -1
  44. data/lib/json/add/set.rb +29 -0
  45. data/lib/json/add/struct.rb +1 -1
  46. data/lib/json/add/symbol.rb +1 -1
  47. data/lib/json/add/time.rb +1 -1
  48. data/lib/json/common.rb +24 -52
  49. data/lib/json/ext.rb +0 -6
  50. data/lib/json/generic_object.rb +5 -4
  51. data/lib/json/pure/generator.rb +61 -125
  52. data/lib/json/pure/parser.rb +33 -81
  53. data/lib/json/pure.rb +2 -8
  54. data/lib/json/version.rb +2 -1
  55. data/lib/json.rb +1 -0
  56. data/references/rfc7159.txt +899 -0
  57. data/tests/fixtures/obsolete_fail1.json +1 -0
  58. data/tests/{test_json_addition.rb → json_addition_test.rb} +32 -25
  59. data/tests/json_common_interface_test.rb +126 -0
  60. data/tests/json_encoding_test.rb +107 -0
  61. data/tests/json_ext_parser_test.rb +15 -0
  62. data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
  63. data/tests/{test_json_generate.rb → json_generator_test.rb} +79 -39
  64. data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
  65. data/tests/json_parser_test.rb +472 -0
  66. data/tests/json_string_matching_test.rb +38 -0
  67. data/tests/{setup_variant.rb → test_helper.rb} +6 -0
  68. data/tools/diff.sh +18 -0
  69. data/tools/fuzz.rb +1 -9
  70. metadata +29 -47
  71. data/COPYING +0 -58
  72. data/COPYING-json-jruby +0 -57
  73. data/GPL +0 -340
  74. data/TODO +0 -1
  75. data/data/example.json +0 -1
  76. data/data/index.html +0 -38
  77. data/data/prototype.js +0 -4184
  78. data/tests/fixtures/fail1.json +0 -1
  79. data/tests/test_json.rb +0 -553
  80. data/tests/test_json_encoding.rb +0 -65
  81. data/tests/test_json_string_matching.rb +0 -39
  82. data/tests/test_json_unicode.rb +0 -72
@@ -1,8 +1,7 @@
1
1
  /*
2
2
  * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
3
3
  *
4
- * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
5
- * for details.
4
+ * Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
6
5
  */
7
6
  package json.ext;
8
7
 
@@ -1,8 +1,7 @@
1
1
  /*
2
2
  * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
3
3
  *
4
- * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
5
- * for details.
4
+ * Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
6
5
  */
7
6
  package json.ext;
8
7
 
@@ -208,45 +207,11 @@ public class GeneratorState extends RubyObject {
208
207
  @JRubyMethod
209
208
  public IRubyObject generate(ThreadContext context, IRubyObject obj) {
210
209
  RubyString result = Generator.generateJson(context, obj, this);
211
- if (!quirksMode && !objectOrArrayLiteral(result)) {
212
- throw Utils.newException(context, Utils.M_GENERATOR_ERROR,
213
- "only generation of JSON objects or arrays allowed");
214
- }
215
210
  RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
216
- if (info.encodingsSupported()) {
217
- result.force_encoding(context, info.utf8.get());
218
- }
211
+ result.force_encoding(context, info.utf8.get());
219
212
  return result;
220
213
  }
221
214
 
222
- /**
223
- * Ensures the given string is in the form "[...]" or "{...}", being
224
- * possibly surrounded by white space.
225
- * The string's encoding must be ASCII-compatible.
226
- * @param value
227
- * @return
228
- */
229
- private static boolean objectOrArrayLiteral(RubyString value) {
230
- ByteList bl = value.getByteList();
231
- int len = bl.length();
232
-
233
- for (int pos = 0; pos < len - 1; pos++) {
234
- int b = bl.get(pos);
235
- if (Character.isWhitespace(b)) continue;
236
-
237
- // match the opening brace
238
- switch (b) {
239
- case '[':
240
- return matchClosingBrace(bl, pos, len, ']');
241
- case '{':
242
- return matchClosingBrace(bl, pos, len, '}');
243
- default:
244
- return false;
245
- }
246
- }
247
- return false;
248
- }
249
-
250
215
  private static boolean matchClosingBrace(ByteList bl, int pos, int len,
251
216
  int brace) {
252
217
  for (int endPos = len - 1; endPos > pos; endPos--) {
@@ -399,17 +364,6 @@ public class GeneratorState extends RubyObject {
399
364
  return context.getRuntime().newBoolean(asciiOnly);
400
365
  }
401
366
 
402
- @JRubyMethod(name="quirks_mode")
403
- public RubyBoolean quirks_mode_get(ThreadContext context) {
404
- return context.getRuntime().newBoolean(quirksMode);
405
- }
406
-
407
- @JRubyMethod(name="quirks_mode=")
408
- public IRubyObject quirks_mode_set(IRubyObject quirks_mode) {
409
- quirksMode = quirks_mode.isTrue();
410
- return quirks_mode.getRuntime().newBoolean(quirksMode);
411
- }
412
-
413
367
  @JRubyMethod(name="buffer_initial_length")
414
368
  public RubyInteger buffer_initial_length_get(ThreadContext context) {
415
369
  return context.getRuntime().newFixnum(bufferInitialLength);
@@ -422,11 +376,6 @@ public class GeneratorState extends RubyObject {
422
376
  return buffer_initial_length;
423
377
  }
424
378
 
425
- @JRubyMethod(name="quirks_mode?")
426
- public RubyBoolean quirks_mode_p(ThreadContext context) {
427
- return context.getRuntime().newBoolean(quirksMode);
428
- }
429
-
430
379
  public int getDepth() {
431
380
  return depth;
432
381
  }
@@ -445,7 +394,7 @@ public class GeneratorState extends RubyObject {
445
394
  private ByteList prepareByteList(ThreadContext context, IRubyObject value) {
446
395
  RubyString str = value.convertToString();
447
396
  RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
448
- if (info.encodingsSupported() && str.encoding(context) != info.utf8.get()) {
397
+ if (str.encoding(context) != info.utf8.get()) {
449
398
  str = (RubyString)str.encode(context, info.utf8.get());
450
399
  }
451
400
  return str.getByteList().dup();
@@ -481,7 +430,6 @@ public class GeneratorState extends RubyObject {
481
430
  maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
482
431
  allowNaN = opts.getBool("allow_nan", DEFAULT_ALLOW_NAN);
483
432
  asciiOnly = opts.getBool("ascii_only", DEFAULT_ASCII_ONLY);
484
- quirksMode = opts.getBool("quirks_mode", DEFAULT_QUIRKS_MODE);
485
433
  bufferInitialLength = opts.getInt("buffer_initial_length", DEFAULT_BUFFER_INITIAL_LENGTH);
486
434
 
487
435
  depth = opts.getInt("depth", 0);
@@ -508,7 +456,6 @@ public class GeneratorState extends RubyObject {
508
456
  result.op_aset(context, runtime.newSymbol("array_nl"), array_nl_get(context));
509
457
  result.op_aset(context, runtime.newSymbol("allow_nan"), allow_nan_p(context));
510
458
  result.op_aset(context, runtime.newSymbol("ascii_only"), ascii_only_p(context));
511
- result.op_aset(context, runtime.newSymbol("quirks_mode"), quirks_mode_p(context));
512
459
  result.op_aset(context, runtime.newSymbol("max_nesting"), max_nesting_get(context));
513
460
  result.op_aset(context, runtime.newSymbol("depth"), depth_get(context));
514
461
  result.op_aset(context, runtime.newSymbol("buffer_initial_length"), buffer_initial_length_get(context));
@@ -1,8 +1,7 @@
1
1
  /*
2
2
  * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
3
3
  *
4
- * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
5
- * for details.
4
+ * Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
6
5
  */
7
6
  package json.ext;
8
7
 
@@ -85,7 +84,7 @@ final class OptionsReader {
85
84
 
86
85
  RubyString str = value.convertToString();
87
86
  RuntimeInfo info = getRuntimeInfo();
88
- if (info.encodingsSupported() && str.encoding(context) != info.utf8.get()) {
87
+ if (str.encoding(context) != info.utf8.get()) {
89
88
  str = (RubyString)str.encode(context, info.utf8.get());
90
89
  }
91
90
  return str;