Add `argv` and `argc` check in `OP_ENTER`; fix #4102

`argv` may be retrieved from an array whose `ptr` is `NULL` when it`s
empty.
parent 9b5910bd
......@@ -1791,21 +1791,19 @@ RETRY_TRY_BLOCK:
kargs = 0;
}
else {
if (!mrb_hash_p(argv[argc - 1])) {
if (r) {
kdict = mrb_hash_new(mrb);
kargs = 0;
}
else {
mrb_value str = mrb_str_new_lit(mrb, "Excepcted `Hash` as last argument for keyword arguments");
mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
goto L_RAISE;
}
if (argv && argc > 0 && mrb_hash_p(argv[argc-1])) {
kdict = argv[argc-1];
mrb_hash_check_kdict(mrb, kdict);
}
else if (r) {
kdict = mrb_hash_new(mrb);
kargs = 0;
}
else {
kdict = argv[argc-1];
mrb_value str = mrb_str_new_lit(mrb, "Excepcted `Hash` as last argument for keyword arguments");
mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
goto L_RAISE;
}
mrb_hash_check_kdict(mrb, kdict);
if (MRB_ASPEC_KEY(a) > 0) {
kdict = mrb_hash_dup(mrb, kdict);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment