[Pcre-svn] [1519] code/trunk: Fix compile loop for subroutin…

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [1519] code/trunk: Fix compile loop for subroutine reference when preceded by a non-ASCII
Revision: 1519
          http://vcs.pcre.org/viewvc?view=rev&revision=1519
Author:   ph10
Date:     2015-02-06 17:55:54 +0000 (Fri, 06 Feb 2015)


Log Message:
-----------
Fix compile loop for subroutine reference when preceded by a non-ASCII
single-character class such as [^\ff].

Modified Paths:
--------------
    code/trunk/ChangeLog
    code/trunk/pcre_compile.c
    code/trunk/testdata/testinput5
    code/trunk/testdata/testoutput5


Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog    2015-02-06 16:10:27 UTC (rev 1518)
+++ code/trunk/ChangeLog    2015-02-06 17:55:54 UTC (rev 1519)
@@ -27,6 +27,9 @@
 6.  Catch a bad opcode during auto-possessification after compiling a bad UTF
     string with NO_UTF_CHECK. This is a tidyup, not a bug fix, as passing bad
     UTF with NO_UTF_CHECK is documented as having an undefined outcome.  
+    
+7.  A UTF pattern containing a "not" match of a non-ASCII character and a
+    subroutine reference could loop at compile time. Example: /[^\xff]((?1))/.



Version 8.36 26-September-2014

Modified: code/trunk/pcre_compile.c
===================================================================
--- code/trunk/pcre_compile.c    2015-02-06 16:10:27 UTC (rev 1518)
+++ code/trunk/pcre_compile.c    2015-02-06 17:55:54 UTC (rev 1519)
@@ -2129,32 +2129,60 @@
       {
       case OP_CHAR:
       case OP_CHARI:
+      case OP_NOT:
+      case OP_NOTI:
       case OP_EXACT:
       case OP_EXACTI:
+      case OP_NOTEXACT:
+      case OP_NOTEXACTI:
       case OP_UPTO:
       case OP_UPTOI:
+      case OP_NOTUPTO:
+      case OP_NOTUPTOI:
       case OP_MINUPTO:
       case OP_MINUPTOI:
+      case OP_NOTMINUPTO:
+      case OP_NOTMINUPTOI:
       case OP_POSUPTO:
       case OP_POSUPTOI:
+      case OP_NOTPOSUPTO:
+      case OP_NOTPOSUPTOI:
       case OP_STAR:
       case OP_STARI:
+      case OP_NOTSTAR:
+      case OP_NOTSTARI:
       case OP_MINSTAR:
       case OP_MINSTARI:
+      case OP_NOTMINSTAR:
+      case OP_NOTMINSTARI:
       case OP_POSSTAR:
       case OP_POSSTARI:
+      case OP_NOTPOSSTAR:
+      case OP_NOTPOSSTARI:
       case OP_PLUS:
       case OP_PLUSI:
+      case OP_NOTPLUS:
+      case OP_NOTPLUSI:
       case OP_MINPLUS:
       case OP_MINPLUSI:
+      case OP_NOTMINPLUS:
+      case OP_NOTMINPLUSI:
       case OP_POSPLUS:
       case OP_POSPLUSI:
+      case OP_NOTPOSPLUS:
+      case OP_NOTPOSPLUSI:
       case OP_QUERY:
       case OP_QUERYI:
+      case OP_NOTQUERY:
+      case OP_NOTQUERYI:
       case OP_MINQUERY:
       case OP_MINQUERYI:
+      case OP_NOTMINQUERY:
+      case OP_NOTMINQUERYI:
       case OP_POSQUERY:
       case OP_POSQUERYI:
+      case OP_NOTPOSQUERY:
+      case OP_NOTPOSQUERYI:
       if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);
       break;
       }


Modified: code/trunk/testdata/testinput5
===================================================================
--- code/trunk/testdata/testinput5    2015-02-06 16:10:27 UTC (rev 1518)
+++ code/trunk/testdata/testinput5    2015-02-06 17:55:54 UTC (rev 1519)
@@ -792,4 +792,6 @@


/[b-d\x{200}-\x{250}]*[ae-h]?#[\x{200}-\x{250}]{0,8}[\x00-\xff]*#[\x{200}-\x{250}]+[a-z]/8BZ

+/[^\xff]*PRUNE:\x{100}abc(xyz(?1))/8DZ
+
/-- End of testinput5 --/

Modified: code/trunk/testdata/testoutput5
===================================================================
--- code/trunk/testdata/testoutput5    2015-02-06 16:10:27 UTC (rev 1518)
+++ code/trunk/testdata/testoutput5    2015-02-06 17:55:54 UTC (rev 1519)
@@ -1899,4 +1899,21 @@
         End
 ------------------------------------------------------------------


+/[^\xff]*PRUNE:\x{100}abc(xyz(?1))/8DZ
+------------------------------------------------------------------
+        Bra
+        [^\x{ff}]*
+        PRUNE:\x{100}abc
+        CBra 1
+        xyz
+        Recurse
+        Ket
+        Ket
+        End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Options: utf
+No first char
+Need char = 'z'
+
 /-- End of testinput5 --/