[Pcre-svn] [490] code/trunk: Detect missing closing parenthe…

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [490] code/trunk: Detect missing closing parentheses during the pre-pass.
Revision: 490
          http://www.exim.org/viewvc/pcre2?view=rev&revision=490
Author:   ph10
Date:     2016-02-13 15:30:29 +0000 (Sat, 13 Feb 2016)
Log Message:
-----------
Detect missing closing parentheses during the pre-pass.


Modified Paths:
--------------
    code/trunk/ChangeLog
    code/trunk/src/pcre2_compile.c
    code/trunk/testdata/testinput18
    code/trunk/testdata/testinput2
    code/trunk/testdata/testinput8
    code/trunk/testdata/testoutput18
    code/trunk/testdata/testoutput2
    code/trunk/testdata/testoutput8-16-2
    code/trunk/testdata/testoutput8-16-3
    code/trunk/testdata/testoutput8-16-4
    code/trunk/testdata/testoutput8-32-2
    code/trunk/testdata/testoutput8-32-3
    code/trunk/testdata/testoutput8-32-4
    code/trunk/testdata/testoutput8-8-2
    code/trunk/testdata/testoutput8-8-3
    code/trunk/testdata/testoutput8-8-4


Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/ChangeLog    2016-02-13 15:30:29 UTC (rev 490)
@@ -62,7 +62,10 @@
 nested set of parentheses of sufficient size caused an overflow of the 
 compiling workspace (which was diagnosed, but of course is not desirable).


+13. Detect missing closing parentheses during the pre-pass for group
+identification.

+
Version 10.21 12-January-2016
-----------------------------


Modified: code/trunk/src/pcre2_compile.c
===================================================================
--- code/trunk/src/pcre2_compile.c    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/src/pcre2_compile.c    2016-02-13 15:30:29 UTC (rev 490)
@@ -3180,6 +3180,7 @@
 uint32_t delimiter;
 uint32_t nest_depth = 0;
 uint32_t set, unset, *optset;
+uint32_t skiptoket = 0;
 int errorcode = 0;
 int escape;
 int namelen;
@@ -3186,7 +3187,6 @@
 int i;
 BOOL inescq = FALSE;
 BOOL isdupname;
-BOOL skiptoket = FALSE;
 BOOL utf = (options & PCRE2_UTF) != 0;
 BOOL negate_class;
 PCRE2_SPTR name;
@@ -3213,10 +3213,10 @@
   next closing parenthesis must be ignored. The parenthesis itself must be
   processed (to end the nested parenthesized item). */


-  if (skiptoket)
+  if (skiptoket != 0)
     {
     if (c != CHAR_RIGHT_PARENTHESIS) continue;
-    skiptoket = FALSE;
+    skiptoket = 0;
     }


   /* Skip over literals */
@@ -3231,17 +3231,16 @@
     continue;
     }


- /* Skip over comments and whitespace in extended mode. Need a loop to handle
- whitespace after a comment. */
+ /* Skip over # comments and whitespace in extended mode. */

   if ((options & PCRE2_EXTENDED) != 0)
     {
-    for (;;)
+    PCRE2_SPTR wscptr = ptr;
+    while (MAX_255(c) && (cb->ctypes[c] & ctype_space) != 0) c = *(++ptr);
+    if (c == CHAR_NUMBER_SIGN)
       {
-      while (MAX_255(c) && (cb->ctypes[c] & ctype_space) != 0) c = *(++ptr);
-      if (c != CHAR_NUMBER_SIGN) break;
       ptr++;
-      while (*ptr != CHAR_NULL)
+      while (ptr < cb->end_pattern)
         {
         if (IS_NEWLINE(ptr))         /* For non-fixed-length newline cases, */
           {                          /* IS_NEWLINE sets cb->nllen. */
@@ -3253,8 +3252,16 @@
         if (utf) FORWARDCHAR(ptr);
 #endif
         }
-      c = *ptr;     /* Either NULL or the char after a newline */
       }
+
+    /* If we skipped any characters, restart the loop. Otherwise, we didn't see
+    a comment. */
+
+    if (ptr > wscptr)
+      {
+      ptr--;
+      continue;
+      }
     }


   /* Process the next pattern item. */
@@ -3411,7 +3418,7 @@
           IS_DIGIT(ptr[0]) ||                           /* (?n) */
           (ptr[0] == CHAR_MINUS && IS_DIGIT(ptr[1])))   /* (?-n) */
         {
-        skiptoket = TRUE;
+        skiptoket = ptr[0];
         break;
         }


@@ -3755,9 +3762,17 @@
     }
   }


-cb->final_bracount = cb->bracount;
-return 0;
+if (nest_depth == 0)
+ {
+ cb->final_bracount = cb->bracount;
+ return 0;
+ }

+/* We give a special error for a missing closing parentheses after (?# because 
+it might otherwise be hard to see where the missing character is. */
+
+errorcode = (skiptoket == CHAR_NUMBER_SIGN)? ERR18 : ERR14;
+
 FAILED:
 *ptrptr = ptr;
 return errorcode;
@@ -5901,22 +5916,22 @@
               goto FAILED;
               }
             cb->had_accept = TRUE;
-            
+
             /* In the first pass, just accumulate the length required;
             otherwise hitting (*ACCEPT) inside many nested parentheses can
             cause workspace overflow. */
