[Pcre-svn] [193] code/trunk: Fix compile loop for subroutine…

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [193] code/trunk: Fix compile loop for subroutine reference after class such as [^\ff].
Revision: 193
          http://www.exim.org/viewvc/pcre2?view=rev&revision=193
Author:   ph10
Date:     2015-02-06 17:51:55 +0000 (Fri, 06 Feb 2015)


Log Message:
-----------
Fix compile loop for subroutine reference after class such as [^\ff].

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


Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog    2015-02-06 16:47:15 UTC (rev 192)
+++ code/trunk/ChangeLog    2015-02-06 17:51:55 UTC (rev 193)
@@ -62,7 +62,10 @@
 not a bug fix; passing bad UTF with NO_UTF_CHECK is documented as having an
 undefined outcome.


+12. 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 10.00 05-January-2015
-----------------------------


Modified: code/trunk/src/pcre2_compile.c
===================================================================
--- code/trunk/src/pcre2_compile.c    2015-02-06 16:47:15 UTC (rev 192)
+++ code/trunk/src/pcre2_compile.c    2015-02-06 17:51:55 UTC (rev 193)
@@ -2353,32 +2353,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:47:15 UTC (rev 192)
+++ code/trunk/testdata/testinput5    2015-02-06 17:51:55 UTC (rev 193)
@@ -1638,4 +1638,6 @@
 /(?<=abc)(|def)/g,utf,replace=<$0>
       123abcáyzabcdef789abcሴqr


+/[^\xff]((?1))/utf,debug
+
# End of testinput5

Modified: code/trunk/testdata/testoutput5
===================================================================
--- code/trunk/testdata/testoutput5    2015-02-06 16:47:15 UTC (rev 192)
+++ code/trunk/testdata/testoutput5    2015-02-06 17:51:55 UTC (rev 193)
@@ -4008,4 +4008,7 @@
       123abcáyzabcdef789abcሴqr
  4: 123abc<>\x{e1}yzabc<><def>789abc<>\x{1234}qr


+/[^\xff]((?1))/utf,debug
+Failed: error 140 at offset 11: recursion could loop indefinitely
+
# End of testinput5