aboutsummaryrefslogtreecommitdiffstats
path: root/struct.c
diff options
context:
space:
mode:
Diffstat (limited to 'struct.c')
-rw-r--r--struct.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/struct.c b/struct.c
index bf1ff6f386..d1aa7c278f 100644
--- a/struct.c
+++ b/struct.c
@@ -957,12 +957,15 @@ rb_struct_deconstruct_keys(VALUE s, VALUE keys)
rb_obj_class(keys));
}
+ if (RSTRUCT_LEN(s) < RARRAY_LEN(keys)) {
+ return rb_hash_new_with_size(0);
+ }
h = rb_hash_new_with_size(RARRAY_LEN(keys));
for (i=0; i<RARRAY_LEN(keys); i++) {
VALUE key = RARRAY_AREF(keys, i);
int i = rb_struct_pos(s, &key);
if (i < 0) {
- return rb_hash_new_with_size(0);
+ return h;
}
rb_hash_aset(h, key, RSTRUCT_GET(s, i));
}