-              
+
             for (oc = cb->open_caps; oc != NULL; oc = oc->next)
               {
               if (lengthptr != NULL)
                 {
-                *lengthptr += CU2BYTES(1) + IMM2_SIZE; 
+                *lengthptr += CU2BYTES(1) + IMM2_SIZE;
                 }
               else
-                {       
+                {
                 *code++ = OP_CLOSE;
                 PUT2INC(code, 0, oc->number);
-                } 
+                }
               }
             setverb = *code++ =
               (cb->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT;
@@ -7056,7 +7071,9 @@
         }
       }


-    /* Error if hit end of pattern */
+    /* At the end of a group, it's an error if we hit end of pattern or
+    any non-closing parenthesis. This check also happens in the pre-scan,
+    so should not trigger here, but leave this code as an insurance. */


     if (*ptr != CHAR_RIGHT_PARENTHESIS)
       {


Modified: code/trunk/testdata/testinput18
===================================================================
--- code/trunk/testdata/testinput18    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testinput18    2016-02-13 15:30:29 UTC (rev 490)
@@ -95,6 +95,8 @@


"(?(?C)"

+"(?(?C))"
+
/abcd/substitute_extended

/\[A]{1000000}**/expand,regerror_buffsize=31

Modified: code/trunk/testdata/testinput2
===================================================================
--- code/trunk/testdata/testinput2    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testinput2    2016-02-13 15:30:29 UTC (rev 490)
@@ -4428,6 +4428,8 @@


/(?R-:(?</

+/(?R-:(?<)/
+
/(?(?C{\Q})(?!(?'/

/(?(?C{\Q})(?!(?'abc')))/I

Modified: code/trunk/testdata/testinput8
===================================================================
--- code/trunk/testdata/testinput8    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testinput8    2016-02-13 15:30:29 UTC (rev 490)
@@ -184,4 +184,6 @@


/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/

+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput18
===================================================================
--- code/trunk/testdata/testoutput18    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput18    2016-02-13 15:30:29 UTC (rev 490)
@@ -142,6 +142,9 @@
 Failed: POSIX code 9: bad escape sequence at offset 3     


 "(?(?C)"
+Failed: POSIX code 11: unbalanced () at offset 6     
+
+"(?(?C))"
 Failed: POSIX code 3: pattern error at offset 2     


/abcd/substitute_extended

Modified: code/trunk/testdata/testoutput2
===================================================================
--- code/trunk/testdata/testoutput2    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput2    2016-02-13 15:30:29 UTC (rev 490)
@@ -545,7 +545,7 @@
 Failed: error 127 at offset 12: conditional group contains more than two branches


/(?(1a)/
-Failed: error 126 at offset 4: malformed number or name after (?(
+Failed: error 114 at offset 6: missing closing parenthesis

/(?(1a))/
Failed: error 126 at offset 4: malformed number or name after (?(
@@ -14401,6 +14401,9 @@
------------------------------------------------------------------

/(?R-:(?</
+Failed: error 114 at offset 8: missing closing parenthesis
+
+/(?R-:(?<)/
Failed: error 129 at offset 3: (?R or (?[+-]digits must be followed by )

/(?(?C{\Q})(?!(?'/
@@ -14502,7 +14505,7 @@
0: ab

/(?(8000000000/
-Failed: error 161 at offset 13: number is too big
+Failed: error 114 at offset 13: missing closing parenthesis

/((?(R8000000000)))/
Failed: error 161 at offset 16: number is too big

Modified: code/trunk/testdata/testoutput8-16-2
===================================================================
--- code/trunk/testdata/testoutput8-16-2    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-16-2    2016-02-13 15:30:29 UTC (rev 490)
@@ -1028,6 +1028,9 @@
 Subject length lower bound = 0


/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
+Failed: error 114 at offset 509: missing closing parenthesis
+
+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
Failed: error 186 at offset 490: regular expression is too complicated

# End of testinput8

Modified: code/trunk/testdata/testoutput8-16-3
===================================================================
--- code/trunk/testdata/testoutput8-16-3    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-16-3    2016-02-13 15:30:29 UTC (rev 490)
@@ -1026,4 +1026,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-16-4
===================================================================
--- code/trunk/testdata/testoutput8-16-4    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-16-4    2016-02-13 15:30:29 UTC (rev 490)
@@ -1026,4 +1026,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-32-2
===================================================================
--- code/trunk/testdata/testoutput8-32-2    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-32-2    2016-02-13 15:30:29 UTC (rev 490)
@@ -1026,4 +1026,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-32-3
===================================================================
--- code/trunk/testdata/testoutput8-32-3    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-32-3    2016-02-13 15:30:29 UTC (rev 490)
@@ -1026,4 +1026,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-32-4
===================================================================
--- code/trunk/testdata/testoutput8-32-4    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-32-4    2016-02-13 15:30:29 UTC (rev 490)
@@ -1026,4 +1026,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-8-2
===================================================================
--- code/trunk/testdata/testoutput8-8-2    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-8-2    2016-02-13 15:30:29 UTC (rev 490)
@@ -1029,4 +1029,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-8-3
===================================================================
--- code/trunk/testdata/testoutput8-8-3    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-8-3    2016-02-13 15:30:29 UTC (rev 490)
@@ -1027,4 +1027,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8

Modified: code/trunk/testdata/testoutput8-8-4
===================================================================
--- code/trunk/testdata/testoutput8-8-4    2016-02-10 18:24:02 UTC (rev 489)
+++ code/trunk/testdata/testoutput8-8-4    2016-02-13 15:30:29 UTC (rev 490)
@@ -1025,4 +1025,6 @@
 /([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
 Failed: error 114 at offset 509: missing closing parenthesis


+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode
+
# End of testinput8