summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--struct.c2
-rw-r--r--test/ruby/test_struct.rb1
2 files changed, 2 insertions, 1 deletions
diff --git a/struct.c b/struct.c
index 8294e9fa21..273c719aec 100644
--- a/struct.c
+++ b/struct.c
@@ -633,7 +633,7 @@ rb_struct_initialize_m(int argc, const VALUE *argv, VALUE self)
n = num_members(klass);
if (argc > 0 && RTEST(rb_struct_s_keyword_init(klass))) {
struct struct_hash_set_arg arg;
- if (argc > 2 || !RB_TYPE_P(argv[0], T_HASH)) {
+ if (argc > 1 || !RB_TYPE_P(argv[0], T_HASH)) {
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 0)", argc);
}
rb_mem_clear((VALUE *)RSTRUCT_CONST_PTR(self), n);
diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb
index ec7728b197..22a6ce8241 100644
--- a/test/ruby/test_struct.rb
+++ b/test/ruby/test_struct.rb
@@ -105,6 +105,7 @@ module TestStruct
@Struct.new("KeywordInitFalse", :a, :b, keyword_init: false)
assert_raise(ArgumentError) { @Struct::KeywordInitTrue.new(1, 2) }
+ assert_raise(ArgumentError) { @Struct::KeywordInitTrue.new({a: 100}, 2) }
assert_nothing_raised { @Struct::KeywordInitFalse.new(1, 2) }
assert_nothing_raised { @Struct::KeywordInitTrue.new(a: 1, b: 2) }
assert_raise(ArgumentError) { @Struct::KeywordInitTrue.new(1, b: 2) }