Skip to content

Commit

Permalink
array.c: fix mrb_ary_shift_m initialization bug.
Browse files Browse the repository at this point in the history
The `ARY_PTR` and `ARY_LEN` may be modified in `mrb_get_args`.
  • Loading branch information
matz committed Dec 29, 2021
1 parent 83f2e75 commit 27d1e01
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/array.c
Expand Up @@ -581,14 +581,16 @@ mrb_ary_shift(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_ary_shift_m(mrb_state *mrb, mrb_value self)
{
struct RArray *a = mrb_ary_ptr(self);
mrb_int len = ARY_LEN(a);
mrb_int n;
mrb_value val;

if (mrb_get_args(mrb, "|i", &n) == 0) {
return mrb_ary_shift(mrb, self);
};
}

struct RArray *a = mrb_ary_ptr(self);
mrb_int len = ARY_LEN(a);
mrb_value val;

ary_modify_check(mrb, a);
if (len == 0 || n == 0) return mrb_ary_new(mrb);
if (n < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "negative array shift");
Expand Down

0 comments on commit 27d1e01

Please sign in to comment.