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-01 10:57:48 +0200
commitab19de99d6384b98bcb58db5f79549fa4049e7b0 (patch)
treed0cd52df80132670ddf33c37ed0b85701b3c882a
parent26d399f1c18e1585fb0ff2544b30805005138bf0 (diff)
downloadjson-ab19de99d6384b98bcb58db5f79549fa4049e7b0.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.
-rw-r--r--ext/json/ext/generator/generator.c4
-rw-r--r--lib/json/pure/generator.rb4
-rwxr-xr-xtests/test_json_generate.rb6
3 files changed, 7 insertions, 7 deletions
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