diff options
author | Florian Frank <flori@ping.de> | 2009-10-01 10:57:48 +0200 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2009-10-01 11:26:52 +0200 |
commit | 72089378a4f63f226f6a7b495e5005b2c96d53d8 (patch) | |
tree | b1871df5acac9de39e873505412c1eec8067848e | |
parent | 26d399f1c18e1585fb0ff2544b30805005138bf0 (diff) | |
download | json-72089378a4f63f226f6a7b495e5005b2c96d53d8.tar.gz |
different default in fast_generate
fast_generate now defaults to throwing an exception if an infinite or
nan float is encountered. This is the same behaviour as in generate and
pretty_generate. (Fix for http://github.com/flori/json/issues#issue/3)
-rw-r--r-- | CHANGES | 2 | ||||
-rw-r--r-- | ext/json/ext/generator/generator.c | 4 | ||||
-rw-r--r-- | lib/json/pure/generator.rb | 4 | ||||
-rwxr-xr-x | tests/test_json_generate.rb | 6 |
4 files changed, 9 insertions, 7 deletions
@@ -1,3 +1,5 @@ +2009-10-01 (1.2.0) + * fast_generate now raises an exeception for nan and infinite floats. 2009-08-23 (1.1.9) * Added forgotten main doc file extra_rdoc_files. 2009-08-23 (1.1.8) diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index c6c63c1..9bcd580 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -315,14 +315,14 @@ static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self) rb_scan_args(argc, argv, "01*", &Vstate, &rest); if (!NIL_P(Vstate)) Data_Get_Struct(Vstate, JSON_Generator_State, state); if (isinf(value)) { - if (!state || state->allow_nan) { + if (state && state->allow_nan) { result = rb_funcall(self, i_to_s, 0); } else { tmp = rb_funcall(self, i_to_s, 0); rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp)); } } else if (isnan(value)) { - if (!state || state->allow_nan) { + if (state && state->allow_nan) { result = rb_funcall(self, i_to_s, 0); } else { tmp = rb_funcall(self, i_to_s, 0); diff --git a/lib/json/pure/generator.rb b/lib/json/pure/generator.rb index d51316e..2b7eeb7 100644 --- a/lib/json/pure/generator.rb +++ b/lib/json/pure/generator.rb @@ -351,13 +351,13 @@ module JSON def to_json(state = nil, *) case when infinite? - if !state || state.allow_nan? + if state && state.allow_nan? to_s else raise GeneratorError, "#{self} not allowed in JSON" end when nan? - if !state || state.allow_nan? + if state && state.allow_nan? to_s else raise GeneratorError, "#{self} not allowed in JSON" diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb index bbb75ba..ae3ce0e 100755 --- a/tests/test_json_generate.rb +++ b/tests/test_json_generate.rb @@ -89,17 +89,17 @@ EOT def test_allow_nan assert_raises(GeneratorError) { generate([JSON::NaN]) } assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true) - assert_equal '[NaN]', fast_generate([JSON::NaN]) + assert_raises(GeneratorError) { fast_generate([JSON::NaN]) } assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) } assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true) assert_raises(GeneratorError) { generate([JSON::Infinity]) } assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true) - assert_equal '[Infinity]', fast_generate([JSON::Infinity]) + assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) } assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) } assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true) assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) } assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true) - assert_equal '[-Infinity]', fast_generate([JSON::MinusInfinity]) + assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) } assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) } assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true) end |