Skip to content

Commit c3a80ca

Browse files
byroothsbt
authored andcommitted
Fix JSON.generate strict: true mode to also restrict hash keys
1 parent d325e3e commit c3a80ca

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

ext/json/generator/generator.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,9 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
10381038
key_to_s = rb_sym2str(key);
10391039
break;
10401040
default:
1041+
if (data->state->strict) {
1042+
raise_generator_error(key, "%"PRIsVALUE" not allowed in JSON", rb_funcall(key, i_to_s, 0));
1043+
}
10411044
key_to_s = rb_convert_type(key, T_STRING, "String", "to_s");
10421045
break;
10431046
}

test/json/json_generator_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,18 @@ def test_json_generate_unsupported_types
404404
assert_raise JSON::GeneratorError do
405405
generate(Object.new, strict: true)
406406
end
407+
408+
assert_raise JSON::GeneratorError do
409+
generate([Object.new], strict: true)
410+
end
411+
412+
assert_raise JSON::GeneratorError do
413+
generate({ "key" => Object.new }, strict: true)
414+
end
415+
416+
assert_raise JSON::GeneratorError do
417+
generate({ Object.new => "value" }, strict: true)
418+
end
407419
end
408420

409421
def test_nesting

0 commit comments

Comments
 (0)