Skip to content

Commit

Permalink
ary_expand_capa(): size calculation by size_t; fix #3353
Browse files Browse the repository at this point in the history
Also more size checks added.
  • Loading branch information
matz committed Dec 31, 2016
1 parent 270ea41 commit 9d84f0d
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,9 @@ ary_make_shared(mrb_state *mrb, struct RArray *a)
}

static void
ary_expand_capa(mrb_state *mrb, struct RArray *a, mrb_int len)
ary_expand_capa(mrb_state *mrb, struct RArray *a, size_t len)
{
mrb_int capa = a->aux.capa;
size_t capa = a->aux.capa;

if (len > ARY_MAX_SIZE) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
Expand All @@ -177,14 +177,16 @@ ary_expand_capa(mrb_state *mrb, struct RArray *a, mrb_int len)
capa = ARY_DEFAULT_LEN;
}
while (capa < len) {
if (capa <= ARY_MAX_SIZE / 2) {
capa *= 2;
} else {
capa *= 2;
if (capa > ARY_MAX_SIZE) {
capa = ARY_MAX_SIZE;
}
}
if (capa < len || capa > MRB_INT_MAX) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
}

if (capa > a->aux.capa) {
if (capa > (size_t)a->aux.capa) {
mrb_value *expanded_ptr = (mrb_value *)mrb_realloc(mrb, a->ptr, sizeof(mrb_value)*capa);

a->aux.capa = capa;
Expand Down

0 comments on commit 9d84f0d

Please sign in to comment.