------- You are receiving this mail because: ------- You are on the CC list for the bug.
http://bugs.exim.org/show_bug.cgi?id=1467 --- Comment #3 from Graycode <[email protected]> 2014-04-16 19:09:12 --- There is something more happening here beyond just honoring the match_limit. The impact is an unbounded loop vs. just an exponential search. Consider the folling variants of the original expression: \x22[a-z0-9$#^'\x22!?,(.|\n);:\s-]{20,80}\x22(.|\n){996,3000}$ \x22[a-z0-9'@#\s]{20,80}\x22(.|\n){996,3100} \x22[a-z8-9@@@'####\s]{20,80}\x22(.|\n){996,997} \x22[a-y8-9@@@'####\s]{20,80}\x22(.|\n){996,997} \x22[a-z8-9@@@'####\s]{20,31}\x22(.|\n){996,997} \w[a-z8-9@@@'####\s]{20,31}\x22(.|\w){996,997} \x20[a-z8-9@@@'####\s]{20,31}\x22(.|\n){996,997} \x20[a-y3-4@@@'####\s]{20,31}\x22(.|\n){996,997} JIT appears to loop infinitely when used on the test data that was provided (on my x86 PC). Now change the 996 to any lesser value, such as 995, and those expressions are then able to execute (and do so quickly). Triggering the condition does seem to depend upon what is specified in the [class] as well as other factors. The issue appears to be more global than JIT. With the interpreter Exec(), the above expressions reach even a 999 million match_limit after about 1 minute crunching. But using a repetition of {995,997} or {800,3000} or {995,} they execute properly in a few milliseconds. Older PCRE versions also exhibit this same behavior, the oldest I tried was 8.20. Below is a DIFF of the output of "pcretest -d" (that shows PCRE's internal compiled code) for these 2 expressions: /\x20[a-y3-4@@@'####\s]{20,31}\x22(.|\n){995,997}/is /\x20[a-y3-4@@@'####\s]{20,31}\x22(.|\n){996,997}/is Again, the 995 runs fine but the 996 seems to loop unbounded. I do not profess to understand it. It might be helpful to Philip or Zoltan in case the compilation is different in their environments. Highlight the 995 has codes that the 996 does not: 13975 Brazero 13976 32 Bra And the 995 has an extra '32 Ket' to match the above '32 Bra'. *** code_995.x Wed Apr 16 11:27:40 2014 --- code_996.x Wed Apr 16 11:28:12 2014 *************** *** 1,10 **** PCRE version 8.35 2014-04-04 re> ------------------------------------------------------------------ ! 0 14011 Bra 3 /i 5 [\x09-\x0d #'34@-Ya-y]{20,31}+ 43 /i " 45 6 CBra 1 50 AllAny 51 5 Alt --- 1,10 ---- PCRE version 8.35 2014-04-04 re> ------------------------------------------------------------------ ! 0 14004 Bra 3 /i 5 [\x09-\x0d #'34@-Ya-y]{20,31}+ 43 /i " 45 6 CBra 1 50 AllAny 51 5 Alt *************** *** 4977,5004 **** 13958 11 Ket 13961 6 CBra 1 13966 AllAny 13967 5 Alt 13970 /i \x0a 13972 11 Ket ! 13975 Brazero ! 13976 32 Bra ! 13979 6 CBra 1 ! 13984 AllAny ! 13985 5 Alt ! 13988 /i \x0a ! 13990 11 Ket ! 13993 Brazero ! 13994 6 CBra 1 ! 13999 AllAny ! 14000 5 Alt ! 14003 /i \x0a ! 14005 11 Ket ! 14008 32 Ket ! 14011 14011 Ket ! 14014 End ------------------------------------------------------------------ Capturing subpattern count = 1 Contains explicit CR or LF match Options: caseless dotall First char = ' ' Need char = '"' --- 4977,5001 ---- 13958 11 Ket 13961 6 CBra 1 13966 AllAny 13967 5 Alt 13970 /i \x0a 13972 11 Ket ! 13975 6 CBra 1 ! 13980 AllAny ! 13981 5 Alt ! 13984 /i \x0a ! 13986 11 Ket ! 13989 Brazero ! 13990 6 CBra 1 ! 13995 AllAny ! 13996 5 Alt ! 13999 /i \x0a ! 14001 11 Ket ! 14004 14004 Ket ! 14007 End ------------------------------------------------------------------ Capturing subpattern count = 1 Contains explicit CR or LF match Options: caseless dotall First char = ' ' Need char = '"' Regards, Graycode -- Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev
