summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2009-10-01 10:57:48 +0200
committerFlorian Frank <flori@ping.de>2009-10-16 21:50:42 +0200
commitb219eed7bbae2840e45fd3325cecf0fb415f4327 (patch)
treeb1871df5acac9de39e873505412c1eec8067848e
parent26d399f1c18e1585fb0ff2544b30805005138bf0 (diff)
downloadjson-b219eed7bbae2840e45fd3325cecf0fb415f4327.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--CHANGES2
-rw-r--r--ext/json/ext/generator/generator.c4
-rw-r--r--lib/json/pure/generator.rb4
-rwxr-xr-xtests/test_json_generate.rb6
4 files changed, 9 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 9d80469..cb67705 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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