diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-19 15:35:59 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-19 15:35:59 +0900 |
| commit | c308a149f0eaa529d5b3236e696aed13a19733ae (patch) | |
| tree | 85f0ab27b94f511f652bf59dd96158dcd2047fc6 /src/vm.c | |
| parent | 423f872c846d63056ba75f067201ba9c221231d1 (diff) | |
| download | mruby-c308a149f0eaa529d5b3236e696aed13a19733ae.tar.gz mruby-c308a149f0eaa529d5b3236e696aed13a19733ae.zip | |
Add Hash type check for `OP_KARG` and `OP_KEY_P`; ref #4166
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -1892,7 +1892,7 @@ RETRY_TRY_BLOCK: mrb_value k = mrb_symbol_value(syms[b]); mrb_value kdict = regs[mrb->c->ci->argc]; - if (!mrb_hash_key_p(mrb, kdict, k)) { + if (!mrb_hash_p(kdict) || !mrb_hash_key_p(mrb, kdict, k)) { mrb_value str = mrb_format(mrb, "missing keyword: %S", k); mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str)); goto L_RAISE; @@ -1905,8 +1905,11 @@ RETRY_TRY_BLOCK: CASE(OP_KEY_P, BB) { mrb_value k = mrb_symbol_value(syms[b]); mrb_value kdict = regs[mrb->c->ci->argc]; - mrb_bool key_p = mrb_hash_key_p(mrb, kdict, k); + mrb_bool key_p = FALSE; + if (mrb_hash_p(kdict)) { + key_p = mrb_hash_key_p(mrb, kdict, k); + } regs[a] = mrb_bool_value(key_p); NEXT; } |
