summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-12-08 16:43:02 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-12-08 16:43:02 +0900
commitd2a904c8848238f2e144332db61d1f613dd956c3 (patch)
tree080bd5a82d64319d0206c6e06c5e87298f42d46c
parentc593e3e30af35423cd915e2efdb9766444916bd2 (diff)
downloadmruby-d2a904c8848238f2e144332db61d1f613dd956c3.tar.gz
mruby-d2a904c8848238f2e144332db61d1f613dd956c3.zip
vm.c (check_method_noarg): the value at `kidx` may not be a hash.
-rw-r--r--src/vm.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index efea22d4a..e187d162c 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -544,8 +544,11 @@ static void
check_method_noarg(mrb_state *mrb, const mrb_callinfo *ci)
{
int argc = ci->n == CALL_MAXARGS ? RARRAY_LEN(ci->stack[1]) : ci->n;
- if (ci->nk != 0 && !mrb_hash_empty_p(mrb, ci->stack[ci->n == CALL_MAXARGS ? 2 : ci->n + 1])) {
- argc++;
+ if (ci->nk > 0) {
+ mrb_value kdict = ci->stack[mrb_ci_kidx(ci)];
+ if (!(mrb_hash_p(kdict) && mrb_hash_empty_p(mrb, kdict))) {
+ argc++;
+ }
}
if (argc > 0) {
mrb_argnum_error(mrb, argc, 0, 0);