json 1.6.7 → 1.6.8

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.

data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ 2013-02-04 (1.6.8)
2
+ * Security fix for JSON create_additions default value. It should not be
3
+ possible to create additions unless
4
+ explicitely requested by setting the create_additions argument to true or
5
+ using the JSON.load/dump interface.
1
6
  2012-04-27 (1.6.7)
2
7
  * Fix possible crash when trying to parse nil value.
3
8
  2012-02-11 (1.6.6)
data/Gemfile CHANGED
@@ -6,10 +6,6 @@ gemspec :name => 'json'
6
6
  gemspec :name => 'json_pure'
7
7
  gemspec :name => 'json-java'
8
8
 
9
- group :development, :test do
10
- gem 'simplecov', :platform => :mri_19
11
- end
12
-
13
- group :test do
14
- gem 'test-unit', '2.4.7', :platform => :mri_19
15
- end
9
+ gem 'utils'
10
+ gem 'test-unit'
11
+ gem 'debugger', :platform => :mri_19
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.7
1
+ 1.6.8
@@ -1680,7 +1680,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1680
1680
  if (option_given_p(opts, tmp)) {
1681
1681
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
1682
1682
  } else {
1683
- json->create_additions = 1;
1683
+ json->create_additions = 0;
1684
1684
  }
1685
1685
  tmp = ID2SYM(i_create_id);
1686
1686
  if (option_given_p(opts, tmp)) {
@@ -664,7 +664,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
664
664
  if (option_given_p(opts, tmp)) {
665
665
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
666
666
  } else {
667
- json->create_additions = 1;
667
+ json->create_additions = 0;
668
668
  }
669
669
  tmp = ID2SYM(i_create_id);
670
670
  if (option_given_p(opts, tmp)) {
@@ -166,7 +166,7 @@ public class Parser extends RubyObject {
166
166
  this.symbolizeNames = opts.getBool("symbolize_names", false);
167
167
  this.quirksMode = opts.getBool("quirks_mode", false);
168
168
  this.createId = opts.getString("create_id", getCreateId(context));
169
- this.createAdditions = opts.getBool("create_additions", true);
169
+ this.createAdditions = opts.getBool("create_additions", false);
170
170
  this.objectClass = opts.getClass("object_class", runtime.getHash());
171
171
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
172
172
  this.match_string = opts.getHash("match_string");
@@ -1617,14 +1617,14 @@ static final int JSON_array_en_main = 1;
1617
1617
  }
1618
1618
 
1619
1619
 
1620
- // line 1623 "Parser.java"
1620
+ // line 1621 "Parser.java"
1621
1621
  {
1622
1622
  cs = JSON_array_start;
1623
1623
  }
1624
1624
 
1625
- // line 714 "Parser.rl"
1625
+ // line 712 "Parser.rl"
1626
1626
 
1627
- // line 1630 "Parser.java"
1627
+ // line 1628 "Parser.java"
1628
1628
  {
1629
1629
  int _klen;
1630
1630
  int _trans = 0;
@@ -1728,7 +1728,7 @@ case 1:
1728
1728
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1729
1729
  }
1730
1730
  break;
1731
- // line 1734 "Parser.java"
1731
+ // line 1732 "Parser.java"
1732
1732
  }
1733
1733
  }
1734
1734
  }
@@ -1748,7 +1748,7 @@ case 5:
1748
1748
  break; }
1749
1749
  }
1750
1750
 
1751
- // line 715 "Parser.rl"
1751
+ // line 713 "Parser.rl"
1752
1752
 
1753
1753
  if (cs >= JSON_array_first_final) {
1754
1754
  res.update(result, p + 1);
@@ -1758,7 +1758,7 @@ case 5:
1758
1758
  }
1759
1759
 
1760
1760
 
1761
- // line 1764 "Parser.java"
1761
+ // line 1762 "Parser.java"
1762
1762
  private static byte[] init__JSON_object_actions_0()
