From 87b0f1c8592087cc008847ad4db3963a8adbf135 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Tue, 25 Apr 2006 17:40:26 +0000 Subject: 22432: bug with backtracking over repeated single parameterhs --- Src/pattern.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'Src') diff --git a/Src/pattern.c b/Src/pattern.c index b547bdc14..872816d9b 100644 --- a/Src/pattern.c +++ b/Src/pattern.c @@ -2751,22 +2751,26 @@ patmatch(Upat prog) savglobflags = patglobflags; saverrsfound = errsfound; lastcharstart = charstart + (patinput - start); - while (no >= min) { - int charmatch_cache; - if (nextch < 0 || - (patinput < patinend && - CHARMATCH_EXPR(CHARREF(patinput, patinend), - nextch))) { - if (patmatch(next)) - return 1; + if (no >= min) { + for (;;) { + int charmatch_cache; + if (nextch < 0 || + (patinput < patinend && + CHARMATCH_EXPR(CHARREF(patinput, patinend), + nextch))) { + if (patmatch(next)) + return 1; + } + if (--no < min) + break; + /* find start of previous full character */ + while (!*--lastcharstart) + DPUTS(lastcharstart < charstart, + "lastcharstart invalid"); + patinput = start + (lastcharstart-charstart); + patglobflags = savglobflags; + errsfound = saverrsfound; } - no--; - /* find start of previous full character */ - while (!*--lastcharstart) - ; - patinput = start + (lastcharstart-charstart); - patglobflags = savglobflags; - errsfound = saverrsfound; } } /* -- cgit 1.4.1