From 00195859c65eccf9425faf45db543a12c7ad3874 Mon Sep 17 00:00:00 2001 From: Hugo van der Sanden Date: Tue, 28 Feb 2017 11:23:09 +0000 Subject: 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. --- perlio.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'perlio.c') diff --git a/perlio.c b/perlio.c index 3e936a26d0..e9d3700cfe 100644 --- a/perlio.c +++ b/perlio.c @@ -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; -- cgit v1.2.1