summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorHugo van der Sanden <hv@crypt.org>2003-07-31 19:59:43 +0100
committerJarkko Hietaniemi <jhi@iki.fi>2003-07-31 19:57:36 +0000
commitb0e70d55183e72f46527dd222872eff0e4a92c42 (patch)
tree0360b624f6615d0d58b78220efe7cb9238d57269 /regexec.c
parent1ef57a5cc2e49e0fc5bdab2d40bc9f1dd2983a4e (diff)
downloadperl-b0e70d55183e72f46527dd222872eff0e4a92c42.tar.gz
Re: [perl #23171] Regex too selfish
Message-Id: <200307311759.h6VHxhn06664@zen.crypt.org> (choose the second code patch) p4raw-id: //depot/perl@20387
Diffstat (limited to 'regexec.c')
-rw-r--r--regexec.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/regexec.c b/regexec.c
index db3cecb884..961611b710 100644
--- a/regexec.c
+++ b/regexec.c
@@ -3351,6 +3351,7 @@ S_regmatch(pTHX_ regnode *prog)
{
I32 l = 0;
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
/* We suppose that the next guy does not need
backtracking: in particular, it is of constant length,
@@ -3435,6 +3436,8 @@ S_regmatch(pTHX_ regnode *prog)
}
if (regmatch(next))
sayYES;
+ /* t/op/regexp.t test 885 fails if this is performed */
+ /* *PL_reglastparen = lparen; */
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- move forward. */
@@ -3522,6 +3525,7 @@ S_regmatch(pTHX_ regnode *prog)
}
if (regmatch(next))
sayYES;
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */
@@ -3634,6 +3638,7 @@ S_regmatch(pTHX_ regnode *prog)
PL_reginput = locinput;
if (minmod) {
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
minmod = 0;
if (ln && regrepeat(scan, ln) < ln)
sayNO;
@@ -3740,6 +3745,7 @@ S_regmatch(pTHX_ regnode *prog)
if (c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, ln, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
}
@@ -3747,6 +3753,7 @@ S_regmatch(pTHX_ regnode *prog)
else if (c1 == -1000)
{
TRYPAREN(paren, ln, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- move forward. */
@@ -3761,6 +3768,7 @@ S_regmatch(pTHX_ regnode *prog)
}
else {
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
n = regrepeat(scan, n);
locinput = PL_reginput;
if (ln < n && PL_regkind[(U8)OP(next)] == EOL &&
@@ -3791,6 +3799,7 @@ S_regmatch(pTHX_ regnode *prog)
if (c1 == -1000 || c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, n, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */
@@ -3814,6 +3823,7 @@ S_regmatch(pTHX_ regnode *prog)
if (c1 == -1000 || c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, n, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */