summaryrefslogtreecommitdiff
path: root/struct.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-10-01 16:14:59 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-10-01 16:20:22 +0900
commit15d3b7fe6dd421cc4ff77d106d17b0e9fd1ead45 (patch)
treea7565787c48b8efa02ae3324c9f3d2a2b2791380 /struct.c
parent27adf5321eabb588ecf20a0c3879e931a7345151 (diff)
Fix an out of bound access
Diffstat (limited to 'struct.c')
-rw-r--r--struct.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/struct.c b/struct.c
index a025d21af6..3a5dc8b7d4 100644
--- a/struct.c
+++ b/struct.c
@@ -1793,6 +1793,12 @@ rb_data_initialize_m(int argc, const VALUE *argv, VALUE self)
VALUE members = struct_ivar_get(klass, id_members);
size_t num_members = RARRAY_LEN(members);
+ if (argc == 0) {
+ if (num_members > 0) {
+ rb_exc_raise(rb_keyword_error_new("missing", members));
+ }
+ return Qnil;
+ }
if (argc > 1 || !RB_TYPE_P(argv[0], T_HASH)) {
rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected 0)", argc);
}