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 +5 -0
- data/Gemfile +3 -7
- data/VERSION +1 -1
- data/ext/json/ext/parser/parser.c +1 -1
- data/ext/json/ext/parser/parser.rl +1 -1
- data/java/src/json/ext/Parser.java +33 -33
- data/java/src/json/ext/Parser.rl +1 -1
- data/json.gemspec +4 -4
- data/json_pure.gemspec +3 -3
- data/lib/json/common.rb +14 -7
- data/lib/json/pure/parser.rb +4 -4
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +8 -2
- data/tests/test_json_addition.rb +32 -24
- data/tests/test_json_string_matching.rb +5 -6
- metadata +5 -5
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
|
-
|
10
|
-
|
11
|
-
|
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.
|
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 =
|
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 =
|
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",
|
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
|
1620
|
+
// line 1621 "Parser.java"
|
1621
1621
|
{
|
1622
1622
|
cs = JSON_array_start;
|
1623
1623
|
}
|
1624
1624
|
|
1625
|
-
// line
|
1625
|
+
// line 712 "Parser.rl"
|
1626
1626
|
|
1627
|
-
// line
|
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
|
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
|
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
|
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
|
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
|
1909
|
+
// line 1910 "Parser.java"
|
1910
1910
|
{
|
1911
1911
|
cs = JSON_object_start;
|
1912
1912
|
}
|
1913
1913
|
|
1914
|
-
// line
|
1914
|
+
// line 796 "Parser.rl"
|
1915
1915
|
|
1916
|
-
// line
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
2207
|
+
// line 2208 "Parser.java"
|
2208
2208
|
{
|
2209
2209
|
cs = JSON_start;
|
2210
2210
|
}
|
2211
2211
|
|
2212
|
-
// line
|
2212
|
+
// line 871 "Parser.rl"
|
2213
2213
|
p = byteList.begin();
|
2214
2214
|
pe = p + byteList.length();
|
2215
2215
|
|
2216
|
-
// line
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
2467
|
+
// line 2468 "Parser.java"
|
2468
2468
|
{
|
2469
2469
|
cs = JSON_quirks_mode_start;
|
2470
2470
|
}
|
2471
2471
|
|
2472
|
-
// line
|
2472
|
+
// line 911 "Parser.rl"
|
2473
2473
|
p = byteList.begin();
|
2474
2474
|
pe = p + byteList.length();
|
2475
2475
|
|
2476
|
-
// line
|
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
|
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
|
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
|
2589
|
+
// line 914 "Parser.rl"
|
2590
2590
|
|
2591
2591
|
if (cs >= JSON_quirks_mode_first_final && p == pe) {
|
2592
2592
|
return result;
|
data/java/src/json/ext/Parser.rl
CHANGED
@@ -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",
|
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");
|
data/json.gemspec
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json"
|
5
|
-
s.version = "1.6.
|
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 = "
|
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/
|
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.
|
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
|
|
data/json_pure.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json_pure"
|
5
|
-
s.version = "1.6.
|
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 = "
|
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.
|
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
|
|
data/lib/json/common.rb
CHANGED
@@ -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
|
297
|
-
:allow_nan
|
298
|
-
:quirks_mode
|
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.
|
305
|
-
# options
|
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
|
data/lib/json/pure/parser.rb
CHANGED
@@ -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
|
67
|
-
# additions
|
68
|
-
# defaults to
|
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 =
|
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
|
data/lib/json/version.rb
CHANGED
data/tests/test_json.rb
CHANGED
@@ -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))
|
data/tests/test_json_addition.rb
CHANGED
@@ -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}\
|
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}\
|
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}\
|
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.
|
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:
|
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:
|
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.
|
195
|
+
rubygems_version: 1.8.25
|
196
196
|
signing_key:
|
197
197
|
specification_version: 3
|
198
198
|
summary: JSON Implementation for Ruby
|