json 1.5.4 → 1.5.5
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/0001-Security-fix-create_additons-JSON-GenericObject.patch +448 -0
- data/0001-Security-fix-create_additons-problem-1.5.5.patch +630 -0
- data/0001-Security-fix-for-create_additions-problem-1.6.8.patch +685 -0
- data/CHANGES +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +60 -0
- data/VERSION +1 -1
- data/ext/json/ext/parser/parser.c +18 -18
- data/ext/json/ext/parser/parser.rl +4 -1
- data/java/src/json/ext/Parser.java +1 -1
- data/java/src/json/ext/Parser.rl +1 -1
- data/json.gemspec +5 -5
- data/json_pure.gemspec +4 -4
- data/lib/json/add/core.rb +6 -3
- data/lib/json/common.rb +12 -5
- data/lib/json/pure/parser.rb +4 -4
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +22 -2
- data/tests/test_json_addition.rb +29 -21
- data/tests/test_json_string_matching.rb +5 -6
- metadata +148 -126
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
2013-02-04 (1.5.5)
|
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.
|
6
|
+
* Backport change that corrects Time serialisation/deserialisation on some
|
7
|
+
platforms.
|
1
8
|
2011-08-31 (1.5.4)
|
2
9
|
* Fix memory leak when used from multiple JRuby. (Patch by
|
3
10
|
jfirebaugh@github).
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
json (1.5.5)
|
5
|
+
json (1.5.5-java)
|
6
|
+
json_pure (1.5.5)
|
7
|
+
spruz (~> 0.2.8)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
bullshit (0.1.3)
|
13
|
+
dslkit (~> 0.2)
|
14
|
+
more_math (~> 0.0.2)
|
15
|
+
tins (~> 0.3)
|
16
|
+
columnize (0.3.6)
|
17
|
+
debugger (1.3.0)
|
18
|
+
columnize (>= 0.3.1)
|
19
|
+
debugger-linecache (~> 1.1.1)
|
20
|
+
debugger-ruby_core_source (~> 1.1.7)
|
21
|
+
debugger-linecache (1.1.2)
|
22
|
+
debugger-ruby_core_source (>= 1.1.1)
|
23
|
+
debugger-ruby_core_source (1.1.7)
|
24
|
+
dslkit (0.2.12)
|
25
|
+
term-ansicolor (~> 1.0)
|
26
|
+
tins (~> 0.6)
|
27
|
+
more_math (0.0.4)
|
28
|
+
tins (~> 0.3)
|
29
|
+
permutation (0.1.8)
|
30
|
+
pry-editline (1.1.1)
|
31
|
+
rake (0.9.6)
|
32
|
+
rdoc (3.12.1)
|
33
|
+
json (~> 1.4)
|
34
|
+
sdoc (0.3.20)
|
35
|
+
json (>= 1.1.3)
|
36
|
+
rdoc (~> 3.10)
|
37
|
+
spruz (0.2.13)
|
38
|
+
term-ansicolor (1.0.7)
|
39
|
+
test-unit (2.5.4)
|
40
|
+
tins (0.7.0)
|
41
|
+
utils (0.0.69)
|
42
|
+
dslkit (~> 0.2.10)
|
43
|
+
pry-editline
|
44
|
+
term-ansicolor (~> 1.0)
|
45
|
+
tins (~> 0.6)
|
46
|
+
|
47
|
+
PLATFORMS
|
48
|
+
java
|
49
|
+
ruby
|
50
|
+
|
51
|
+
DEPENDENCIES
|
52
|
+
bullshit
|
53
|
+
debugger
|
54
|
+
json!
|
55
|
+
json_pure!
|
56
|
+
permutation
|
57
|
+
rake (~> 0.9.2)
|
58
|
+
sdoc
|
59
|
+
test-unit
|
60
|
+
utils
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.5.
|
1
|
+
1.5.5
|
@@ -1671,7 +1671,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
1671
1671
|
if (option_given_p(opts, tmp)) {
|
1672
1672
|
json->create_additions = RTEST(rb_hash_aref(opts, tmp));
|
1673
1673
|
} else {
|
1674
|
-
json->create_additions =
|
1674
|
+
json->create_additions = 0;
|
1675
1675
|
}
|
1676
1676
|
tmp = ID2SYM(i_create_id);
|
1677
1677
|
if (option_given_p(opts, tmp)) {
|
@@ -1718,7 +1718,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
1718
1718
|
}
|
1719
1719
|
|
1720
1720
|
|
1721
|
-
#line
|
1721
|
+
#line 1722 "parser.c"
|
1722
1722
|
static const int JSON_start = 1;
|
1723
1723
|
static const int JSON_first_final = 10;
|
1724
1724
|
static const int JSON_error = 0;
|
@@ -1726,7 +1726,7 @@ static const int JSON_error = 0;
|
|
1726
1726
|
static const int JSON_en_main = 1;
|
1727
1727
|
|
1728
1728
|
|
1729
|
-
#line
|
1729
|
+
#line 729 "parser.rl"
|
1730
1730
|
|
1731
1731
|
|
1732
1732
|
static VALUE cParser_parse_strict(VALUE self)
|
@@ -1737,16 +1737,16 @@ static VALUE cParser_parse_strict(VALUE self)
|
|
1737
1737
|
GET_PARSER;
|
1738
1738
|
|
1739
1739
|
|
1740
|
-
#line
|
1740
|
+
#line 1741 "parser.c"
|
1741
1741
|
{
|
1742
1742
|
cs = JSON_start;
|
1743
1743
|
}
|
1744
1744
|
|
1745
|
-
#line
|
1745
|
+
#line 739 "parser.rl"
|
1746
1746
|
p = json->source;
|
1747
1747
|
pe = p + json->len;
|
1748
1748
|
|
1749
|
-
#line
|
1749
|
+
#line 1750 "parser.c"
|
1750
1750
|
{
|
1751
1751
|
if ( p == pe )
|
1752
1752
|
goto _test_eof;
|
@@ -1802,7 +1802,7 @@ case 5:
|
|
1802
1802
|
goto st1;
|
1803
1803
|
goto st5;
|
1804
1804
|
tr3:
|
1805
|
-
#line
|
1805
|
+
#line 718 "parser.rl"
|
1806
1806
|
{
|
1807
1807
|
char *np;
|
1808
1808
|
json->current_nesting = 1;
|
@@ -1811,7 +1811,7 @@ tr3:
|
|
1811
1811
|
}
|
1812
1812
|
goto st10;
|
1813
1813
|
tr4:
|
1814
|
-
#line
|
1814
|
+
#line 711 "parser.rl"
|
1815
1815
|
{
|
1816
1816
|
char *np;
|
1817
1817
|
json->current_nesting = 1;
|
@@ -1823,7 +1823,7 @@ st10:
|
|
1823
1823
|
if ( ++p == pe )
|
1824
1824
|
goto _test_eof10;
|
1825
1825
|
case 10:
|
1826
|
-
#line
|
1826
|
+
#line 1827 "parser.c"
|
1827
1827
|
switch( (*p) ) {
|
1828
1828
|
case 13: goto st10;
|
1829
1829
|
case 32: goto st10;
|
@@ -1880,7 +1880,7 @@ case 9:
|
|
1880
1880
|
_out: {}
|
1881
1881
|
}
|
1882
1882
|
|
1883
|
-
#line
|
1883
|
+
#line 742 "parser.rl"
|
1884
1884
|
|
1885
1885
|
if (cs >= JSON_first_final && p == pe) {
|
1886
1886
|
return result;
|
@@ -1892,7 +1892,7 @@ case 9:
|
|
1892
1892
|
|
1893
1893
|
|
1894
1894
|
|
1895
|
-
#line
|
1895
|
+
#line 1896 "parser.c"
|
1896
1896
|
static const int JSON_quirks_mode_start = 1;
|
1897
1897
|
static const int JSON_quirks_mode_first_final = 10;
|
1898
1898
|
static const int JSON_quirks_mode_error = 0;
|
@@ -1900,7 +1900,7 @@ static const int JSON_quirks_mode_error = 0;
|
|
1900
1900
|
static const int JSON_quirks_mode_en_main = 1;
|
1901
1901
|
|
1902
1902
|
|
1903
|
-
#line
|
1903
|
+
#line 767 "parser.rl"
|
1904
1904
|
|
1905
1905
|
|
1906
1906
|
static VALUE cParser_parse_quirks_mode(VALUE self)
|
@@ -1911,16 +1911,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
|
|
1911
1911
|
GET_PARSER;
|
1912
1912
|
|
1913
1913
|
|
1914
|
-
#line
|
1914
|
+
#line 1915 "parser.c"
|
1915
1915
|
{
|
1916
1916
|
cs = JSON_quirks_mode_start;
|
1917
1917
|
}
|
1918
1918
|
|
1919
|
-
#line
|
1919
|
+
#line 777 "parser.rl"
|
1920
1920
|
p = json->source;
|
1921
1921
|
pe = p + json->len;
|
1922
1922
|
|
1923
|
-
#line
|
1923
|
+
#line 1924 "parser.c"
|
1924
1924
|
{
|
1925
1925
|
if ( p == pe )
|
1926
1926
|
goto _test_eof;
|
@@ -1954,7 +1954,7 @@ st0:
|
|
1954
1954
|
cs = 0;
|
1955
1955
|
goto _out;
|
1956
1956
|
tr2:
|
1957
|
-
#line
|
1957
|
+
#line 759 "parser.rl"
|
1958
1958
|
{
|
1959
1959
|
char *np = JSON_parse_value(json, p, pe, &result);
|
1960
1960
|
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
|
@@ -1964,7 +1964,7 @@ st10:
|
|
1964
1964
|
if ( ++p == pe )
|
1965
1965
|
goto _test_eof10;
|
1966
1966
|
case 10:
|
1967
|
-
#line
|
1967
|
+
#line 1968 "parser.c"
|
1968
1968
|
switch( (*p) ) {
|
1969
1969
|
case 13: goto st10;
|
1970
1970
|
case 32: goto st10;
|
@@ -2053,7 +2053,7 @@ case 9:
|
|
2053
2053
|
_out: {}
|
2054
2054
|
}
|
2055
2055
|
|
2056
|
-
#line
|
2056
|
+
#line 780 "parser.rl"
|
2057
2057
|
|
2058
2058
|
if (cs >= JSON_quirks_mode_first_final && p == pe) {
|
2059
2059
|
return result;
|
@@ -602,6 +602,9 @@ static VALUE convert_encoding(VALUE source)
|
|
602
602
|
* defaults to true.
|
603
603
|
* * *object_class*: Defaults to Hash
|
604
604
|
* * *array_class*: Defaults to Array
|
605
|
+
* * *quirks_mode*: Enables quirks_mode for parser, that is for example
|
606
|
+
* parsing single JSON values instead of documents is possible.
|
607
|
+
*
|
605
608
|
*/
|
606
609
|
static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
607
610
|
{
|
@@ -652,7 +655,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
652
655
|
if (option_given_p(opts, tmp)) {
|
653
656
|
json->create_additions = RTEST(rb_hash_aref(opts, tmp));
|
654
657
|
} else {
|
655
|
-
json->create_additions =
|
658
|
+
json->create_additions = 0;
|
656
659
|
}
|
657
660
|
tmp = ID2SYM(i_create_id);
|
658
661
|
if (option_given_p(opts, tmp)) {
|
@@ -160,7 +160,7 @@ public class Parser extends RubyObject {
|
|
160
160
|
this.symbolizeNames = opts.getBool("symbolize_names", false);
|
161
161
|
this.quirksMode = opts.getBool("quirks_mode", false);
|
162
162
|
this.createId = opts.getString("create_id", getCreateId(context));
|
163
|
-
this.createAdditions = opts.getBool("create_additions",
|
163
|
+
this.createAdditions = opts.getBool("create_additions", false);
|
164
164
|
this.objectClass = opts.getClass("object_class", runtime.getHash());
|
165
165
|
this.arrayClass = opts.getClass("array_class", runtime.getArray());
|
166
166
|
this.match_string = opts.getHash("match_string");
|
data/java/src/json/ext/Parser.rl
CHANGED
@@ -162,7 +162,7 @@ public class Parser extends RubyObject {
|
|
162
162
|
this.symbolizeNames = opts.getBool("symbolize_names", false);
|
163
163
|
this.quirksMode = opts.getBool("quirks_mode", false);
|
164
164
|
this.createId = opts.getString("create_id", getCreateId(context));
|
165
|
-
this.createAdditions = opts.getBool("create_additions",
|
165
|
+
this.createAdditions = opts.getBool("create_additions", false);
|
166
166
|
this.objectClass = opts.getClass("object_class", runtime.getHash());
|
167
167
|
this.arrayClass = opts.getClass("array_class", runtime.getArray());
|
168
168
|
this.match_string = opts.getHash("match_string");
|
data/json.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json"
|
5
|
-
s.version = "1.5.
|
5
|
+
s.version = "1.5.5"
|
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
12
|
s.executables = ["edit_json.rb", "prettify_json.rb"]
|
13
|
-
s.extensions = ["ext/json/ext/
|
13
|
+
s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
|
14
14
|
s.extra_rdoc_files = ["README.rdoc"]
|
15
|
-
s.files = ["
|
15
|
+
s.files = ["0001-Security-fix-create_additons-JSON-GenericObject.patch", "0001-Security-fix-create_additons-problem-1.5.5.patch", "0001-Security-fix-for-create_additions-problem-1.6.8.patch", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "Gemfile.lock", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "benchmarks", "benchmarks/data", "benchmarks/data-p4-3GHz-ruby18", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log", "benchmarks/generator2_benchmark.rb", "benchmarks/generator_benchmark.rb", "benchmarks/ohai.json", "benchmarks/ohai.ruby", "benchmarks/parser2_benchmark.rb", "benchmarks/parser_benchmark.rb", "bin", "bin/edit_json.rb", "bin/prettify_json.rb", "data", "data/example.json", "data/index.html", "data/prototype.js", "diagrams", "ext", "ext/json", "ext/json/ext", "ext/json/ext/generator", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser", "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", "java/lib", "java/lib/bytelist-1.0.6.jar", "java/lib/jcodings.jar", "java/src", "java/src/json", "java/src/json/ext", "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", "lib/json", "lib/json.rb", "lib/json/Array.xpm", "lib/json/FalseClass.xpm", "lib/json/Hash.xpm", "lib/json/Key.xpm", "lib/json/NilClass.xpm", "lib/json/Numeric.xpm", "lib/json/String.xpm", "lib/json/TrueClass.xpm", "lib/json/add", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/rational.rb", "lib/json/common.rb", "lib/json/editor.rb", "lib/json/ext", "lib/json/ext.rb", "lib/json/json.xpm", "lib/json/pure", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests", "tests/fixtures", "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", "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"]
|
16
16
|
s.homepage = "http://flori.github.com/json"
|
17
17
|
s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
|
18
18
|
s.require_paths = ["ext/json/ext", "ext", "lib"]
|
19
19
|
s.rubyforge_project = "json"
|
20
|
-
s.rubygems_version = "1.8.
|
20
|
+
s.rubygems_version = "1.8.25"
|
21
21
|
s.summary = "JSON Implementation for Ruby"
|
22
22
|
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"]
|
23
23
|
|
data/json_pure.gemspec
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json_pure"
|
5
|
-
s.version = "1.5.
|
5
|
+
s.version = "1.5.5"
|
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.executables = ["edit_json.rb", "prettify_json.rb"]
|
13
13
|
s.extra_rdoc_files = ["README.rdoc"]
|
14
|
-
s.files = ["
|
14
|
+
s.files = ["0001-Security-fix-create_additons-JSON-GenericObject.patch", "0001-Security-fix-create_additons-problem-1.5.5.patch", "0001-Security-fix-for-create_additions-problem-1.6.8.patch", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "Gemfile.lock", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "benchmarks", "benchmarks/data", "benchmarks/data-p4-3GHz-ruby18", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log", "benchmarks/generator2_benchmark.rb", "benchmarks/generator_benchmark.rb", "benchmarks/ohai.json", "benchmarks/ohai.ruby", "benchmarks/parser2_benchmark.rb", "benchmarks/parser_benchmark.rb", "bin", "bin/edit_json.rb", "bin/prettify_json.rb", "data", "data/example.json", "data/index.html", "data/prototype.js", "diagrams", "ext", "ext/json", "ext/json/ext", "ext/json/ext/generator", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser", "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", "java/lib", "java/lib/bytelist-1.0.6.jar", "java/lib/jcodings.jar", "java/src", "java/src/json", "java/src/json/ext", "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", "lib/json", "lib/json.rb", "lib/json/Array.xpm", "lib/json/FalseClass.xpm", "lib/json/Hash.xpm", "lib/json/Key.xpm", "lib/json/NilClass.xpm", "lib/json/Numeric.xpm", "lib/json/String.xpm", "lib/json/TrueClass.xpm", "lib/json/add", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/rational.rb", "lib/json/common.rb", "lib/json/editor.rb", "lib/json/ext", "lib/json/ext.rb", "lib/json/json.xpm", "lib/json/pure", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests", "tests/fixtures", "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", "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 = ["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/lib/json/add/core.rb
CHANGED
@@ -36,8 +36,8 @@ class Time
|
|
36
36
|
if usec = object.delete('u') # used to be tv_usec -> tv_nsec
|
37
37
|
object['n'] = usec * 1000
|
38
38
|
end
|
39
|
-
if
|
40
|
-
at(
|
39
|
+
if instance_methods.include?(:tv_nsec)
|
40
|
+
at(object['s'], Rational(object['n'], 1000))
|
41
41
|
else
|
42
42
|
at(object['s'], object['n'] / 1000)
|
43
43
|
end
|
@@ -46,10 +46,13 @@ class Time
|
|
46
46
|
# Returns a hash, that will be turned into a JSON object and represent this
|
47
47
|
# object.
|
48
48
|
def as_json(*)
|
49
|
+
nanoseconds = [ tv_usec * 1000 ]
|
50
|
+
respond_to?(:tv_nsec) and nanoseconds << tv_nsec
|
51
|
+
nanoseconds = nanoseconds.max
|
49
52
|
{
|
50
53
|
JSON.create_id => self.class.name,
|
51
54
|
's' => tv_sec,
|
52
|
-
'n' =>
|
55
|
+
'n' => nanoseconds,
|
53
56
|
}
|
54
57
|
end
|
55
58
|
|
data/lib/json/common.rb
CHANGED
@@ -141,7 +141,7 @@ module JSON
|
|
141
141
|
# the default.
|
142
142
|
# * *create_additions*: If set to false, the Parser doesn't create
|
143
143
|
# additions even if a matching class and create_id was found. This option
|
144
|
-
# defaults to
|
144
|
+
# defaults to false.
|
145
145
|
# * *object_class*: Defaults to Hash
|
146
146
|
# * *array_class*: Defaults to Array
|
147
147
|
def parse(source, opts = {})
|
@@ -162,7 +162,7 @@ module JSON
|
|
162
162
|
# to true.
|
163
163
|
# * *create_additions*: If set to false, the Parser doesn't create
|
164
164
|
# additions even if a matching class and create_id was found. This option
|
165
|
-
# defaults to
|
165
|
+
# defaults to false.
|
166
166
|
def parse!(source, opts = {})
|
167
167
|
opts = {
|
168
168
|
:max_nesting => false,
|
@@ -287,11 +287,18 @@ module JSON
|
|
287
287
|
# Load a ruby data structure from a JSON _source_ and return it. A source can
|
288
288
|
# either be a string-like object, an IO-like object, or an object responding
|
289
289
|
# to the read method. If _proc_ was given, it will be called with any nested
|
290
|
-
# Ruby object as an argument recursively in depth first order.
|
290
|
+
# Ruby object as an argument recursively in depth first order. To modify the
|
291
|
+
# default options pass in the optional _options_ argument as well.
|
291
292
|
#
|
292
293
|
# This method is part of the implementation of the load/dump interface of
|
293
294
|
# Marshal and YAML.
|
294
|
-
def load(source, proc = nil)
|
295
|
+
def load(source, proc = nil, options = {})
|
296
|
+
load_default_options = {
|
297
|
+
:max_nesting => false,
|
298
|
+
:allow_nan => true,
|
299
|
+
:create_additions => false
|
300
|
+
}
|
301
|
+
opts = load_default_options.merge options
|
295
302
|
if source.respond_to? :to_str
|
296
303
|
source = source.to_str
|
297
304
|
elsif source.respond_to? :to_io
|
@@ -299,7 +306,7 @@ module JSON
|
|
299
306
|
else
|
300
307
|
source = source.read
|
301
308
|
end
|
302
|
-
result = parse(source,
|
309
|
+
result = parse(source, opts)
|
303
310
|
recurse_proc(result, &proc) if proc
|
304
311
|
result
|
305
312
|
end
|
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
@@ -4,6 +4,7 @@
|
|
4
4
|
require 'test/unit'
|
5
5
|
require File.join(File.dirname(__FILE__), 'setup_variant')
|
6
6
|
require 'stringio'
|
7
|
+
require 'tempfile'
|
7
8
|
|
8
9
|
unless Array.method_defined?(:permutation)
|
9
10
|
begin
|
@@ -263,12 +264,12 @@ class TC_JSON < Test::Unit::TestCase
|
|
263
264
|
def test_generation_of_core_subclasses_with_new_to_json
|
264
265
|
obj = SubHash2["foo" => SubHash2["bar" => true]]
|
265
266
|
obj_json = JSON(obj)
|
266
|
-
obj_again = JSON(obj_json)
|
267
|
+
obj_again = JSON.parse(obj_json, :create_additions => true)
|
267
268
|
assert_kind_of SubHash2, obj_again
|
268
269
|
assert_kind_of SubHash2, obj_again['foo']
|
269
270
|
assert obj_again['foo']['bar']
|
270
271
|
assert_equal obj, obj_again
|
271
|
-
assert_equal ["foo"], JSON(JSON(SubArray2["foo"]))
|
272
|
+
assert_equal ["foo"], JSON(JSON(SubArray2["foo"]), :create_additions => true)
|
272
273
|
end
|
273
274
|
|
274
275
|
def test_generation_of_core_subclasses_with_default_to_json
|
@@ -414,6 +415,25 @@ EOT
|
|
414
415
|
JSON.parse('{"foo":"bar", "baz":"quux"}', :symbolize_names => true))
|
415
416
|
end
|
416
417
|
|
418
|
+
def test_load
|
419
|
+
assert_equal @hash, JSON.load(@json)
|
420
|
+
tempfile = Tempfile.open('json')
|
421
|
+
tempfile.write @json
|
422
|
+
tempfile.rewind
|
423
|
+
assert_equal @hash, JSON.load(tempfile)
|
424
|
+
stringio = StringIO.new(@json)
|
425
|
+
stringio.rewind
|
426
|
+
assert_equal @hash, JSON.load(stringio)
|
427
|
+
assert_raise(NoMethodError) { JSON.load(nil) }
|
428
|
+
assert_raise(JSON::ParserError) {JSON.load('') }
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_load_with_options
|
432
|
+
small_hash = JSON("foo" => 'bar')
|
433
|
+
symbol_hash = { :foo => 'bar' }
|
434
|
+
assert_equal symbol_hash, JSON.load(small_hash, nil, :symbolize_names => true)
|
435
|
+
end
|
436
|
+
|
417
437
|
def test_load_dump
|
418
438
|
too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
|
419
439
|
assert_equal too_deep, JSON.dump(eval(too_deep))
|