From d2a904c8848238f2e144332db61d1f613dd956c3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 8 Dec 2021 16:43:02 +0900 Subject: vm.c (check_method_noarg): the value at `kidx` may not be a hash. --- src/vm.c | 7 +++++-- 1 file 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); -- cgit v1.2.3