diff options
author | Hugo van der Sanden <hv@crypt.org> | 2017-02-28 11:21:55 +0000 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2017-03-15 09:16:29 +0000 |
commit | acfc2cc32784cce84bd781bc3822b14406b94db2 (patch) | |
tree | 4b15ad6ee0691f5a592c9fbe39a161101ab44780 /regen | |
parent | 35a27ac0799b5ce44b9a5af182c93c3d5c266026 (diff) | |
download | perl-acfc2cc32784cce84bd781bc3822b14406b94db2.tar.gz |
reentr: update size after Renew
RT #130841
Setting it before Renew can cause problems if the Renew fails.
Required 'make regen'.
Diffstat (limited to 'regen')
-rw-r--r-- | regen/reentr.pl | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/regen/reentr.pl b/regen/reentr.pl index 802b8db90d..f8f78a5152 100644 --- a/regen/reentr.pl +++ b/regen/reentr.pl @@ -773,6 +773,13 @@ print $c <<"EOF"; #include "perl.h" #include "reentr.h" +#define RenewDouble(data_pointer, size_pointer, type) \\ + STMT_START { \\ + const size_t size = *(size_pointer) * 2; \\ + Renew((data_pointer), (size), type); \\ + *(size_pointer) = size; \\ + } STMT_END + void Perl_reentrant_size(pTHX) { PERL_UNUSED_CONTEXT; @@ -840,9 +847,8 @@ Perl_reentrant_retry(const char *f, ...) PERL_REENTRANT_MAXSIZE / 2) #endif { - PL_reentrant_buffer->_hostent_size *= 2; - Renew(PL_reentrant_buffer->_hostent_buffer, - PL_reentrant_buffer->_hostent_size, char); + RenewDouble(PL_reentrant_buffer->_hostent_buffer, + &PL_reentrant_buffer->_hostent_size, char); switch (PL_op->op_type) { case OP_GHBYADDR: p0 = va_arg(ap, void *); @@ -873,9 +879,8 @@ Perl_reentrant_retry(const char *f, ...) #endif { Gid_t gid; - PL_reentrant_buffer->_grent_size *= 2; - Renew(PL_reentrant_buffer->_grent_buffer, - PL_reentrant_buffer->_grent_size, char); + RenewDouble(PL_reentrant_buffer->_grent_buffer, + &PL_reentrant_buffer->_grent_size, char); switch (PL_op->op_type) { case OP_GGRNAM: p0 = va_arg(ap, void *); @@ -908,9 +913,8 @@ Perl_reentrant_retry(const char *f, ...) #endif { Netdb_net_t net; - PL_reentrant_buffer->_netent_size *= 2; - Renew(PL_reentrant_buffer->_netent_buffer, - PL_reentrant_buffer->_netent_size, char); + RenewDouble(PL_reentrant_buffer->_netent_buffer, + &PL_reentrant_buffer->_netent_size, char); switch (PL_op->op_type) { case OP_GNBYADDR: net = va_arg(ap, Netdb_net_t); @@ -940,9 +944,8 @@ Perl_reentrant_retry(const char *f, ...) #endif { Uid_t uid; - PL_reentrant_buffer->_pwent_size *= 2; - Renew(PL_reentrant_buffer->_pwent_buffer, - PL_reentrant_buffer->_pwent_size, char); + RenewDouble(PL_reentrant_buffer->_pwent_buffer, + &PL_reentrant_buffer->_pwent_size, char); switch (PL_op->op_type) { case OP_GPWNAM: p0 = va_arg(ap, void *); @@ -976,9 +979,8 @@ Perl_reentrant_retry(const char *f, ...) PERL_REENTRANT_MAXSIZE / 2) #endif { - PL_reentrant_buffer->_protoent_size *= 2; - Renew(PL_reentrant_buffer->_protoent_buffer, - PL_reentrant_buffer->_protoent_size, char); + RenewDouble(PL_reentrant_buffer->_protoent_buffer, + &PL_reentrant_buffer->_protoent_size, char); switch (PL_op->op_type) { case OP_GPBYNAME: p0 = va_arg(ap, void *); @@ -1006,9 +1008,8 @@ Perl_reentrant_retry(const char *f, ...) PERL_REENTRANT_MAXSIZE / 2) #endif { - PL_reentrant_buffer->_servent_size *= 2; - Renew(PL_reentrant_buffer->_servent_buffer, - PL_reentrant_buffer->_servent_size, char); + RenewDouble(PL_reentrant_buffer->_servent_buffer, + &PL_reentrant_buffer->_servent_size, char); switch (PL_op->op_type) { case OP_GSBYNAME: p0 = va_arg(ap, void *); |