1763
1763
  {
1764
1764
  return new byte [] {
@@ -1881,7 +1881,7 @@ static final int JSON_object_error = 0;
1881
1881
  static final int JSON_object_en_main = 1;
1882
1882
 
1883
1883
 
1884
- // line 774 "Parser.rl"
1884
+ // line 772 "Parser.rl"
1885
1885
 
1886
1886
 
1887
1887
  void parseObject(ParserResult res, int p, int pe) {
@@ -1906,14 +1906,14 @@ static final int JSON_object_en_main = 1;
1906
1906
  }
1907
1907
 
1908
1908
 
1909
- // line 1912 "Parser.java"
1909
+ // line 1910 "Parser.java"
1910
1910
  {
1911
1911
  cs = JSON_object_start;
1912
1912
  }
1913
1913
 
1914
- // line 798 "Parser.rl"
1914
+ // line 796 "Parser.rl"
1915
1915
 
1916
- // line 1919 "Parser.java"
1916
+ // line 1917 "Parser.java"
1917
1917
  {
1918
1918
  int _klen;
1919
1919
  int _trans = 0;
@@ -1994,7 +1994,7 @@ case 1:
1994
1994
  switch ( _JSON_object_actions[_acts++] )
1995
1995
  {
1996
1996
  case 0:
1997
- // line 729 "Parser.rl"
1997
+ // line 727 "Parser.rl"
1998
1998
  {
1999
1999
  parseValue(res, p, pe);
2000
2000
  if (res.result == null) {
@@ -2011,7 +2011,7 @@ case 1:
2011
2011
  }
2012
2012
  break;
2013
2013
  case 1:
2014
- // line 744 "Parser.rl"
2014
+ // line 742 "Parser.rl"
2015
2015
  {
2016
2016
  parseString(res, p, pe);
2017
2017
  if (res.result == null) {
@@ -2031,13 +2031,13 @@ case 1:
2031
2031
  }
2032
2032
  break;
2033
2033
  case 2:
2034
- // line 762 "Parser.rl"
2034
+ // line 760 "Parser.rl"
2035
2035
  {
2036
2036
  p--;
2037
2037
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
2038
2038
  }
2039
2039
  break;
2040
- // line 2043 "Parser.java"
2040
+ // line 2041 "Parser.java"
2041
2041
  }
2042
2042
  }
2043
2043
  }
@@ -2057,7 +2057,7 @@ case 5:
2057
2057
  break; }
2058
2058
  }
2059
2059
 
2060
- // line 799 "Parser.rl"
2060
+ // line 797 "Parser.rl"
2061
2061
 
2062
2062
  if (cs < JSON_object_first_final) {
2063
2063
  res.update(null, p + 1);
@@ -2090,7 +2090,7 @@ case 5:
2090
2090
  }
2091
2091
 
2092
2092
 
2093
- // line 2096 "Parser.java"
2093
+ // line 2094 "Parser.java"
2094
2094
  private static byte[] init__JSON_actions_0()
2095
2095
  {
2096
2096
  return new byte [] {
@@ -2194,7 +2194,7 @@ static final int JSON_error = 0;
2194
2194
  static final int JSON_en_main = 1;
2195
2195
 
2196
2196
 
2197
- // line 864 "Parser.rl"
2197
+ // line 862 "Parser.rl"
2198
2198
 
2199
2199
 
2200
2200
  public IRubyObject parseStrict() {
@@ -2204,16 +2204,16 @@ static final int JSON_en_main = 1;
2204
2204
  ParserResult res = new ParserResult();
2205
2205
 
2206
2206
 
2207
- // line 2210 "Parser.java"
2207
+ // line 2208 "Parser.java"
2208
2208
  {
2209
2209
  cs = JSON_start;
2210
2210
  }
2211
2211
 
2212
- // line 873 "Parser.rl"
2212
+ // line 871 "Parser.rl"
2213
2213
  p = byteList.begin();
2214
2214
  pe = p + byteList.length();
2215
2215
 
2216
- // line 2219 "Parser.java"
2216
+ // line 2217 "Parser.java"
2217
2217
  {
2218
2218
  int _klen;
2219
2219
  int _trans = 0;
@@ -2294,7 +2294,7 @@ case 1:
2294
2294
  switch ( _JSON_actions[_acts++] )
2295
2295
  {
2296
2296
  case 0:
2297
- // line 836 "Parser.rl"
2297
+ // line 834 "Parser.rl"
2298
2298
  {
2299
2299
  currentNesting = 1;
2300
2300
  parseObject(res, p, pe);
@@ -2308,7 +2308,7 @@ case 1:
2308
2308
  }
2309
2309
  break;
2310
2310
  case 1:
2311
- // line 848 "Parser.rl"
2311
+ // line 846 "Parser.rl"
2312
2312
  {
2313
2313
  currentNesting = 1;
2314
2314
  parseArray(res, p, pe);
@@ -2321,7 +2321,7 @@ case 1:
2321
2321
  }
2322
2322
  }
2323
2323
  break;
2324
- // line 2327 "Parser.java"
2324
+ // line 2325 "Parser.java"
2325
2325
  }
2326
2326
  }
2327
2327
  }
@@ -2341,7 +2341,7 @@ case 5:
2341
2341
  break; }
2342
2342
  }
