diff options
author | Hugo van der Sanden <hv@crypt.org> | 2017-02-28 11:23:09 +0000 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2017-03-15 09:17:08 +0000 |
commit | 00195859c65eccf9425faf45db543a12c7ad3874 (patch) | |
tree | cd04c70326c16ed06553a6608564bd8237b888b6 /perlio.c | |
parent | acfc2cc32784cce84bd781bc3822b14406b94db2 (diff) | |
download | perl-00195859c65eccf9425faf45db543a12c7ad3874.tar.gz |
update size after Renew
RT #130841
In general code, change this idiom:
PL_foo_max += size;
Renew(PL_foo, PL_foo_max, foo_t);
to
Renew(PL_foo, PL_foo_max + size, foo_t);
PL_foo_max += size;
so that if Renew dies, PL_foo_max won't be left hanging.
Diffstat (limited to 'perlio.c')
-rw-r--r-- | perlio.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -547,11 +547,12 @@ PerlIO_list_push(pTHX_ PerlIO_list_t *list, PerlIO_funcs *funcs, SV *arg) PERL_UNUSED_CONTEXT; if (list->cur >= list->len) { - list->len += 8; + const IV new_len = list->len + 8; if (list->array) - Renew(list->array, list->len, PerlIO_pair_t); + Renew(list->array, new_len, PerlIO_pair_t); else - Newx(list->array, list->len, PerlIO_pair_t); + Newx(list->array, new_len, PerlIO_pair_t); + list->len = new_len; } p = &(list->array[list->cur++]); p->funcs = funcs; |