diff options
-rw-r--r-- | ext/json/ext/generator/generator.c | 2 | ||||
-rw-r--r-- | lib/json/generic_object.rb | 8 | ||||
-rwxr-xr-x | tests/test_json_generate.rb | 10 |
3 files changed, 11 insertions, 9 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index 90285be..baf5360 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -876,7 +876,7 @@ static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *s } else { tmp = rb_funcall(obj, i_to_s, 0); Check_Type(tmp, T_STRING); - generate_json(buffer, Vstate, state, tmp); + generate_json_string(buffer, Vstate, state, tmp); } } diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb index 8b8fd53..3a14f0e 100644 --- a/lib/json/generic_object.rb +++ b/lib/json/generic_object.rb @@ -47,14 +47,6 @@ module JSON table end - def [](name) - table[name.to_sym] - end - - def []=(name, value) - __send__ "#{name}=", value - end - def |(other) self.class[other.to_hash.merge(to_hash)] end diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb index 8db0b78..1834290 100755 --- a/tests/test_json_generate.rb +++ b/tests/test_json_generate.rb @@ -334,4 +334,14 @@ EOT assert_equal true, JSON.generate(["\xea"]) end end + + def test_string_subclass + s = Class.new(String) do + def to_s; self; end + undef to_json + end + assert_nothing_raised(SystemStackError) do + assert_equal '[""]', JSON.generate([s.new]) + end + end end |