2343
2343
 
2344
- // line 876 "Parser.rl"
2344
+ // line 874 "Parser.rl"
2345
2345
 
2346
2346
  if (cs >= JSON_first_final && p == pe) {
2347
2347
  return result;
@@ -2351,7 +2351,7 @@ case 5:
2351
2351
  }
2352
2352
 
2353
2353
 
2354
- // line 2357 "Parser.java"
2354
+ // line 2355 "Parser.java"
2355
2355
  private static byte[] init__JSON_quirks_mode_actions_0()
2356
2356
  {
2357
2357
  return new byte [] {
@@ -2454,7 +2454,7 @@ static final int JSON_quirks_mode_error = 0;
2454
2454
  static final int JSON_quirks_mode_en_main = 1;
2455
2455
 
2456
2456
 
2457
- // line 904 "Parser.rl"
2457
+ // line 902 "Parser.rl"
2458
2458
 
2459
2459
 
2460
2460
  public IRubyObject parseQuirksMode() {
@@ -2464,16 +2464,16 @@ static final int JSON_quirks_mode_en_main = 1;
2464
2464
  ParserResult res = new ParserResult();
2465
2465
 
2466
2466
 
2467
- // line 2470 "Parser.java"
2467
+ // line 2468 "Parser.java"
2468
2468
  {
2469
2469
  cs = JSON_quirks_mode_start;
2470
2470
  }
2471
2471
 
2472
- // line 913 "Parser.rl"
2472
+ // line 911 "Parser.rl"
2473
2473
  p = byteList.begin();
2474
2474
  pe = p + byteList.length();
2475
2475
 
2476
- // line 2479 "Parser.java"
2476
+ // line 2477 "Parser.java"
2477
2477
  {
2478
2478
  int _klen;
2479
2479
  int _trans = 0;
@@ -2554,7 +2554,7 @@ case 1:
2554
2554
  switch ( _JSON_quirks_mode_actions[_acts++] )
2555
2555
  {
2556
2556
  case 0:
2557
- // line 890 "Parser.rl"
2557
+ // line 888 "Parser.rl"
2558
2558
  {
2559
2559
  parseValue(res, p, pe);
2560
2560
  if (res.result == null) {
@@ -2566,7 +2566,7 @@ case 1:
2566
2566
  }
2567
2567
  }
2568
2568
  break;
2569
- // line 2572 "Parser.java"
2569
+ // line 2570 "Parser.java"
2570
2570
  }
2571
2571
  }
2572
2572
  }
@@ -2586,7 +2586,7 @@ case 5:
2586
2586
  break; }
2587
2587
  }
2588
2588
 
2589
- // line 916 "Parser.rl"
2589
+ // line 914 "Parser.rl"
2590
2590
 
