summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--VERSION2
-rw-r--r--ext/json/ext/generator/generator.c2
-rw-r--r--ext/json/ext/parser/parser.c35
-rw-r--r--ext/json/ext/parser/parser.rl1
-rw-r--r--json.gemspec12
-rw-r--r--json_pure.gemspec10
-rw-r--r--lib/json/common.rb1
-rw-r--r--lib/json/light_object.rb45
-rw-r--r--lib/json/version.rb2
-rwxr-xr-xtests/test_json.rb14
-rwxr-xr-xtests/test_json_addition.rb8
-rw-r--r--tests/test_json_encoding.rb2
-rwxr-xr-xtests/test_json_fixtures.rb2
-rwxr-xr-xtests/test_json_generate.rb2
-rw-r--r--tests/test_json_string_matching.rb2
-rwxr-xr-xtests/test_json_unicode.rb2
17 files changed, 103 insertions, 41 deletions
diff --git a/CHANGES b/CHANGES
index c057af3..b347a7c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+2012-04-27 (1.6.7)
+ * Fix possible crash when trying to parse nil value.
2012-02-11 (1.6.6)
* Propagate src encoding to values made from it (fixes 1.9 mode converting
everything to ascii-8bit; harmless for 1.8 mode too) (Thomas E. Enebo
diff --git a/VERSION b/VERSION
index ec70f75..400084b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.6.6
+1.6.7
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
index e1f2d09..b1babb1 100644
--- a/ext/json/ext/generator/generator.c
+++ b/ext/json/ext/generator/generator.c
@@ -860,7 +860,7 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj)
static int isArrayOrObject(VALUE string)
{
long string_len = RSTRING_LEN(string);
- char c, *p = RSTRING_PTR(string), *q = p + string_len - 1;
+ char *p = RSTRING_PTR(string), *q = p + string_len - 1;
if (string_len < 2) return 0;
for (; p < q && isspace(*p); p++);
for (; q > p && isspace(*q); q--);
diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
index d4adb8e..c140fdb 100644
--- a/ext/json/ext/parser/parser.c
+++ b/ext/json/ext/parser/parser.c
@@ -1721,6 +1721,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
source = convert_encoding(StringValue(source));
}
json->current_nesting = 0;
+ StringValue(source);
json->len = RSTRING_LEN(source);
json->source = RSTRING_PTR(source);;
json->Vsource = source;
@@ -1728,7 +1729,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
}
-#line 1732 "parser.c"
+#line 1733 "parser.c"
static const int JSON_start = 1;
static const int JSON_first_final = 10;
static const int JSON_error = 0;
@@ -1736,7 +1737,7 @@ static const int JSON_error = 0;
static const int JSON_en_main = 1;
-#line 739 "parser.rl"
+#line 740 "parser.rl"
static VALUE cParser_parse_strict(VALUE self)
@@ -1747,16 +1748,16 @@ static VALUE cParser_parse_strict(VALUE self)
GET_PARSER;
-#line 1751 "parser.c"
+#line 1752 "parser.c"
{
cs = JSON_start;
}
-#line 749 "parser.rl"
+#line 750 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 1760 "parser.c"
+#line 1761 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1812,7 +1813,7 @@ case 5:
goto st1;
goto st5;
tr3:
-#line 728 "parser.rl"
+#line 729 "parser.rl"
{
char *np;
json->current_nesting = 1;
@@ -1821,7 +1822,7 @@ tr3:
}
goto st10;
tr4:
-#line 721 "parser.rl"
+#line 722 "parser.rl"
{
char *np;
json->current_nesting = 1;
@@ -1833,7 +1834,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 1837 "parser.c"
+#line 1838 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -1890,7 +1891,7 @@ case 9:
_out: {}
}
-#line 752 "parser.rl"
+#line 753 "parser.rl"
if (cs >= JSON_first_final && p == pe) {
return result;
@@ -1902,7 +1903,7 @@ case 9:
-#line 1906 "parser.c"
+#line 1907 "parser.c"
static const int JSON_quirks_mode_start = 1;
static const int JSON_quirks_mode_first_final = 10;
static const int JSON_quirks_mode_error = 0;
@@ -1910,7 +1911,7 @@ static const int JSON_quirks_mode_error = 0;
static const int JSON_quirks_mode_en_main = 1;
-#line 777 "parser.rl"
+#line 778 "parser.rl"
static VALUE cParser_parse_quirks_mode(VALUE self)
@@ -1921,16 +1922,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
GET_PARSER;
-#line 1925 "parser.c"
+#line 1926 "parser.c"
{
cs = JSON_quirks_mode_start;
}
-#line 787 "parser.rl"
+#line 788 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 1934 "parser.c"
+#line 1935 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1964,7 +1965,7 @@ st0:
cs = 0;
goto _out;
tr2:
-#line 769 "parser.rl"
+#line 770 "parser.rl"
{
char *np = JSON_parse_value(json, p, pe, &result);
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -1974,7 +1975,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 1978 "parser.c"
+#line 1979 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -2063,7 +2064,7 @@ case 9:
_out: {}
}
-#line 790 "parser.rl"
+#line 791 "parser.rl"
if (cs >= JSON_quirks_mode_first_final && p == pe) {
return result;
diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
index c96b0a8..20ecc48 100644
--- a/ext/json/ext/parser/parser.rl
+++ b/ext/json/ext/parser/parser.rl
@@ -705,6 +705,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
source = convert_encoding(StringValue(source));
}
json->current_nesting = 0;
+ StringValue(source);
json->len = RSTRING_LEN(source);
json->source = RSTRING_PTR(source);;
json->Vsource = source;
diff --git a/json.gemspec b/json.gemspec
index 7aee01d..860f10e 100644
--- a/json.gemspec
+++ b/json.gemspec
@@ -2,23 +2,23 @@
Gem::Specification.new do |s|
s.name = "json"
- s.version = "1.6.6"
+ s.version = "1.6.7"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Florian Frank"]
- s.date = "2012-03-26"
+ s.date = "2012-04-28"
s.description = "This is a JSON implementation as a Ruby extension in C."
s.email = "flori@ping.de"
- s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
+ s.extensions = ["ext/json/ext/parser/extconf.rb", "ext/json/ext/generator/extconf.rb"]
s.extra_rdoc_files = ["README.rdoc"]
- 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/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.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"]
+ 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"]
s.homepage = "http://flori.github.com/json"
s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
s.require_paths = ["ext/json/ext", "ext", "lib"]
s.rubyforge_project = "json"
- s.rubygems_version = "1.8.21"
+ s.rubygems_version = "1.8.23"
s.summary = "JSON Implementation for Ruby"
- s.test_files = ["./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"]
+ 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"]
if s.respond_to? :specification_version then
s.specification_version = 3
diff --git a/json_pure.gemspec b/json_pure.gemspec
index 09711c1..5383c3c 100644
--- a/json_pure.gemspec
+++ b/json_pure.gemspec
@@ -2,22 +2,22 @@
Gem::Specification.new do |s|
s.name = "json_pure"
- s.version = "1.6.6"
+ s.version = "1.6.7"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Florian Frank"]
- s.date = "2012-03-26"
+ s.date = "2012-04-28"
s.description = "This is a JSON implementation in pure Ruby."
s.email = "flori@ping.de"
s.extra_rdoc_files = ["README.rdoc"]
- 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/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.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"]
+ 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"]
s.homepage = "http://flori.github.com/json"
s.rdoc_options = ["--title", "JSON implemention for ruby", "--main", "README.rdoc"]
s.require_paths = ["lib"]
s.rubyforge_project = "json"
- s.rubygems_version = "1.8.21"
+ s.rubygems_version = "1.8.23"
s.summary = "JSON Implementation for Ruby"
- s.test_files = ["./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"]
+ 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"]
if s.respond_to? :specification_version then
s.specification_version = 3
diff --git a/lib/json/common.rb b/lib/json/common.rb
index cf7a8b9..e8e76b6 100644
--- a/lib/json/common.rb
+++ b/lib/json/common.rb
@@ -1,4 +1,5 @@
require 'json/version'
+require 'json/light_object'
module JSON
class << self
diff --git a/lib/json/light_object.rb b/lib/json/light_object.rb
new file mode 100644
index 0000000..07eeecf
--- /dev/null
+++ b/lib/json/light_object.rb
@@ -0,0 +1,45 @@
+require 'ostruct'
+
+module JSON
+ class LightObject < OpenStruct
+ class << self
+ alias [] new
+
+ def json_create(data)
+ data = data.dup
+ data.delete JSON.create_id
+ self[data]
+ end
+ end
+
+ def to_hash
+ table
+ end
+
+ def [](name)
+ to_hash[name.to_sym]
+ end
+
+ def []=(name, value)
+ modifiable[name.to_sym] = value
+ end
+
+ def |(other)
+ self.class[other.to_hash.merge(to_hash)]
+ end
+
+ def as_json(*)
+ to_hash | { JSON.create_id => self.class.name }
+ end
+
+ def to_json(*a)
+ as_json.to_json(*a)
+ end
+
+ def method_missing(*a, &b)
+ to_hash.__send__(*a, &b)
+ rescue NoMethodError
+ super
+ end
+ end
+end
diff --git a/lib/json/version.rb b/lib/json/version.rb
index 63ebcf3..c74e914 100644
--- a/lib/json/version.rb
+++ b/lib/json/version.rb
@@ -1,6 +1,6 @@
module JSON
# JSON version
- VERSION = '1.6.6'
+ VERSION = '1.6.7'
VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
diff --git a/tests/test_json.rb b/tests/test_json.rb
index 1b39360..4b4bc55 100755
--- a/tests/test_json.rb
+++ b/tests/test_json.rb
@@ -21,7 +21,7 @@ unless Array.method_defined?(:permutation)
end
end
-class TC_JSON < Test::Unit::TestCase
+class TestJSON < Test::Unit::TestCase
include JSON
def setup
@@ -109,6 +109,8 @@ class TC_JSON < Test::Unit::TestCase
def test_parse_json_primitive_values
assert_raise(JSON::ParserError) { JSON.parse('') }
assert_raise(JSON::ParserError) { JSON.parse('', :quirks_mode => true) }
+ assert_raise(TypeError) { JSON::Parser.new(nil).parse }
+ assert_raise(TypeError) { JSON::Parser.new(nil, :quirks_mode => true).parse }
assert_raise(TypeError) { JSON.parse(nil) }
assert_raise(TypeError) { JSON.parse(nil, :quirks_mode => true) }
assert_raise(JSON::ParserError) { JSON.parse(' /* foo */ ') }
@@ -314,6 +316,16 @@ class TC_JSON < Test::Unit::TestCase
assert res.item_set?
end
+ def test_parse_light_object
+ res = parse('{"foo":"bar", "baz":{}}', :object_class => JSON::LightObject)
+ assert_equal(JSON::LightObject, res.class)
+ assert_equal "bar", res.foo
+ assert_equal "bar", res["foo"]
+ assert_equal "bar", res[:foo]
+ assert_equal "bar", res.to_hash[:foo]
+ assert_equal(JSON::LightObject, res.baz.class)
+ end
+
def test_generate_core_subclasses_with_new_to_json
obj = SubHash2["foo" => SubHash2["bar" => true]]
obj_json = JSON(obj)
diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
index e262e25..cf80866 100755
--- a/tests/test_json_addition.rb
+++ b/tests/test_json_addition.rb
@@ -10,7 +10,7 @@ require 'json/add/bigdecimal'
require 'json/add/ostruct'
require 'date'
-class TC_JSONAddition < Test::Unit::TestCase
+class TestJSONAddition < Test::Unit::TestCase
include JSON
class A
@@ -64,7 +64,7 @@ class TC_JSONAddition < Test::Unit::TestCase
def to_json(*args)
{
- 'json_class' => 'TC_JSONAddition::Nix',
+ 'json_class' => 'TestJSONAddition::Nix',
}.to_json(*args)
end
end
@@ -88,7 +88,7 @@ class TC_JSONAddition < Test::Unit::TestCase
a_hash = JSON.parse(json, :create_additions => false)
assert_kind_of Hash, a_hash
assert_equal(
- {"args"=>[666], "json_class"=>"TC_JSONAddition::A"}.sort_by { |k,| k },
+ {"args"=>[666], "json_class"=>"TestJSONAddition::A"}.sort_by { |k,| k },
a_hash.sort_by { |k,| k }
)
end
@@ -97,7 +97,7 @@ class TC_JSONAddition < Test::Unit::TestCase
b = B.new
assert !B.json_creatable?
json = generate(b)
- assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
+ assert_equal({ "json_class"=>"TestJSONAddition::B" }, JSON.parse(json))
end
def test_extended_json_fail2
diff --git a/tests/test_json_encoding.rb b/tests/test_json_encoding.rb
index 7af5e63..caa0c6c 100644
--- a/tests/test_json_encoding.rb
+++ b/tests/test_json_encoding.rb
@@ -4,7 +4,7 @@
require 'test/unit'
require File.join(File.dirname(__FILE__), 'setup_variant')
-class TC_JSONEncoding < Test::Unit::TestCase
+class TestJSONEncoding < Test::Unit::TestCase
include JSON
def setup
diff --git a/tests/test_json_fixtures.rb b/tests/test_json_fixtures.rb
index e9df8f5..37e5145 100755
--- a/tests/test_json_fixtures.rb
+++ b/tests/test_json_fixtures.rb
@@ -4,7 +4,7 @@
require 'test/unit'
require File.join(File.dirname(__FILE__), 'setup_variant')
-class TC_JSONFixtures < Test::Unit::TestCase
+class TestJSONFixtures < Test::Unit::TestCase
def setup
fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
passed, failed = Dir[fixtures].partition { |f| f['pass'] }
diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
index 3a1ddc6..1c7ae34 100755
--- a/tests/test_json_generate.rb
+++ b/tests/test_json_generate.rb
@@ -4,7 +4,7 @@
require 'test/unit'
require File.join(File.dirname(__FILE__), 'setup_variant')
-class TC_JSONGenerate < Test::Unit::TestCase
+class TestJSONGenerate < Test::Unit::TestCase
include JSON
def setup
diff --git a/tests/test_json_string_matching.rb b/tests/test_json_string_matching.rb
index df26a68..b8a7169 100644
--- a/tests/test_json_string_matching.rb
+++ b/tests/test_json_string_matching.rb
@@ -6,7 +6,7 @@ require File.join(File.dirname(__FILE__), 'setup_variant')
require 'stringio'
require 'time'
-class TestJsonStringMatching < Test::Unit::TestCase
+class TestJSONStringMatching < Test::Unit::TestCase
include JSON
class TestTime < ::Time
diff --git a/tests/test_json_unicode.rb b/tests/test_json_unicode.rb
index ace56ca..c328811 100755
--- a/tests/test_json_unicode.rb
+++ b/tests/test_json_unicode.rb
@@ -4,7 +4,7 @@
require 'test/unit'
require File.join(File.dirname(__FILE__), 'setup_variant')
-class TC_JSONUnicode < Test::Unit::TestCase
+class TestJSONUnicode < Test::Unit::TestCase
include JSON
def test_unicode