summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2006-05-20 00:43:42 +0000
committerDave Mitchell <davem@fdisolutions.com>2006-05-20 00:43:42 +0000
commit66bf836d545d4a639166fad46f83811d0df5f8ce (patch)
tree780368062c26a5482cc2fb050a348bae44da5b59 /regexec.c
parent37405f9009219de703848fda95b3f821e51fda4d (diff)
downloadperl-66bf836d545d4a639166fad46f83811d0df5f8ce.tar.gz
[perl #32041] SEGV with complicated regexp and long string
PL_reg_maxiter was wrapping to a negative value p4raw-id: //depot/perl@28248
Diffstat (limited to 'regexec.c')
-rw-r--r--regexec.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/regexec.c b/regexec.c
index f765024766..0f5d6fbee3 100644
--- a/regexec.c
+++ b/regexec.c
@@ -3652,6 +3652,9 @@ S_regmatch(pTHX_ const regmatch_info *reginfo, regnode *prog)
*that* much linear. */
if (!PL_reg_maxiter) {
PL_reg_maxiter = (PL_regeol - PL_bostr + 1) * (scan->flags>>4);
+ /* possible overflow for long strings and many CURLYX's */
+ if (PL_reg_maxiter < 0)
+ PL_reg_maxiter = I32_MAX;
PL_reg_leftiter = PL_reg_maxiter;
}
if (PL_reg_leftiter-- == 0) {