2591
2591
  if (cs >= JSON_quirks_mode_first_final && p == pe) {
2592
2592
  return result;
@@ -164,7 +164,7 @@ public class Parser extends RubyObject {
164
164
  this.symbolizeNames = opts.getBool("symbolize_names", false);
165
165
  this.quirksMode = opts.getBool("quirks_mode", false);
166
166
  this.createId = opts.getString("create_id", getCreateId(context));
167
- this.createAdditions = opts.getBool("create_additions", true);
167
+ this.createAdditions = opts.getBool("create_additions", false);
168
168
  this.objectClass = opts.getClass("object_class", runtime.getHash());
169
169
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
170
170
  this.match_string = opts.getHash("match_string");
@@ -2,21 +2,21 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json"
5
- s.version = "1.6.7"
5
+ s.version = "1.6.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2012-04-28"
9
+ s.date = "2013-02-10"
10
10
  s.description = "This is a JSON implementation as a Ruby extension in C."
11
11
  s.email = "flori@ping.de"
12
- s.extensions = ["ext/json/ext/parser/extconf.rb", "ext/json/ext/generator/extconf.rb"]
12
+ s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
13
13
  s.extra_rdoc_files = ["README.rdoc"]
14
14
  s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/light_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
15
15
  s.homepage = "http://flori.github.com/json"
16
16
  s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
17
17
  s.require_paths = ["ext/json/ext", "ext", "lib"]
18
18
  s.rubyforge_project = "json"
19
- s.rubygems_version = "1.8.23"
19
+ s.rubygems_version = "1.8.25"
20
20
  s.summary = "JSON Implementation for Ruby"
21
21
  s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
22
22
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json_pure"
5
- s.version = "1.6.7"
5
+ s.version = "1.6.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2012-04-28"
9
+ s.date = "2013-02-10"
10
10
  s.description = "This is a JSON implementation in pure Ruby."
11
11
  s.email = "flori@ping.de"
12
12
  s.extra_rdoc_files = ["README.rdoc"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.rdoc_options = ["--title", "JSON implemention for ruby", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = "json"
18
- s.rubygems_version = "1.8.23"
18
+ s.rubygems_version = "1.8.25"
19
19
  s.summary = "JSON Implementation for Ruby"
20
20
  s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
21
21
 
@@ -293,21 +293,28 @@ module JSON
293
293
  attr_accessor :load_default_options
294
294
  end
295
295
  self.load_default_options = {
296
- :max_nesting => false,
297
- :allow_nan => true,
298
- :quirks_mode => true,
296
+ :max_nesting => false,
297
+ :allow_nan => true,
298
+ :quirks_mode => true,
299
+ :create_additions => true,
299
300
  }
300
301
 
301
302
  # Load a ruby data structure from a JSON _source_ and return it. A source can
302
303
  # either be a string-like object, an IO-like object, or an object responding
303
304
  # to the read method. If _proc_ was given, it will be called with any nested
304
- # Ruby object as an argument recursively in depth first order. The default
305
- # options for the parser can be changed via the load_default_options method.
305
+ # Ruby object as an argument recursively in depth first order. To modify the
306
+ # default options pass in the optional _options_ argument as well.
307
+ #
308
+ # BEWARE: This method is meant to serialise data from trusted user input,
309
+ # like from your own database server or clients under your control, it could
310
+ # be dangerous to allow untrusted users to pass JSON sources into it. The
311
+ # default options for the parser can be changed via the load_default_options
312
+ # method.
306
313
  #
307
314
  # This method is part of the implementation of the load/dump interface of
308
315
  # Marshal and YAML.
309
- def load(source, proc = nil)
310
- opts = load_default_options
316
+ def load(source, proc = nil, options = {})
317
+ opts = load_default_options.merge options
311
318
  if source.respond_to? :to_str
312
319
  source = source.to_str
313
320
  elsif source.respond_to? :to_io
@@ -63,9 +63,9 @@ module JSON
63
63
  # * *symbolize_names*: If set to true, returns symbols for the names
64
64
  # (keys) in a JSON object. Otherwise strings are returned, which is also
65
65
  # the default.
66
- # * *create_additions*: If set to false, the Parser doesn't create
67
- # additions even if a matchin class and create_id was found. This option
68
- # defaults to true.
66
+ # * *create_additions*: If set to true, the Parser creates
67
+ # additions when if a matching class and create_id was found. This
68
+ # option defaults to false.
69
69
  # * *object_class*: Defaults to Hash
70
70
  # * *array_class*: Defaults to Array
71
71
  # * *quirks_mode*: Enables quirks_mode for parser, that is for example
@@ -88,7 +88,7 @@ module JSON
88
88
  if opts.key?(:create_additions)
89
89
  @create_additions = !!opts[:create_additions]
90
90
  else
91
- @create_additions = true
91
+ @create_additions = false
92
92
  end
93
93
  @create_id = @create_additions ? JSON.create_id : nil
94
94
  @object_class = opts[:object_class] || Hash
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.6.7'
3
+ VERSION = '1.6.8'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -329,12 +329,12 @@ class TestJSON < Test::Unit::TestCase
329
329
  def test_generate_core_subclasses_with_new_to_json
330
330
  obj = SubHash2["foo" => SubHash2["bar" => true]]
331
331
  obj_json = JSON(obj)
332
- obj_again = JSON(obj_json)
332
+ obj_again = JSON.parse(obj_json, :create_additions => true)
333
333
  assert_kind_of SubHash2, obj_again
334
334
  assert_kind_of SubHash2, obj_again['foo']
335
335
  assert obj_again['foo']['bar']
336
336
  assert_equal obj, obj_again
337
- assert_equal ["foo"], JSON(JSON(SubArray2["foo"]))
337
+ assert_equal ["foo"], JSON(JSON(SubArray2["foo"]), :create_additions => true)
338
338
  end
339
339
 
340
340
  def test_generate_core_subclasses_with_default_to_json
@@ -493,6 +493,12 @@ EOT
493
493
  assert_equal nil, JSON.load('')
494
494
  end
495
495
 
496
+ def test_load_with_options
497
+ small_hash = JSON("foo" => 'bar')
498
+ symbol_hash = { :foo => 'bar' }
499
+ assert_equal symbol_hash, JSON.load(small_hash, nil, :symbolize_names => true)
500
+ end
501
+
496
502
  def test_dump
497
503
  too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
498
504
  assert_equal too_deep, JSON.dump(eval(too_deep))
@@ -73,11 +73,19 @@ class TestJSONAddition < Test::Unit::TestCase
73
73
  a = A.new(666)
74
74
  assert A.json_creatable?
75
75
  json = generate(a)
76
- a_again = JSON.parse(json)
76
+ a_again = JSON.parse(json, :create_additions => true)
77
77
  assert_kind_of a.class, a_again
78
78
  assert_equal a, a_again
79
79
  end
80
80
 
81
+ def test_extended_json_default
82
+ a = A.new(666)
83
+ assert A.json_creatable?
84
+ json = generate(a)
85
+ a_hash = JSON.parse(json)
86
+ assert_kind_of Hash, a_hash
87
+ end
88
+
81
89
  def test_extended_json_disabled
82
90
  a = A.new(666)
83
91
  assert A.json_creatable?
@@ -104,7 +112,7 @@ class TestJSONAddition < Test::Unit::TestCase
104
112
  c = C.new
105
113
  assert !C.json_creatable?
106
114
  json = generate(c)
107
- assert_raises(ArgumentError, NameError) { JSON.parse(json) }
115
+ assert_raises(ArgumentError, NameError) { JSON.parse(json, :create_additions => true) }
108
116
  end
109
117
 
110
118
  def test_raw_strings
@@ -122,7 +130,7 @@ class TestJSONAddition < Test::Unit::TestCase
122
130
  assert_match(/\A\{.*\}\Z/, json)
123
131
  assert_match(/"json_class":"String"/, json)
124
132
  assert_match(/"raw":\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json)
125
- raw_again = JSON.parse(json)
133
+ raw_again = JSON.parse(json, :create_additions => true)
126
134
  assert_equal raw, raw_again
127
135
  end
128
136
 
@@ -130,17 +138,17 @@ class TestJSONAddition < Test::Unit::TestCase
130
138
 
131
139
  def test_core
132
140
  t = Time.now
133
- assert_equal t, JSON(JSON(t))
141
+ assert_equal t, JSON(JSON(t), :create_additions => true)
134
142
  d = Date.today
135
- assert_equal d, JSON(JSON(d))
143
+ assert_equal d, JSON(JSON(d), :create_additions => true)
136
144
  d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
137
- assert_equal d, JSON(JSON(d))
138
- assert_equal 1..10, JSON(JSON(1..10))
139
- assert_equal 1...10, JSON(JSON(1...10))
140
- assert_equal "a".."c", JSON(JSON("a".."c"))
141
- assert_equal "a"..."c", JSON(JSON("a"..."c"))
145
+ assert_equal d, JSON(JSON(d), :create_additions => true)
146
+ assert_equal 1..10, JSON(JSON(1..10), :create_additions => true)
147
+ assert_equal 1...10, JSON(JSON(1...10), :create_additions => true)
148
+ assert_equal "a".."c", JSON(JSON("a".."c"), :create_additions => true)
149
+ assert_equal "a"..."c", JSON(JSON("a"..."c"), :create_additions => true)
142
150
  s = MyJsonStruct.new 4711, 'foot'
143
- assert_equal s, JSON(JSON(s))
151
+ assert_equal s, JSON(JSON(s), :create_additions => true)
144
152
  struct = Struct.new :foo, :bar
145
153
  s = struct.new 4711, 'foot'
146
154
  assert_raises(JSONError) { JSON(s) }
@@ -148,41 +156,41 @@ class TestJSONAddition < Test::Unit::TestCase
148
156
  raise TypeError, "test me"
149
157
  rescue TypeError => e
150
158
  e_json = JSON.generate e
151
- e_again = JSON e_json
159
+ e_again = JSON e_json, :create_additions => true
152
160
  assert_kind_of TypeError, e_again
153
161
  assert_equal e.message, e_again.message
154
162
  assert_equal e.backtrace, e_again.backtrace
155
163
  end
156
- assert_equal(/foo/, JSON(JSON(/foo/)))
157
- assert_equal(/foo/i, JSON(JSON(/foo/i)))
164
+ assert_equal(/foo/, JSON(JSON(/foo/), :create_additions => true))
165
+ assert_equal(/foo/i, JSON(JSON(/foo/i), :create_additions => true))
158
166
  end
159
167
 
160
168
  def test_utc_datetime
161
169
  now = Time.now
162
- d = DateTime.parse(now.to_s) # usual case
163
- assert_equal d, JSON.parse(d.to_json)
170
+ d = DateTime.parse(now.to_s, :create_additions => true) # usual case
171
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
164
172
  d = DateTime.parse(now.utc.to_s) # of = 0
165
- assert_equal d, JSON.parse(d.to_json)
173
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
166
174
  d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(1,24))
167
- assert_equal d, JSON.parse(d.to_json)
175
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
168
176
  d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
169
- assert_equal d, JSON.parse(d.to_json)
177
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
170
178
  end
171
179
 
172
180
  def test_rational_complex
173
- assert_equal Rational(2, 9), JSON(JSON(Rational(2, 9)))
174
- assert_equal Complex(2, 9), JSON(JSON(Complex(2, 9)))
181
+ assert_equal Rational(2, 9), JSON.parse(JSON(Rational(2, 9)), :create_additions => true)
182
+ assert_equal Complex(2, 9), JSON.parse(JSON(Complex(2, 9)), :create_additions => true)
175
183
  end
176
184
 
177
185
  def test_bigdecimal
178
- assert_equal BigDecimal('3.141', 23), JSON(JSON(BigDecimal('3.141', 23)))
179
- assert_equal BigDecimal('3.141', 666), JSON(JSON(BigDecimal('3.141', 666)))
186
+ assert_equal BigDecimal('3.141', 23), JSON(JSON(BigDecimal('3.141', 23)), :create_additions => true)
187
+ assert_equal BigDecimal('3.141', 666), JSON(JSON(BigDecimal('3.141', 666)), :create_additions => true)
180
188
  end
181
189
 
182
190
  def test_ostruct
183
191
  o = OpenStruct.new
184
192
  # XXX this won't work; o.foo = { :bar => true }
185
193
  o.foo = { 'bar' => true }
186
- assert_equal o, JSON(JSON(o))
194
+ assert_equal o, JSON.parse(JSON(o), :create_additions => true)
187
195
  end
188
196
  end
@@ -27,14 +27,13 @@ class TestJSONStringMatching < Test::Unit::TestCase
27
27
  t = TestTime.new
28
28
  t_json = [ t ].to_json
29
29
  assert_equal [ t ],
30
- JSON.parse(t_json,
31
- :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
30
+ JSON.parse(t_json, :create_additions => true,
31
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
32
32
  assert_equal [ t.strftime('%FT%T%z') ],
33
- JSON.parse(t_json,
34
- :match_string => { /\A\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
33
+ JSON.parse(t_json, :create_additions => true,
34
+ :match_string => { /\A\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
35
35
  assert_equal [ t.strftime('%FT%T%z') ],
36
36
  JSON.parse(t_json,
37
- :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime },
38
- :create_additions => false)
37
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
39
38
  end
40
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.7
4
+ version: 1.6.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-28 00:00:00.000000000 Z
12
+ date: 2013-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: permutation
@@ -47,8 +47,8 @@ description: This is a JSON implementation as a Ruby extension in C.
47
47
  email: flori@ping.de
48
48
  executables: []
49
49
  extensions:
50
- - ext/json/ext/parser/extconf.rb
51
50
  - ext/json/ext/generator/extconf.rb
51
+ - ext/json/ext/parser/extconf.rb
52
52
  extra_rdoc_files:
53
53
  - README.rdoc
54
54
  files:
@@ -183,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
183
  version: '0'
184
184
  segments:
185
185
  - 0
186
- hash: 3357543127192015668
186
+ hash: -1822326381843360989
187
187
  required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  none: false
189
189
  requirements:
@@ -192,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
192
  version: '0'
193
193
  requirements: []
194
194
  rubyforge_project: json
195
- rubygems_version: 1.8.23
195
+ rubygems_version: 1.8.25
196
196
  signing_key:
197
197
  specification_version: 3
198
198
  summary: JSON Implementation for Ruby