summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/json/ext/generator/generator.c2
-rw-r--r--lib/json/generic_object.rb8
-rwxr-xr-xtests/test_json_generate.rb10
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