home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 242 / Issue 242 - April 2008 - DPCS0408DVD.ISO / Open Source / AutoHotKey / Source / AutoHotkey104705_source.exe / source / lib_pcre / pcre / pcre_compile.c < prev    next >
Encoding:
C/C++ Source or Header  |  2007-11-20  |  190.3 KB  |  6,172 lines

  1. /*************************************************
  2. *      Perl-Compatible Regular Expressions       *
  3. *************************************************/
  4.  
  5. /* PCRE is a library of functions to support regular expressions whose syntax
  6. and semantics are as close as possible to those of the Perl 5 language.
  7.  
  8.                        Written by Philip Hazel
  9.            Copyright (c) 1997-2007 University of Cambridge
  10.  
  11. -----------------------------------------------------------------------------
  12. Redistribution and use in source and binary forms, with or without
  13. modification, are permitted provided that the following conditions are met:
  14.  
  15.     * Redistributions of source code must retain the above copyright notice,
  16.       this list of conditions and the following disclaimer.
  17.  
  18.     * Redistributions in binary form must reproduce the above copyright
  19.       notice, this list of conditions and the following disclaimer in the
  20.       documentation and/or other materials provided with the distribution.
  21.  
  22.     * Neither the name of the University of Cambridge nor the names of its
  23.       contributors may be used to endorse or promote products derived from
  24.       this software without specific prior written permission.
  25.  
  26. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29. ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  30. LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  31. CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  32. SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  33. INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  34. CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  35. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  36. POSSIBILITY OF SUCH DAMAGE.
  37. -----------------------------------------------------------------------------
  38. */
  39.  
  40.  
  41. /* This module contains the external function pcre_compile(), along with
  42. supporting internal functions that are not used by other modules. */
  43.  
  44.  
  45. #ifdef HAVE_CONFIG_H
  46. #include "config.h"
  47. #endif
  48.  
  49. #define NLBLOCK cd             /* Block containing newline information */
  50. #define PSSTART start_pattern  /* Field containing processed string start */
  51. #define PSEND   end_pattern    /* Field containing processed string end */
  52.  
  53. #include "pcre_internal.h"
  54.  
  55.  
  56. /* When DEBUG is defined, we need the pcre_printint() function, which is also
  57. used by pcretest. DEBUG is not defined when building a production library. */
  58.  
  59. #ifdef DEBUG
  60. #include "pcre_printint.src"
  61. #endif
  62.  
  63.  
  64. /* Macro for setting individual bits in class bitmaps. */
  65.  
  66. #define SETBIT(a,b) a[b/8] |= (1 << (b%8))
  67.  
  68. /* Maximum length value to check against when making sure that the integer that
  69. holds the compiled pattern length does not overflow. We make it a bit less than
  70. INT_MAX to allow for adding in group terminating bytes, so that we don't have
  71. to check them every time. */
  72.  
  73. #define OFLOW_MAX (INT_MAX - 20)
  74.  
  75.  
  76. /*************************************************
  77. *      Code parameters and static tables         *
  78. *************************************************/
  79.  
  80. /* This value specifies the size of stack workspace that is used during the
  81. first pre-compile phase that determines how much memory is required. The regex
  82. is partly compiled into this space, but the compiled parts are discarded as
  83. soon as they can be, so that hopefully there will never be an overrun. The code
  84. does, however, check for an overrun. The largest amount I've seen used is 218,
  85. so this number is very generous.
  86.  
  87. The same workspace is used during the second, actual compile phase for
  88. remembering forward references to groups so that they can be filled in at the
  89. end. Each entry in this list occupies LINK_SIZE bytes, so even when LINK_SIZE
  90. is 4 there is plenty of room. */
  91.  
  92. #define COMPILE_WORK_SIZE (4096)
  93.  
  94.  
  95. /* Table for handling escaped characters in the range '0'-'z'. Positive returns
  96. are simple data values; negative values are for special things like \d and so
  97. on. Zero means further processing is needed (for things like \x), or the escape
  98. is invalid. */
  99.  
  100. #ifndef EBCDIC  /* This is the "normal" table for ASCII systems */
  101. static const short int escapes[] = {
  102.      0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
  103.      0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
  104.    '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
  105. -ESC_H,      0,      0, -ESC_K,      0,      0,      0,      0,   /* H - O */
  106. -ESC_P, -ESC_Q, -ESC_R, -ESC_S,      0,      0, -ESC_V, -ESC_W,   /* P - W */
  107. -ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
  108.    '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
  109. -ESC_h,      0,      0, -ESC_k,      0,      0,  ESC_n,      0,   /* h - o */
  110. -ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0, -ESC_v, -ESC_w,   /* p - w */
  111.      0,      0, -ESC_z                                            /* x - z */
  112. };
  113.  
  114. #else           /* This is the "abnormal" table for EBCDIC systems */
  115. static const short int escapes[] = {
  116. /*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
  117. /*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
  118. /*  58 */     0,     0,    '!',     '$',    '*',   ')',    ';',    '~',
  119. /*  60 */   '-',   '/',      0,       0,      0,     0,      0,      0,
  120. /*  68 */     0,     0,    '|',     ',',    '%',   '_',    '>',    '?',
  121. /*  70 */     0,     0,      0,       0,      0,     0,      0,      0,
  122. /*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
  123. /*  80 */     0,     7, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
  124. /*  88 */-ESC_h,     0,      0,     '{',      0,     0,      0,      0,
  125. /*  90 */     0,     0, -ESC_k,     'l',      0, ESC_n,      0, -ESC_p,
  126. /*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
  127. /*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,-ESC_v, -ESC_w,      0,
  128. /*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
  129. /*  B0 */     0,     0,      0,       0,      0,     0,      0,      0,
  130. /*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
  131. /*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
  132. /*  C8 */-ESC_H,     0,      0,       0,      0,     0,      0,      0,
  133. /*  D0 */   '}',     0, -ESC_K,       0,      0,     0,      0, -ESC_P,
  134. /*  D8 */-ESC_Q,-ESC_R,      0,       0,      0,     0,      0,      0,
  135. /*  E0 */  '\\',     0, -ESC_S,       0,      0,-ESC_V, -ESC_W, -ESC_X,
  136. /*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
  137. /*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
  138. /*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
  139. };
  140. #endif
  141.  
  142.  
  143. /* Table of special "verbs" like (*PRUNE). This is a short table, so it is
  144. searched linearly. Put all the names into a single string, in order to reduce
  145. the number of relocations when a shared library is dynamically linked. */
  146.  
  147. typedef struct verbitem {
  148.   int   len;
  149.   int   op;
  150. } verbitem;
  151.  
  152. static const char verbnames[] =
  153.   "ACCEPT\0"
  154.   "COMMIT\0"
  155.   "F\0"
  156.   "FAIL\0"
  157.   "PRUNE\0"
  158.   "SKIP\0"
  159.   "THEN";
  160.  
  161. static verbitem verbs[] = {
  162.   { 6, OP_ACCEPT },
  163.   { 6, OP_COMMIT },
  164.   { 1, OP_FAIL },
  165.   { 4, OP_FAIL },
  166.   { 5, OP_PRUNE },
  167.   { 4, OP_SKIP  },
  168.   { 4, OP_THEN  }
  169. };
  170.  
  171. static int verbcount = sizeof(verbs)/sizeof(verbitem);
  172.  
  173.  
  174. /* Tables of names of POSIX character classes and their lengths. The names are
  175. now all in a single string, to reduce the number of relocations when a shared
  176. library is dynamically loaded. The list of lengths is terminated by a zero
  177. length entry. The first three must be alpha, lower, upper, as this is assumed
  178. for handling case independence. */
  179.  
  180. static const char posix_names[] =
  181.   "alpha\0"  "lower\0"  "upper\0"  "alnum\0"  "ascii\0"  "blank\0"
  182.   "cntrl\0"  "digit\0"  "graph\0"  "print\0"  "punct\0"  "space\0"
  183.   "word\0"   "xdigit";
  184.  
  185. static const uschar posix_name_lengths[] = {
  186.   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  187.  
  188. /* Table of class bit maps for each POSIX class. Each class is formed from a
  189. base map, with an optional addition or removal of another map. Then, for some
  190. classes, there is some additional tweaking: for [:blank:] the vertical space
  191. characters are removed, and for [:alpha:] and [:alnum:] the underscore
  192. character is removed. The triples in the table consist of the base map offset,
  193. second map offset or -1 if no second map, and a non-negative value for map
  194. addition or a negative value for map subtraction (if there are two maps). The
  195. absolute value of the third field has these meanings: 0 => no tweaking, 1 =>
  196. remove vertical space characters, 2 => remove underscore. */
  197.  
  198. static const int posix_class_maps[] = {
  199.   cbit_word,  cbit_digit, -2,             /* alpha */
  200.   cbit_lower, -1,          0,             /* lower */
  201.   cbit_upper, -1,          0,             /* upper */
  202.   cbit_word,  -1,          2,             /* alnum - word without underscore */
  203.   cbit_print, cbit_cntrl,  0,             /* ascii */
  204.   cbit_space, -1,          1,             /* blank - a GNU extension */
  205.   cbit_cntrl, -1,          0,             /* cntrl */
  206.   cbit_digit, -1,          0,             /* digit */
  207.   cbit_graph, -1,          0,             /* graph */
  208.   cbit_print, -1,          0,             /* print */
  209.   cbit_punct, -1,          0,             /* punct */
  210.   cbit_space, -1,          0,             /* space */
  211.   cbit_word,  -1,          0,             /* word - a Perl extension */
  212.   cbit_xdigit,-1,          0              /* xdigit */
  213. };
  214.  
  215.  
  216. #define STRING(a)  # a
  217. #define XSTRING(s) STRING(s)
  218.  
  219. /* The texts of compile-time error messages. These are "char *" because they
  220. are passed to the outside world. Do not ever re-use any error number, because
  221. they are documented. Always add a new error instead. Messages marked DEAD below
  222. are no longer used. This used to be a table of strings, but in order to reduce
  223. the number of relocations needed when a shared library is loaded dynamically,
  224. it is now one long string. We cannot use a table of offsets, because the
  225. lengths of inserts such as XSTRING(MAX_NAME_SIZE) are not known. Instead, we
  226. simply count through to the one we want - this isn't a performance issue
  227. because these strings are used only when there is a compilation error. */
  228.  
  229. static const char error_texts[] =
  230.   "no error\0"
  231.   "\\ at end of pattern\0"
  232.   "\\c at end of pattern\0"
  233.   "unrecognized character follows \\\0"
  234.   "numbers out of order in {} quantifier\0"
  235.   /* 5 */
  236.   "number too big in {} quantifier\0"
  237.   "missing terminating ] for character class\0"
  238.   "invalid escape sequence in character class\0"
  239.   "range out of order in character class\0"
  240.   "nothing to repeat\0"
  241.   /* 10 */
  242.   "operand of unlimited repeat could match the empty string\0"  /** DEAD **/
  243.   "internal error: unexpected repeat\0"
  244.   "unrecognized character after (?\0"
  245.   "POSIX named classes are supported only within a class\0"
  246.   "missing )\0"
  247.   /* 15 */
  248.   "reference to non-existent subpattern\0"
  249.   "erroffset passed as NULL\0"
  250.   "unknown option bit(s) set\0"
  251.   "missing ) after comment\0"
  252.   "parentheses nested too deeply\0"  /** DEAD **/
  253.   /* 20 */
  254.   "regular expression is too large\0"
  255.   "failed to get memory\0"
  256.   "unmatched parentheses\0"
  257.   "internal error: code overflow\0"
  258.   "unrecognized character after (?<\0"
  259.   /* 25 */
  260.   "lookbehind assertion is not fixed length\0"
  261.   "malformed number or name after (?(\0"
  262.   "conditional group contains more than two branches\0"
  263.   "assertion expected after (?(\0"
  264.   "(?R or (?[+-]digits must be followed by )\0"
  265.   /* 30 */
  266.   "unknown POSIX class name\0"
  267.   "POSIX collating elements are not supported\0"
  268.   "this version of PCRE is not compiled with PCRE_UTF8 support\0"
  269.   "spare error\0"  /** DEAD **/
  270.   "character value in \\x{...} sequence is too large\0"
  271.   /* 35 */
  272.   "invalid condition (?(0)\0"
  273.   "\\C not allowed in lookbehind assertion\0"
  274.   "PCRE does not support \\L, \\l, \\N, \\U, or \\u\0"
  275.   "number after (?C is > 255\0"
  276.   "closing ) for (?C expected\0"
  277.   /* 40 */
  278.   "recursive call could loop indefinitely\0"
  279.   "unrecognized character after (?P\0"
  280.   "syntax error in subpattern name (missing terminator)\0"
  281.   "two named subpatterns have the same name\0"
  282.   "invalid UTF-8 string\0"
  283.   /* 45 */
  284.   "support for \\P, \\p, and \\X has not been compiled\0"
  285.   "malformed \\P or \\p sequence\0"
  286.   "unknown property name after \\P or \\p\0"
  287.   "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)\0"
  288.   "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0"
  289.   /* 50 */
  290.   "repeated subpattern is too long\0"    /** DEAD **/
  291.   "octal value is greater than \\377 (not in UTF-8 mode)\0"
  292.   "internal error: overran compiling workspace\0"
  293.   "internal error: previously-checked referenced subpattern not found\0"
  294.   "DEFINE group contains more than one branch\0"
  295.   /* 55 */
  296.   "repeating a DEFINE group is not allowed\0"
  297.   "inconsistent NEWLINE options\0"
  298.   "\\g is not followed by a braced name or an optionally braced non-zero number\0"
  299.   "(?+ or (?- or (?(+ or (?(- must be followed by a non-zero number\0"
  300.   "(*VERB) with an argument is not supported\0"
  301.   /* 60 */
  302.   "(*VERB) not recognized\0"
  303.   "number is too big";
  304.  
  305.  
  306. /* Table to identify digits and hex digits. This is used when compiling
  307. patterns. Note that the tables in chartables are dependent on the locale, and
  308. may mark arbitrary characters as digits - but the PCRE compiling code expects
  309. to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
  310. a private table here. It costs 256 bytes, but it is a lot faster than doing
  311. character value tests (at least in some simple cases I timed), and in some
  312. applications one wants PCRE to compile efficiently as well as match
  313. efficiently.
  314.  
  315. For convenience, we use the same bit definitions as in chartables:
  316.  
  317.   0x04   decimal digit
  318.   0x08   hexadecimal digit
  319.  
  320. Then we can use ctype_digit and ctype_xdigit in the code. */
  321.  
  322. #ifndef EBCDIC  /* This is the "normal" case, for ASCII systems */
  323. static const unsigned char digitab[] =
  324.   {
  325.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
  326.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15 */
  327.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
  328.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
  329.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */
  330.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */
  331.   0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  */
  332.   0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */
  333.   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  @ - G  */
  334.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */
  335.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */
  336.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */
  337.   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  ` - g  */
  338.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h - o  */
  339.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */
  340.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */
  341.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
  342.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
  343.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
  344.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
  345.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
  346.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
  347.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
  348.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
  349.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
  350.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
  351.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
  352.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
  353.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
  354.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
  355.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
  356.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
  357.  
  358. #else           /* This is the "abnormal" case, for EBCDIC systems */
  359. static const unsigned char digitab[] =
  360.   {
  361.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
  362.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15    */
  363.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 10 */
  364.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31    */
  365.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  32- 39 20 */
  366.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47    */
  367.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 30 */
  368.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63    */
  369.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 40 */
  370.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  72- |     */
  371.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 50 */
  372.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  88- 95    */
  373.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 60 */
  374.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ?     */
  375.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
  376.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "     */
  377.   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g  80 */
  378.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143    */
  379.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p  90 */
  380.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159    */
  381.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x  A0 */
  382.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175    */
  383.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 B0 */
  384.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191    */
  385.   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  { - G  C0 */
  386.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207    */
  387.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  } - P  D0 */
  388.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223    */
  389.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  \ - X  E0 */
  390.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239    */
  391.   0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  F0 */
  392.   0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255    */
  393.  
  394. static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */
  395.   0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */
  396.   0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
  397.   0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */
  398.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
  399.   0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  32- 39 */
  400.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47 */
  401.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 */
  402.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63 */
  403.   0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 */
  404.   0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /*  72- |  */
  405.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 */
  406.   0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /*  88- 95 */
  407.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 */
  408.   0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ?  */
  409.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
  410.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "  */
  411.   0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g  */
  412.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143 */
  413.   0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p  */
  414.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159 */
  415.   0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x  */
  416.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175 */
  417.   0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 */
  418.   0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
  419.   0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  { - G  */
  420.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207 */
  421.   0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  } - P  */
  422.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223 */
  423.   0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /*  \ - X  */
  424.   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239 */
  425.   0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
  426.   0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255 */
  427. #endif
  428.  
  429.  
  430. /* Definition to allow mutual recursion */
  431.  
  432. static BOOL
  433.   compile_regex(int, int, uschar **, const uschar **, int *, BOOL, BOOL, int,
  434.     int *, int *, branch_chain *, compile_data *, int *);
  435.  
  436.  
  437.  
  438. /*************************************************
  439. *            Find an error text                  *
  440. *************************************************/
  441.  
  442. /* The error texts are now all in one long string, to save on relocations. As
  443. some of the text is of unknown length, we can't use a table of offsets.
  444. Instead, just count through the strings. This is not a performance issue
  445. because it happens only when there has been a compilation error.
  446.  
  447. Argument:   the error number
  448. Returns:    pointer to the error string
  449. */
  450.  
  451. static const char *
  452. find_error_text(int n)
  453. {
  454. const char *s = error_texts;
  455. for (; n > 0; n--) while (*s++ != 0);
  456. return s;
  457. }
  458.  
  459.  
  460. /*************************************************
  461. *            Handle escapes                      *
  462. *************************************************/
  463.  
  464. /* This function is called when a \ has been encountered. It either returns a
  465. positive value for a simple escape such as \n, or a negative value which
  466. encodes one of the more complicated things such as \d. A backreference to group
  467. n is returned as -(ESC_REF + n); ESC_REF is the highest ESC_xxx macro. When
  468. UTF-8 is enabled, a positive value greater than 255 may be returned. On entry,
  469. ptr is pointing at the \. On exit, it is on the final character of the escape
  470. sequence.
  471.  
  472. Arguments:
  473.   ptrptr         points to the pattern position pointer
  474.   errorcodeptr   points to the errorcode variable
  475.   bracount       number of previous extracting brackets
  476.   options        the options bits
  477.   isclass        TRUE if inside a character class
  478.  
  479. Returns:         zero or positive => a data character
  480.                  negative => a special escape sequence
  481.                  on error, errorcodeptr is set
  482. */
  483.  
  484. static int
  485. check_escape(const uschar **ptrptr, int *errorcodeptr, int bracount,
  486.   int options, BOOL isclass)
  487. {
  488. #ifdef SUPPORT_UTF8 /* AutoHotkey. */
  489.     BOOL utf8 = (options & PCRE_UTF8) != 0;
  490. #endif /* AutoHotkey. */
  491. const uschar *ptr = *ptrptr + 1;
  492. int c, i;
  493.  
  494. GETCHARINCTEST(c, ptr);           /* Get character value, increment pointer */
  495. ptr--;                            /* Set pointer back to the last byte */
  496.  
  497. /* If backslash is at the end of the pattern, it's an error. */
  498.  
  499. if (c == 0) *errorcodeptr = ERR1;
  500.  
  501. /* Non-alphamerics are literals. For digits or letters, do an initial lookup in
  502. a table. A non-zero result is something that can be returned immediately.
  503. Otherwise further processing may be required. */
  504.  
  505. #ifndef EBCDIC  /* ASCII coding */
  506. else if (c < '0' || c > 'z') {}                           /* Not alphameric */
  507. else if ((i = escapes[c - '0']) != 0) c = i;
  508.  
  509. #else           /* EBCDIC coding */
  510. else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {}   /* Not alphameric */
  511. else if ((i = escapes[c - 0x48]) != 0)  c = i;
  512. #endif
  513.  
  514. /* Escapes that need further processing, or are illegal. */
  515.  
  516. else
  517.   {
  518.   const uschar *oldptr;
  519.   BOOL braced, negated;
  520.  
  521.   switch (c)
  522.     {
  523.     /* A number of Perl escapes are not handled by PCRE. We give an explicit
  524.     error. */
  525.  
  526.     case 'l':
  527.     case 'L':
  528.     case 'N':
  529.     case 'u':
  530.     case 'U':
  531.     *errorcodeptr = ERR37;
  532.     break;
  533.  
  534.     /* \g must be followed by a number, either plain or braced. If positive, it
  535.     is an absolute backreference. If negative, it is a relative backreference.
  536.     This is a Perl 5.10 feature. Perl 5.10 also supports \g{name} as a
  537.     reference to a named group. This is part of Perl's movement towards a
  538.     unified syntax for back references. As this is synonymous with \k{name}, we
  539.     fudge it up by pretending it really was \k. */
  540.  
  541.     case 'g':
  542.     if (ptr[1] == '{')
  543.       {
  544.       const uschar *p;
  545.       for (p = ptr+2; *p != 0 && *p != '}'; p++)
  546.         if (*p != '-' && (digitab[*p] & ctype_digit) == 0) break;
  547.       if (*p != 0 && *p != '}')
  548.         {
  549.         c = -ESC_k;
  550.         break;
  551.         }
  552.       braced = TRUE;
  553.       ptr++;
  554.       }
  555.     else braced = FALSE;
  556.  
  557.     if (ptr[1] == '-')
  558.       {
  559.       negated = TRUE;
  560.       ptr++;
  561.       }
  562.     else negated = FALSE;
  563.  
  564.     c = 0;
  565.     while ((digitab[ptr[1]] & ctype_digit) != 0)
  566.       c = c * 10 + *(++ptr) - '0';
  567.  
  568.     if (c < 0)
  569.       {
  570.       *errorcodeptr = ERR61;
  571.       break;
  572.       }
  573.  
  574.     if (c == 0 || (braced && *(++ptr) != '}'))
  575.       {
  576.       *errorcodeptr = ERR57;
  577.       break;
  578.       }
  579.  
  580.     if (negated)
  581.       {
  582.       if (c > bracount)
  583.         {
  584.         *errorcodeptr = ERR15;
  585.         break;
  586.         }
  587.       c = bracount - (c - 1);
  588.       }
  589.  
  590.     c = -(ESC_REF + c);
  591.     break;
  592.  
  593.     /* The handling of escape sequences consisting of a string of digits
  594.     starting with one that is not zero is not straightforward. By experiment,
  595.     the way Perl works seems to be as follows:
  596.  
  597.     Outside a character class, the digits are read as a decimal number. If the
  598.     number is less than 10, or if there are that many previous extracting
  599.     left brackets, then it is a back reference. Otherwise, up to three octal
  600.     digits are read to form an escaped byte. Thus \123 is likely to be octal
  601.     123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
  602.     value is greater than 377, the least significant 8 bits are taken. Inside a
  603.     character class, \ followed by a digit is always an octal number. */
  604.  
  605.     case '1': case '2': case '3': case '4': case '5':
  606.     case '6': case '7': case '8': case '9':
  607.  
  608.     if (!isclass)
  609.       {
  610.       oldptr = ptr;
  611.       c -= '0';
  612.       while ((digitab[ptr[1]] & ctype_digit) != 0)
  613.         c = c * 10 + *(++ptr) - '0';
  614.       if (c < 0)
  615.         {
  616.         *errorcodeptr = ERR61;
  617.         break;
  618.         }
  619.       if (c < 10 || c <= bracount)
  620.         {
  621.         c = -(ESC_REF + c);
  622.         break;
  623.         }
  624.       ptr = oldptr;      /* Put the pointer back and fall through */
  625.       }
  626.  
  627.     /* Handle an octal number following \. If the first digit is 8 or 9, Perl
  628.     generates a binary zero byte and treats the digit as a following literal.
  629.     Thus we have to pull back the pointer by one. */
  630.  
  631.     if ((c = *ptr) >= '8')
  632.       {
  633.       ptr--;
  634.       c = 0;
  635.       break;
  636.       }
  637.  
  638.     /* \0 always starts an octal number, but we may drop through to here with a
  639.     larger first octal digit. The original code used just to take the least
  640.     significant 8 bits of octal numbers (I think this is what early Perls used
  641.     to do). Nowadays we allow for larger numbers in UTF-8 mode, but no more
  642.     than 3 octal digits. */
  643.  
  644.     case '0':
  645.     c -= '0';
  646.     while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
  647.         c = c * 8 + *(++ptr) - '0';
  648. #ifdef SUPPORT_UTF8 /* AutoHotkey. */
  649.     if (!utf8 && c > 255) *errorcodeptr = ERR51;
  650. #else
  651.     if (c > 255) *errorcodeptr = ERR51;
  652. #endif /* AutoHotkey. */
  653.     break;
  654.  
  655.     /* \x is complicated. \x{ddd} is a character number which can be greater
  656.     than 0xff in utf8 mode, but only if the ddd are hex digits. If not, { is
  657.     treated as a data character. */
  658.  
  659.     case 'x':
  660.     if (ptr[1] == '{')
  661.       {
  662.       const uschar *pt = ptr + 2;
  663.       int count = 0;
  664.  
  665.       c = 0;
  666.       while ((digitab[*pt] & ctype_xdigit) != 0)
  667.         {
  668.         register int cc = *pt++;
  669.         if (c == 0 && cc == '0') continue;     /* Leading zeroes */
  670.         count++;
  671.  
  672. #ifndef EBCDIC  /* ASCII coding */
  673.         if (cc >= 'a') cc -= 32;               /* Convert to upper case */
  674.         c = (c << 4) + cc - ((cc < 'A')? '0' : ('A' - 10));
  675. #else           /* EBCDIC coding */
  676.         if (cc >= 'a' && cc <= 'z') cc += 64;  /* Convert to upper case */
  677.         c = (c << 4) + cc - ((cc >= '0')? '0' : ('A' - 10));
  678. #endif
  679.         }
  680.  
  681.       if (*pt == '}')
  682.         {
  683. #ifdef SUPPORT_UTF8 /* AutoHotkey: Added ifdef/else. */
  684.         if (c < 0 || count > (utf8? 8 : 2)) *errorcodeptr = ERR34;
  685. #else
  686.         if (c < 0 || count > 2) *errorcodeptr = ERR34;
  687. #endif
  688.         ptr = pt;
  689.         break;
  690.         }
  691.  
  692.       /* If the sequence of hex digits does not end with '}', then we don't
  693.       recognize this construct; fall through to the normal \x handling. */
  694.       }
  695.  
  696.     /* Read just a single-byte hex-defined char */
  697.  
  698.     c = 0;
  699.     while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
  700.       {
  701.       int cc;                               /* Some compilers don't like ++ */
  702.       cc = *(++ptr);                        /* in initializers */
  703. #ifndef EBCDIC  /* ASCII coding */
  704.       if (cc >= 'a') cc -= 32;              /* Convert to upper case */
  705.       c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
  706. #else           /* EBCDIC coding */
  707.       if (cc <= 'z') cc += 64;              /* Convert to upper case */
  708.       c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
  709. #endif
  710.       }
  711.     break;
  712.  
  713.     /* For \c, a following letter is upper-cased; then the 0x40 bit is flipped.
  714.     This coding is ASCII-specific, but then the whole concept of \cx is
  715.     ASCII-specific. (However, an EBCDIC equivalent has now been added.) */
  716.  
  717.     case 'c':
  718.     c = *(++ptr);
  719.     if (c == 0)
  720.       {
  721.       *errorcodeptr = ERR2;
  722.       break;
  723.       }
  724.  
  725. #ifndef EBCDIC  /* ASCII coding */
  726.     if (c >= 'a' && c <= 'z') c -= 32;
  727.     c ^= 0x40;
  728. #else           /* EBCDIC coding */
  729.     if (c >= 'a' && c <= 'z') c += 64;
  730.     c ^= 0xC0;
  731. #endif
  732.     break;
  733.  
  734.     /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
  735.     other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
  736.     for Perl compatibility, it is a literal. This code looks a bit odd, but
  737.     there used to be some cases other than the default, and there may be again
  738.     in future, so I haven't "optimized" it. */
  739.  
  740.     default:
  741.     if ((options & PCRE_EXTRA) != 0) switch(c)
  742.       {
  743.       default:
  744.       *errorcodeptr = ERR3;
  745.       break;
  746.       }
  747.     break;
  748.     }
  749.   }
  750.  
  751. *ptrptr = ptr;
  752. return c;
  753. }
  754.  
  755.  
  756.  
  757. #ifdef SUPPORT_UCP
  758. /*************************************************
  759. *               Handle \P and \p                 *
  760. *************************************************/
  761.  
  762. /* This function is called after \P or \p has been encountered, provided that
  763. PCRE is compiled with support for Unicode properties. On entry, ptrptr is
  764. pointing at the P or p. On exit, it is pointing at the final character of the
  765. escape sequence.
  766.  
  767. Argument:
  768.   ptrptr         points to the pattern position pointer
  769.   negptr         points to a boolean that is set TRUE for negation else FALSE
  770.   dptr           points to an int that is set to the detailed property value
  771.   errorcodeptr   points to the error code variable
  772.  
  773. Returns:         type value from ucp_type_table, or -1 for an invalid type
  774. */
  775.  
  776. static int
  777. get_ucp(const uschar **ptrptr, BOOL *negptr, int *dptr, int *errorcodeptr)
  778. {
  779. int c, i, bot, top;
  780. const uschar *ptr = *ptrptr;
  781. char name[32];
  782.  
  783. c = *(++ptr);
  784. if (c == 0) goto ERROR_RETURN;
  785.  
  786. *negptr = FALSE;
  787.  
  788. /* \P or \p can be followed by a name in {}, optionally preceded by ^ for
  789. negation. */
  790.  
  791. if (c == '{')
  792.   {
  793.   if (ptr[1] == '^')
  794.     {
  795.     *negptr = TRUE;
  796.     ptr++;
  797.     }
  798.   for (i = 0; i < (int)sizeof(name) - 1; i++)
  799.     {
  800.     c = *(++ptr);
  801.     if (c == 0) goto ERROR_RETURN;
  802.     if (c == '}') break;
  803.     name[i] = c;
  804.     }
  805.   if (c !='}') goto ERROR_RETURN;
  806.   name[i] = 0;
  807.   }
  808.  
  809. /* Otherwise there is just one following character */
  810.  
  811. else
  812.   {
  813.   name[0] = c;
  814.   name[1] = 0;
  815.   }
  816.  
  817. *ptrptr = ptr;
  818.  
  819. /* Search for a recognized property name using binary chop */
  820.  
  821. bot = 0;
  822. top = _pcre_utt_size;
  823.  
  824. while (bot < top)
  825.   {
  826.   i = (bot + top) >> 1;
  827.   c = strcmp(name, _pcre_utt_names + _pcre_utt[i].name_offset);
  828.   if (c == 0)
  829.     {
  830.     *dptr = _pcre_utt[i].value;
  831.     return _pcre_utt[i].type;
  832.     }
  833.   if (c > 0) bot = i + 1; else top = i;
  834.   }
  835.  
  836. *errorcodeptr = ERR47;
  837. *ptrptr = ptr;
  838. return -1;
  839.  
  840. ERROR_RETURN:
  841. *errorcodeptr = ERR46;
  842. *ptrptr = ptr;
  843. return -1;
  844. }
  845. #endif
  846.  
  847.  
  848.  
  849.  
  850. /*************************************************
  851. *            Check for counted repeat            *
  852. *************************************************/
  853.  
  854. /* This function is called when a '{' is encountered in a place where it might
  855. start a quantifier. It looks ahead to see if it really is a quantifier or not.
  856. It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
  857. where the ddds are digits.
  858.  
  859. Arguments:
  860.   p         pointer to the first char after '{'
  861.  
  862. Returns:    TRUE or FALSE
  863. */
  864.  
  865. static BOOL
  866. is_counted_repeat(const uschar *p)
  867. {
  868. if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
  869. while ((digitab[*p] & ctype_digit) != 0) p++;
  870. if (*p == '}') return TRUE;
  871.  
  872. if (*p++ != ',') return FALSE;
  873. if (*p == '}') return TRUE;
  874.  
  875. if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
  876. while ((digitab[*p] & ctype_digit) != 0) p++;
  877.  
  878. return (*p == '}');
  879. }
  880.  
  881.  
  882.  
  883. /*************************************************
  884. *         Read repeat counts                     *
  885. *************************************************/
  886.  
  887. /* Read an item of the form {n,m} and return the values. This is called only
  888. after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
  889. so the syntax is guaranteed to be correct, but we need to check the values.
  890.  
  891. Arguments:
  892.   p              pointer to first char after '{'
  893.   minp           pointer to int for min
  894.   maxp           pointer to int for max
  895.                  returned as -1 if no max
  896.   errorcodeptr   points to error code variable
  897.  
  898. Returns:         pointer to '}' on success;
  899.                  current ptr on error, with errorcodeptr set non-zero
  900. */
  901.  
  902. static const uschar *
  903. read_repeat_counts(const uschar *p, int *minp, int *maxp, int *errorcodeptr)
  904. {
  905. int min = 0;
  906. int max = -1;
  907.  
  908. /* Read the minimum value and do a paranoid check: a negative value indicates
  909. an integer overflow. */
  910.  
  911. while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  912. if (min < 0 || min > 65535)
  913.   {
  914.   *errorcodeptr = ERR5;
  915.   return p;
  916.   }
  917.  
  918. /* Read the maximum value if there is one, and again do a paranoid on its size.
  919. Also, max must not be less than min. */
  920.  
  921. if (*p == '}') max = min; else
  922.   {
  923.   if (*(++p) != '}')
  924.     {
  925.     max = 0;
  926.     while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  927.     if (max < 0 || max > 65535)
  928.       {
  929.       *errorcodeptr = ERR5;
  930.       return p;
  931.       }
  932.     if (max < min)
  933.       {
  934.       *errorcodeptr = ERR4;
  935.       return p;
  936.       }
  937.     }
  938.   }
  939.  
  940. /* Fill in the required variables, and pass back the pointer to the terminating
  941. '}'. */
  942.  
  943. *minp = min;
  944. *maxp = max;
  945. return p;
  946. }
  947.  
  948.  
  949.  
  950. /*************************************************
  951. *       Find forward referenced subpattern       *
  952. *************************************************/
  953.  
  954. /* This function scans along a pattern's text looking for capturing
  955. subpatterns, and counting them. If it finds a named pattern that matches the
  956. name it is given, it returns its number. Alternatively, if the name is NULL, it
  957. returns when it reaches a given numbered subpattern. This is used for forward
  958. references to subpatterns. We know that if (?P< is encountered, the name will
  959. be terminated by '>' because that is checked in the first pass.
  960.  
  961. Arguments:
  962.   ptr          current position in the pattern
  963.   count        current count of capturing parens so far encountered
  964.   name         name to seek, or NULL if seeking a numbered subpattern
  965.   lorn         name length, or subpattern number if name is NULL
  966.   xmode        TRUE if we are in /x mode
  967.  
  968. Returns:       the number of the named subpattern, or -1 if not found
  969. */
  970.  
  971. static int
  972. find_parens(const uschar *ptr, int count, const uschar *name, int lorn,
  973.   BOOL xmode)
  974. {
  975. const uschar *thisname;
  976.  
  977. for (; *ptr != 0; ptr++)
  978.   {
  979.   int term;
  980.  
  981.   /* Skip over backslashed characters and also entire \Q...\E */
  982.  
  983.   if (*ptr == '\\')
  984.     {
  985.     if (*(++ptr) == 0) return -1;
  986.     if (*ptr == 'Q') for (;;)
  987.       {
  988.       while (*(++ptr) != 0 && *ptr != '\\');
  989.       if (*ptr == 0) return -1;
  990.       if (*(++ptr) == 'E') break;
  991.       }
  992.     continue;
  993.     }
  994.  
  995.   /* Skip over character classes */
  996.  
  997.   if (*ptr == '[')
  998.     {
  999.     while (*(++ptr) != ']')
  1000.       {
  1001.       if (*ptr == 0) return -1;
  1002.       if (*ptr == '\\')
  1003.         {
  1004.         if (*(++ptr) == 0) return -1;
  1005.         if (*ptr == 'Q') for (;;)
  1006.           {
  1007.           while (*(++ptr) != 0 && *ptr != '\\');
  1008.           if (*ptr == 0) return -1;
  1009.           if (*(++ptr) == 'E') break;
  1010.           }
  1011.         continue;
  1012.         }
  1013.       }
  1014.     continue;
  1015.     }
  1016.  
  1017.   /* Skip comments in /x mode */
  1018.  
  1019.   if (xmode && *ptr == '#')
  1020.     {
  1021.     while (*(++ptr) != 0 && *ptr != '\n');
  1022.     if (*ptr == 0) return -1;
  1023.     continue;
  1024.     }
  1025.  
  1026.   /* An opening parens must now be a real metacharacter */
  1027.  
  1028.   if (*ptr != '(') continue;
  1029.   if (ptr[1] != '?' && ptr[1] != '*')
  1030.     {
  1031.     count++;
  1032.     if (name == NULL && count == lorn) return count;
  1033.     continue;
  1034.     }
  1035.  
  1036.   ptr += 2;
  1037.   if (*ptr == 'P') ptr++;                      /* Allow optional P */
  1038.  
  1039.   /* We have to disambiguate (?<! and (?<= from (?<name> */
  1040.  
  1041.   if ((*ptr != '<' || ptr[1] == '!' || ptr[1] == '=') &&
  1042.        *ptr != '\'')
  1043.     continue;
  1044.  
  1045.   count++;
  1046.  
  1047.   if (name == NULL && count == lorn) return count;
  1048.   term = *ptr++;
  1049.   if (term == '<') term = '>';
  1050.   thisname = ptr;
  1051.   while (*ptr != term) ptr++;
  1052.   if (name != NULL && lorn == ptr - thisname &&
  1053.       strncmp((const char *)name, (const char *)thisname, lorn) == 0)
  1054.     return count;
  1055.   }
  1056.  
  1057. return -1;
  1058. }
  1059.  
  1060.  
  1061.  
  1062. /*************************************************
  1063. *      Find first significant op code            *
  1064. *************************************************/
  1065.  
  1066. /* This is called by several functions that scan a compiled expression looking
  1067. for a fixed first character, or an anchoring op code etc. It skips over things
  1068. that do not influence this. For some calls, a change of option is important.
  1069. For some calls, it makes sense to skip negative forward and all backward
  1070. assertions, and also the \b assertion; for others it does not.
  1071.  
  1072. Arguments:
  1073.   code         pointer to the start of the group
  1074.   options      pointer to external options
  1075.   optbit       the option bit whose changing is significant, or
  1076.                  zero if none are
  1077.   skipassert   TRUE if certain assertions are to be skipped
  1078.  
  1079. Returns:       pointer to the first significant opcode
  1080. */
  1081.  
  1082. static const uschar*
  1083. first_significant_code(const uschar *code, int *options, int optbit,
  1084.   BOOL skipassert)
  1085. {
  1086. for (;;)
  1087.   {
  1088.   switch ((int)*code)
  1089.     {
  1090.     case OP_OPT:
  1091.     if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
  1092.       *options = (int)code[1];
  1093.     code += 2;
  1094.     break;
  1095.  
  1096.     case OP_ASSERT_NOT:
  1097.     case OP_ASSERTBACK:
  1098.     case OP_ASSERTBACK_NOT:
  1099.     if (!skipassert) return code;
  1100.     do code += GET(code, 1); while (*code == OP_ALT);
  1101.     code += _pcre_OP_lengths[*code];
  1102.     break;
  1103.  
  1104.     case OP_WORD_BOUNDARY:
  1105.     case OP_NOT_WORD_BOUNDARY:
  1106.     if (!skipassert) return code;
  1107.     /* Fall through */
  1108.  
  1109.     case OP_CALLOUT:
  1110.     case OP_CREF:
  1111.     case OP_RREF:
  1112.     case OP_DEF:
  1113.     code += _pcre_OP_lengths[*code];
  1114.     break;
  1115.  
  1116.     default:
  1117.     return code;
  1118.     }
  1119.   }
  1120. /* Control never reaches here */
  1121. }
  1122.  
  1123.  
  1124.  
  1125.  
  1126. /*************************************************
  1127. *        Find the fixed length of a pattern      *
  1128. *************************************************/
  1129.  
  1130. /* Scan a pattern and compute the fixed length of subject that will match it,
  1131. if the length is fixed. This is needed for dealing with backward assertions.
  1132. In UTF8 mode, the result is in characters rather than bytes.
  1133.  
  1134. Arguments:
  1135.   code     points to the start of the pattern (the bracket)
  1136.   options  the compiling options
  1137.  
  1138. Returns:   the fixed length, or -1 if there is no fixed length,
  1139.              or -2 if \C was encountered
  1140. */
  1141.  
  1142. static int
  1143. find_fixedlength(uschar *code, int options)
  1144. {
  1145. int length = -1;
  1146.  
  1147. register int branchlength = 0;
  1148. register uschar *cc = code + 1 + LINK_SIZE;
  1149.  
  1150. /* Scan along the opcodes for this branch. If we get to the end of the
  1151. branch, check the length against that of the other branches. */
  1152.  
  1153. for (;;)
  1154.   {
  1155.   int d;
  1156.   register int op = *cc;
  1157.   switch (op)
  1158.     {
  1159.     case OP_CBRA:
  1160.     case OP_BRA:
  1161.     case OP_ONCE:
  1162.     case OP_COND:
  1163.     d = find_fixedlength(cc + ((op == OP_CBRA)? 2:0), options);
  1164.     if (d < 0) return d;
  1165.     branchlength += d;
  1166.     do cc += GET(cc, 1); while (*cc == OP_ALT);
  1167.     cc += 1 + LINK_SIZE;
  1168.     break;
  1169.  
  1170.     /* Reached end of a branch; if it's a ket it is the end of a nested
  1171.     call. If it's ALT it is an alternation in a nested call. If it is
  1172.     END it's the end of the outer call. All can be handled by the same code. */
  1173.  
  1174.     case OP_ALT:
  1175.     case OP_KET:
  1176.     case OP_KETRMAX:
  1177.     case OP_KETRMIN:
  1178.     case OP_END:
  1179.     if (length < 0) length = branchlength;
  1180.       else if (length != branchlength) return -1;
  1181.     if (*cc != OP_ALT) return length;
  1182.     cc += 1 + LINK_SIZE;
  1183.     branchlength = 0;
  1184.     break;
  1185.  
  1186.     /* Skip over assertive subpatterns */
  1187.  
  1188.     case OP_ASSERT:
  1189.     case OP_ASSERT_NOT:
  1190.     case OP_ASSERTBACK:
  1191.     case OP_ASSERTBACK_NOT:
  1192.     do cc += GET(cc, 1); while (*cc == OP_ALT);
  1193.     /* Fall through */
  1194.  
  1195.     /* Skip over things that don't match chars */
  1196.  
  1197.     case OP_REVERSE:
  1198.     case OP_CREF:
  1199.     case OP_RREF:
  1200.     case OP_DEF:
  1201.     case OP_OPT:
  1202.     case OP_CALLOUT:
  1203.     case OP_SOD:
  1204.     case OP_SOM:
  1205.     case OP_EOD:
  1206.     case OP_EODN:
  1207.     case OP_CIRC:
  1208.     case OP_DOLL:
  1209.     case OP_NOT_WORD_BOUNDARY:
  1210.     case OP_WORD_BOUNDARY:
  1211.     cc += _pcre_OP_lengths[*cc];
  1212.     break;
  1213.  
  1214.     /* Handle literal characters */
  1215.  
  1216.     case OP_CHAR:
  1217.     case OP_CHARNC:
  1218.     case OP_NOT:
  1219.     branchlength++;
  1220.     cc += 2;
  1221. #ifdef SUPPORT_UTF8
  1222.     if ((options & PCRE_UTF8) != 0)
  1223.       {
  1224.       while ((*cc & 0xc0) == 0x80) cc++;
  1225.       }
  1226. #endif
  1227.     break;
  1228.  
  1229.     /* Handle exact repetitions. The count is already in characters, but we
  1230.     need to skip over a multibyte character in UTF8 mode.  */
  1231.  
  1232.     case OP_EXACT:
  1233.     branchlength += GET2(cc,1);
  1234.     cc += 4;
  1235. #ifdef SUPPORT_UTF8
  1236.     if ((options & PCRE_UTF8) != 0)
  1237.       {
  1238.       while((*cc & 0x80) == 0x80) cc++;
  1239.       }
  1240. #endif
  1241.     break;
  1242.  
  1243.     case OP_TYPEEXACT:
  1244.     branchlength += GET2(cc,1);
  1245.     if (cc[3] == OP_PROP || cc[3] == OP_NOTPROP) cc += 2;
  1246.     cc += 4;
  1247.     break;
  1248.  
  1249.     /* Handle single-char matchers */
  1250.  
  1251.     case OP_PROP:
  1252.     case OP_NOTPROP:
  1253.     cc += 2;
  1254.     /* Fall through */
  1255.  
  1256.     case OP_NOT_DIGIT:
  1257.     case OP_DIGIT:
  1258.     case OP_NOT_WHITESPACE:
  1259.     case OP_WHITESPACE:
  1260.     case OP_NOT_WORDCHAR:
  1261.     case OP_WORDCHAR:
  1262.     case OP_ANY:
  1263.     branchlength++;
  1264.     cc++;
  1265.     break;
  1266.  
  1267.     /* The single-byte matcher isn't allowed */
  1268.  
  1269.     case OP_ANYBYTE:
  1270.     return -2;
  1271.  
  1272.     /* Check a class for variable quantification */
  1273.  
  1274. #ifdef SUPPORT_UTF8
  1275.     case OP_XCLASS:
  1276.     cc += GET(cc, 1) - 33;
  1277.     /* Fall through */
  1278. #endif
  1279.  
  1280.     case OP_CLASS:
  1281.     case OP_NCLASS:
  1282.     cc += 33;
  1283.  
  1284.     switch (*cc)
  1285.       {
  1286.       case OP_CRSTAR:
  1287.       case OP_CRMINSTAR:
  1288.       case OP_CRQUERY:
  1289.       case OP_CRMINQUERY:
  1290.       return -1;
  1291.  
  1292.       case OP_CRRANGE:
  1293.       case OP_CRMINRANGE:
  1294.       if (GET2(cc,1) != GET2(cc,3)) return -1;
  1295.       branchlength += GET2(cc,1);
  1296.       cc += 5;
  1297.       break;
  1298.  
  1299.       default:
  1300.       branchlength++;
  1301.       }
  1302.     break;
  1303.  
  1304.     /* Anything else is variable length */
  1305.  
  1306.     default:
  1307.     return -1;
  1308.     }
  1309.   }
  1310. /* Control never gets here */
  1311. }
  1312.  
  1313.  
  1314.  
  1315.  
  1316. /*************************************************
  1317. *    Scan compiled regex for numbered bracket    *
  1318. *************************************************/
  1319.  
  1320. /* This little function scans through a compiled pattern until it finds a
  1321. capturing bracket with the given number.
  1322.  
  1323. Arguments:
  1324.   code        points to start of expression
  1325.   utf8        TRUE in UTF-8 mode
  1326.   number      the required bracket number
  1327.  
  1328. Returns:      pointer to the opcode for the bracket, or NULL if not found
  1329. */
  1330.  
  1331. static const uschar *
  1332. find_bracket(const uschar *code, BOOL utf8, int number)
  1333. {
  1334. for (;;)
  1335.   {
  1336.   register int c = *code;
  1337.   if (c == OP_END) return NULL;
  1338.  
  1339.   /* XCLASS is used for classes that cannot be represented just by a bit
  1340.   map. This includes negated single high-valued characters. The length in
  1341.   the table is zero; the actual length is stored in the compiled code. */
  1342.  
  1343.   if (c == OP_XCLASS) code += GET(code, 1);
  1344.  
  1345.   /* Handle capturing bracket */
  1346.  
  1347.   else if (c == OP_CBRA)
  1348.     {
  1349.     int n = GET2(code, 1+LINK_SIZE);
  1350.     if (n == number) return (uschar *)code;
  1351.     code += _pcre_OP_lengths[c];
  1352.     }
  1353.  
  1354.   /* Otherwise, we can get the item's length from the table, except that for
  1355.   repeated character types, we have to test for \p and \P, which have an extra
  1356.   two bytes of parameters. */
  1357.  
  1358.   else
  1359.     {
  1360.     switch(c)
  1361.       {
  1362.       case OP_TYPESTAR:
  1363.       case OP_TYPEMINSTAR:
  1364.       case OP_TYPEPLUS:
  1365.       case OP_TYPEMINPLUS:
  1366.       case OP_TYPEQUERY:
  1367.       case OP_TYPEMINQUERY:
  1368.       case OP_TYPEPOSSTAR:
  1369.       case OP_TYPEPOSPLUS:
  1370.       case OP_TYPEPOSQUERY:
  1371.       if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
  1372.       break;
  1373.  
  1374.       case OP_TYPEUPTO:
  1375.       case OP_TYPEMINUPTO:
  1376.       case OP_TYPEEXACT:
  1377.       case OP_TYPEPOSUPTO:
  1378.       if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2;
  1379.       break;
  1380.       }
  1381.  
  1382.     /* Add in the fixed length from the table */
  1383.  
  1384.     code += _pcre_OP_lengths[c];
  1385.  
  1386.   /* In UTF-8 mode, opcodes that are followed by a character may be followed by
  1387.   a multi-byte character. The length in the table is a minimum, so we have to
  1388.   arrange to skip the extra bytes. */
  1389.  
  1390. #ifdef SUPPORT_UTF8
  1391.     if (utf8) switch(c)
  1392.       {
  1393.       case OP_CHAR:
  1394.       case OP_CHARNC:
  1395.       case OP_EXACT:
  1396.       case OP_UPTO:
  1397.       case OP_MINUPTO:
  1398.       case OP_POSUPTO:
  1399.       case OP_STAR:
  1400.       case OP_MINSTAR:
  1401.       case OP_POSSTAR:
  1402.       case OP_PLUS:
  1403.       case OP_MINPLUS:
  1404.       case OP_POSPLUS:
  1405.       case OP_QUERY:
  1406.       case OP_MINQUERY:
  1407.       case OP_POSQUERY:
  1408.       if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
  1409.       break;
  1410.       }
  1411. #endif
  1412.     }
  1413.   }
  1414. }
  1415.  
  1416.  
  1417.  
  1418. /*************************************************
  1419. *   Scan compiled regex for recursion reference  *
  1420. *************************************************/
  1421.  
  1422. /* This little function scans through a compiled pattern until it finds an
  1423. instance of OP_RECURSE.
  1424.  
  1425. Arguments:
  1426.   code        points to start of expression
  1427.   utf8        TRUE in UTF-8 mode
  1428.  
  1429. Returns:      pointer to the opcode for OP_RECURSE, or NULL if not found
  1430. */
  1431.  
  1432. static const uschar *
  1433. find_recurse(const uschar *code, BOOL utf8)
  1434. {
  1435. for (;;)
  1436.   {
  1437.   register int c = *code;
  1438.   if (c == OP_END) return NULL;
  1439.   if (c == OP_RECURSE) return code;
  1440.  
  1441.   /* XCLASS is used for classes that cannot be represented just by a bit
  1442.   map. This includes negated single high-valued characters. The length in
  1443.   the table is zero; the actual length is stored in the compiled code. */
  1444.  
  1445.   if (c == OP_XCLASS) code += GET(code, 1);
  1446.  
  1447.   /* Otherwise, we can get the item's length from the table, except that for
  1448.   repeated character types, we have to test for \p and \P, which have an extra
  1449.   two bytes of parameters. */
  1450.  
  1451.   else
  1452.     {
  1453.     switch(c)
  1454.       {
  1455.       case OP_TYPESTAR:
  1456.       case OP_TYPEMINSTAR:
  1457.       case OP_TYPEPLUS:
  1458.       case OP_TYPEMINPLUS:
  1459.       case OP_TYPEQUERY:
  1460.       case OP_TYPEMINQUERY:
  1461.       case OP_TYPEPOSSTAR:
  1462.       case OP_TYPEPOSPLUS:
  1463.       case OP_TYPEPOSQUERY:
  1464.       if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
  1465.       break;
  1466.  
  1467.       case OP_TYPEPOSUPTO:
  1468.       case OP_TYPEUPTO:
  1469.       case OP_TYPEMINUPTO:
  1470.       case OP_TYPEEXACT:
  1471.       if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2;
  1472.       break;
  1473.       }
  1474.  
  1475.     /* Add in the fixed length from the table */
  1476.  
  1477.     code += _pcre_OP_lengths[c];
  1478.  
  1479.     /* In UTF-8 mode, opcodes that are followed by a character may be followed
  1480.     by a multi-byte character. The length in the table is a minimum, so we have
  1481.     to arrange to skip the extra bytes. */
  1482.  
  1483. #ifdef SUPPORT_UTF8
  1484.     if (utf8) switch(c)
  1485.       {
  1486.       case OP_CHAR:
  1487.       case OP_CHARNC:
  1488.       case OP_EXACT:
  1489.       case OP_UPTO:
  1490.       case OP_MINUPTO:
  1491.       case OP_POSUPTO:
  1492.       case OP_STAR:
  1493.       case OP_MINSTAR:
  1494.       case OP_POSSTAR:
  1495.       case OP_PLUS:
  1496.       case OP_MINPLUS:
  1497.       case OP_POSPLUS:
  1498.       case OP_QUERY:
  1499.       case OP_MINQUERY:
  1500.       case OP_POSQUERY:
  1501.       if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
  1502.       break;
  1503.       }
  1504. #endif
  1505.     }
  1506.   }
  1507. }
  1508.  
  1509.  
  1510.  
  1511. /*************************************************
  1512. *    Scan compiled branch for non-emptiness      *
  1513. *************************************************/
  1514.  
  1515. /* This function scans through a branch of a compiled pattern to see whether it
  1516. can match the empty string or not. It is called from could_be_empty()
  1517. below and from compile_branch() when checking for an unlimited repeat of a
  1518. group that can match nothing. Note that first_significant_code() skips over
  1519. assertions. If we hit an unclosed bracket, we return "empty" - this means we've
  1520. struck an inner bracket whose current branch will already have been scanned.
  1521.  
  1522. Arguments:
  1523.   code        points to start of search
  1524.   endcode     points to where to stop
  1525.   utf8        TRUE if in UTF8 mode
  1526.  
  1527. Returns:      TRUE if what is matched could be empty
  1528. */
  1529.  
  1530. static BOOL
  1531. could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
  1532. {
  1533. register int c;
  1534. for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE);
  1535.      code < endcode;
  1536.      code = first_significant_code(code + _pcre_OP_lengths[c], NULL, 0, TRUE))
  1537.   {
  1538.   const uschar *ccode;
  1539.  
  1540.   c = *code;
  1541.  
  1542.   /* Groups with zero repeats can of course be empty; skip them. */
  1543.  
  1544.   if (c == OP_BRAZERO || c == OP_BRAMINZERO)
  1545.     {
  1546.     code += _pcre_OP_lengths[c];
  1547.     do code += GET(code, 1); while (*code == OP_ALT);
  1548.     c = *code;
  1549.     continue;
  1550.     }
  1551.  
  1552.   /* For other groups, scan the branches. */
  1553.  
  1554.   if (c == OP_BRA || c == OP_CBRA || c == OP_ONCE || c == OP_COND)
  1555.     {
  1556.     BOOL empty_branch;
  1557.     if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
  1558.  
  1559.     /* Scan a closed bracket */
  1560.  
  1561.     empty_branch = FALSE;
  1562.     do
  1563.       {
  1564.       if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
  1565.         empty_branch = TRUE;
  1566.       code += GET(code, 1);
  1567.       }
  1568.     while (*code == OP_ALT);
  1569.     if (!empty_branch) return FALSE;   /* All branches are non-empty */
  1570.     c = *code;
  1571.     continue;
  1572.     }
  1573.  
  1574.   /* Handle the other opcodes */
  1575.  
  1576.   switch (c)
  1577.     {
  1578.     /* Check for quantifiers after a class. XCLASS is used for classes that
  1579.     cannot be represented just by a bit map. This includes negated single
  1580.     high-valued characters. The length in _pcre_OP_lengths[] is zero; the
  1581.     actual length is stored in the compiled code, so we must update "code"
  1582.     here. */
  1583.  
  1584. #ifdef SUPPORT_UTF8
  1585.     case OP_XCLASS:
  1586.     ccode = code += GET(code, 1);
  1587.     goto CHECK_CLASS_REPEAT;
  1588. #endif
  1589.  
  1590.     case OP_CLASS:
  1591.     case OP_NCLASS:
  1592.     ccode = code + 33;
  1593.  
  1594. #ifdef SUPPORT_UTF8
  1595.     CHECK_CLASS_REPEAT:
  1596. #endif
  1597.  
  1598.     switch (*ccode)
  1599.       {
  1600.       case OP_CRSTAR:            /* These could be empty; continue */
  1601.       case OP_CRMINSTAR:
  1602.       case OP_CRQUERY:
  1603.       case OP_CRMINQUERY:
  1604.       break;
  1605.  
  1606.       default:                   /* Non-repeat => class must match */
  1607.       case OP_CRPLUS:            /* These repeats aren't empty */
  1608.       case OP_CRMINPLUS:
  1609.       return FALSE;
  1610.  
  1611.       case OP_CRRANGE:
  1612.       case OP_CRMINRANGE:
  1613.       if (GET2(ccode, 1) > 0) return FALSE;  /* Minimum > 0 */
  1614.       break;
  1615.       }
  1616.     break;
  1617.  
  1618.     /* Opcodes that must match a character */
  1619.  
  1620.     case OP_PROP:
  1621.     case OP_NOTPROP:
  1622.     case OP_EXTUNI:
  1623.     case OP_NOT_DIGIT:
  1624.     case OP_DIGIT:
  1625.     case OP_NOT_WHITESPACE:
  1626.     case OP_WHITESPACE:
  1627.     case OP_NOT_WORDCHAR:
  1628.     case OP_WORDCHAR:
  1629.     case OP_ANY:
  1630.     case OP_ANYBYTE:
  1631.     case OP_CHAR:
  1632.     case OP_CHARNC:
  1633.     case OP_NOT:
  1634.     case OP_PLUS:
  1635.     case OP_MINPLUS:
  1636.     case OP_POSPLUS:
  1637.     case OP_EXACT:
  1638.     case OP_NOTPLUS:
  1639.     case OP_NOTMINPLUS:
  1640.     case OP_NOTPOSPLUS:
  1641.     case OP_NOTEXACT:
  1642.     case OP_TYPEPLUS:
  1643.     case OP_TYPEMINPLUS:
  1644.     case OP_TYPEPOSPLUS:
  1645.     case OP_TYPEEXACT:
  1646.     return FALSE;
  1647.  
  1648.     /* These are going to continue, as they may be empty, but we have to
  1649.     fudge the length for the \p and \P cases. */
  1650.  
  1651.     case OP_TYPESTAR:
  1652.     case OP_TYPEMINSTAR:
  1653.     case OP_TYPEPOSSTAR:
  1654.     case OP_TYPEQUERY:
  1655.     case OP_TYPEMINQUERY:
  1656.     case OP_TYPEPOSQUERY:
  1657.     if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
  1658.     break;
  1659.  
  1660.     /* Same for these */
  1661.  
  1662.     case OP_TYPEUPTO:
  1663.     case OP_TYPEMINUPTO:
  1664.     case OP_TYPEPOSUPTO:
  1665.     if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2;
  1666.     break;
  1667.  
  1668.     /* End of branch */
  1669.  
  1670.     case OP_KET:
  1671.     case OP_KETRMAX:
  1672.     case OP_KETRMIN:
  1673.     case OP_ALT:
  1674.     return TRUE;
  1675.  
  1676.     /* In UTF-8 mode, STAR, MINSTAR, POSSTAR, QUERY, MINQUERY, POSQUERY, UPTO,
  1677.     MINUPTO, and POSUPTO may be followed by a multibyte character */
  1678.  
  1679. #ifdef SUPPORT_UTF8
  1680.     case OP_STAR:
  1681.     case OP_MINSTAR:
  1682.     case OP_POSSTAR:
  1683.     case OP_QUERY:
  1684.     case OP_MINQUERY:
  1685.     case OP_POSQUERY:
  1686.     case OP_UPTO:
  1687.     case OP_MINUPTO:
  1688.     case OP_POSUPTO:
  1689.     if (utf8) while ((code[2] & 0xc0) == 0x80) code++;
  1690.     break;
  1691. #endif
  1692.     }
  1693.   }
  1694.  
  1695. return TRUE;
  1696. }
  1697.  
  1698.  
  1699.  
  1700. /*************************************************
  1701. *    Scan compiled regex for non-emptiness       *
  1702. *************************************************/
  1703.  
  1704. /* This function is called to check for left recursive calls. We want to check
  1705. the current branch of the current pattern to see if it could match the empty
  1706. string. If it could, we must look outwards for branches at other levels,
  1707. stopping when we pass beyond the bracket which is the subject of the recursion.
  1708.  
  1709. Arguments:
  1710.   code        points to start of the recursion
  1711.   endcode     points to where to stop (current RECURSE item)
  1712.   bcptr       points to the chain of current (unclosed) branch starts
  1713.   utf8        TRUE if in UTF-8 mode
  1714.  
  1715. Returns:      TRUE if what is matched could be empty
  1716. */
  1717.  
  1718. static BOOL
  1719. could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr,
  1720.   BOOL utf8)
  1721. {
  1722. while (bcptr != NULL && bcptr->current >= code)
  1723.   {
  1724.   if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE;
  1725.   bcptr = bcptr->outer;
  1726.   }
  1727. return TRUE;
  1728. }
  1729.  
  1730.  
  1731.  
  1732. /*************************************************
  1733. *           Check for POSIX class syntax         *
  1734. *************************************************/
  1735.  
  1736. /* This function is called when the sequence "[:" or "[." or "[=" is
  1737. encountered in a character class. It checks whether this is followed by an
  1738. optional ^ and then a sequence of letters, terminated by a matching ":]" or
  1739. ".]" or "=]".
  1740.  
  1741. Argument:
  1742.   ptr      pointer to the initial [
  1743.   endptr   where to return the end pointer
  1744.   cd       pointer to compile data
  1745.  
  1746. Returns:   TRUE or FALSE
  1747. */
  1748.  
  1749. static BOOL
  1750. check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  1751. {
  1752. int terminator;          /* Don't combine these lines; the Solaris cc */
  1753. terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  1754. if (*(++ptr) == '^') ptr++;
  1755. while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  1756. if (*ptr == terminator && ptr[1] == ']')
  1757.   {
  1758.   *endptr = ptr;
  1759.   return TRUE;
  1760.   }
  1761. return FALSE;
  1762. }
  1763.  
  1764.  
  1765.  
  1766.  
  1767. /*************************************************
  1768. *          Check POSIX class name                *
  1769. *************************************************/
  1770.  
  1771. /* This function is called to check the name given in a POSIX-style class entry
  1772. such as [:alnum:].
  1773.  
  1774. Arguments:
  1775.   ptr        points to the first letter
  1776.   len        the length of the name
  1777.  
  1778. Returns:     a value representing the name, or -1 if unknown
  1779. */
  1780.  
  1781. static int
  1782. check_posix_name(const uschar *ptr, int len)
  1783. {
  1784. const char *pn = posix_names;
  1785. register int yield = 0;
  1786. while (posix_name_lengths[yield] != 0)
  1787.   {
  1788.   if (len == posix_name_lengths[yield] &&
  1789.     strncmp((const char *)ptr, pn, len) == 0) return yield;
  1790.   pn += posix_name_lengths[yield] + 1;
  1791.   yield++;
  1792.   }
  1793. return -1;
  1794. }
  1795.  
  1796.  
  1797. /*************************************************
  1798. *    Adjust OP_RECURSE items in repeated group   *
  1799. *************************************************/
  1800.  
  1801. /* OP_RECURSE items contain an offset from the start of the regex to the group
  1802. that is referenced. This means that groups can be replicated for fixed
  1803. repetition simply by copying (because the recursion is allowed to refer to
  1804. earlier groups that are outside the current group). However, when a group is
  1805. optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before
  1806. it, after it has been compiled. This means that any OP_RECURSE items within it
  1807. that refer to the group itself or any contained groups have to have their
  1808. offsets adjusted. That one of the jobs of this function. Before it is called,
  1809. the partially compiled regex must be temporarily terminated with OP_END.
  1810.  
  1811. This function has been extended with the possibility of forward references for
  1812. recursions and subroutine calls. It must also check the list of such references
  1813. for the group we are dealing with. If it finds that one of the recursions in
  1814. the current group is on this list, it adjusts the offset in the list, not the
  1815. value in the reference (which is a group number).
  1816.  
  1817. Arguments:
  1818.   group      points to the start of the group
  1819.   adjust     the amount by which the group is to be moved
  1820.   utf8       TRUE in UTF-8 mode
  1821.   cd         contains pointers to tables etc.
  1822.   save_hwm   the hwm forward reference pointer at the start of the group
  1823.  
  1824. Returns:     nothing
  1825. */
  1826.  
  1827. static void
  1828. adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd,
  1829.   uschar *save_hwm)
  1830. {
  1831. uschar *ptr = group;
  1832.  
  1833. while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
  1834.   {
  1835.   int offset;
  1836.   uschar *hc;
  1837.  
  1838.   /* See if this recursion is on the forward reference list. If so, adjust the
  1839.   reference. */
  1840.  
  1841.   for (hc = save_hwm; hc < cd->hwm; hc += LINK_SIZE)
  1842.     {
  1843.     offset = GET(hc, 0);
  1844.     if (cd->start_code + offset == ptr + 1)
  1845.       {
  1846.       PUT(hc, 0, offset + adjust);
  1847.       break;
  1848.       }
  1849.     }
  1850.  
  1851.   /* Otherwise, adjust the recursion offset if it's after the start of this
  1852.   group. */
  1853.  
  1854.   if (hc >= cd->hwm)
  1855.     {
  1856.     offset = GET(ptr, 1);
  1857.     if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
  1858.     }
  1859.  
  1860.   ptr += 1 + LINK_SIZE;
  1861.   }
  1862. }
  1863.  
  1864.  
  1865.  
  1866. /*************************************************
  1867. *        Insert an automatic callout point       *
  1868. *************************************************/
  1869.  
  1870. /* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
  1871. callout points before each pattern item.
  1872.  
  1873. Arguments:
  1874.   code           current code pointer
  1875.   ptr            current pattern pointer
  1876.   cd             pointers to tables etc
  1877.  
  1878. Returns:         new code pointer
  1879. */
  1880.  
  1881. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  1882. static uschar *
  1883. auto_callout(uschar *code, const uschar *ptr, compile_data *cd)
  1884. {
  1885. *code++ = OP_CALLOUT;
  1886. *code++ = 255;
  1887. PUT(code, 0, ptr - cd->start_pattern);  /* Pattern offset */
  1888. PUT(code, LINK_SIZE, 0);                /* Default length */
  1889. return code + 2*LINK_SIZE;
  1890. }
  1891. #endif /* AutoHotkey */
  1892.  
  1893.  
  1894.  
  1895. /*************************************************
  1896. *         Complete a callout item                *
  1897. *************************************************/
  1898.  
  1899. /* A callout item contains the length of the next item in the pattern, which
  1900. we can't fill in till after we have reached the relevant point. This is used
  1901. for both automatic and manual callouts.
  1902.  
  1903. Arguments:
  1904.   previous_callout   points to previous callout item
  1905.   ptr                current pattern pointer
  1906.   cd                 pointers to tables etc
  1907.  
  1908. Returns:             nothing
  1909. */
  1910.  
  1911. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  1912. static void
  1913. complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd)
  1914. {
  1915. int length = ptr - cd->start_pattern - GET(previous_callout, 2);
  1916. PUT(previous_callout, 2 + LINK_SIZE, length);
  1917. }
  1918. #endif /* AutoHotkey */
  1919.  
  1920.  
  1921.  
  1922. #ifdef SUPPORT_UCP
  1923. /*************************************************
  1924. *           Get othercase range                  *
  1925. *************************************************/
  1926.  
  1927. /* This function is passed the start and end of a class range, in UTF-8 mode
  1928. with UCP support. It searches up the characters, looking for internal ranges of
  1929. characters in the "other" case. Each call returns the next one, updating the
  1930. start address.
  1931.  
  1932. Arguments:
  1933.   cptr        points to starting character value; updated
  1934.   d           end value
  1935.   ocptr       where to put start of othercase range
  1936.   odptr       where to put end of othercase range
  1937.  
  1938. Yield:        TRUE when range returned; FALSE when no more
  1939. */
  1940.  
  1941. static BOOL
  1942. get_othercase_range(unsigned int *cptr, unsigned int d, unsigned int *ocptr,
  1943.   unsigned int *odptr)
  1944. {
  1945. unsigned int c, othercase, next;
  1946.  
  1947. for (c = *cptr; c <= d; c++)
  1948.   { if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR) break; }
  1949.  
  1950. if (c > d) return FALSE;
  1951.  
  1952. *ocptr = othercase;
  1953. next = othercase + 1;
  1954.  
  1955. for (++c; c <= d; c++)
  1956.   {
  1957.   if (_pcre_ucp_othercase(c) != next) break;
  1958.   next++;
  1959.   }
  1960.  
  1961. *odptr = next - 1;
  1962. *cptr = c;
  1963.  
  1964. return TRUE;
  1965. }
  1966. #endif  /* SUPPORT_UCP */
  1967.  
  1968.  
  1969.  
  1970. /*************************************************
  1971. *     Check if auto-possessifying is possible    *
  1972. *************************************************/
  1973.  
  1974. /* This function is called for unlimited repeats of certain items, to see
  1975. whether the next thing could possibly match the repeated item. If not, it makes
  1976. sense to automatically possessify the repeated item.
  1977.  
  1978. Arguments:
  1979.   op_code       the repeated op code
  1980.   this          data for this item, depends on the opcode
  1981.   utf8          TRUE in UTF-8 mode
  1982.   utf8_char     used for utf8 character bytes, NULL if not relevant
  1983.   ptr           next character in pattern
  1984.   options       options bits
  1985.   cd            contains pointers to tables etc.
  1986.  
  1987. Returns:        TRUE if possessifying is wanted
  1988. */
  1989.  
  1990. static BOOL
  1991. check_auto_possessive(int op_code, int item, BOOL utf8, uschar *utf8_char,
  1992.   const uschar *ptr, int options, compile_data *cd)
  1993. {
  1994. int next;
  1995.  
  1996. /* Skip whitespace and comments in extended mode */
  1997.  
  1998. if ((options & PCRE_EXTENDED) != 0)
  1999.   {
  2000.   for (;;)
  2001.     {
  2002.     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
  2003.     if (*ptr == '#')
  2004.       {
  2005.       while (*(++ptr) != 0)
  2006.         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
  2007.       }
  2008.     else break;
  2009.     }
  2010.   }
  2011.  
  2012. /* If the next item is one that we can handle, get its value. A non-negative
  2013. value is a character, a negative value is an escape value. */
  2014.  
  2015. if (*ptr == '\\')
  2016.   {
  2017.   int temperrorcode = 0;
  2018.   next = check_escape(&ptr, &temperrorcode, cd->bracount, options, FALSE);
  2019.   if (temperrorcode != 0) return FALSE;
  2020.   ptr++;    /* Point after the escape sequence */
  2021.   }
  2022.  
  2023. else if ((cd->ctypes[*ptr] & ctype_meta) == 0)
  2024.   {
  2025. #ifdef SUPPORT_UTF8
  2026.   if (utf8) { GETCHARINC(next, ptr); } else
  2027. #endif
  2028.   next = *ptr++;
  2029.   }
  2030.  
  2031. else return FALSE;
  2032.  
  2033. /* Skip whitespace and comments in extended mode */
  2034.  
  2035. if ((options & PCRE_EXTENDED) != 0)
  2036.   {
  2037.   for (;;)
  2038.     {
  2039.     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
  2040.     if (*ptr == '#')
  2041.       {
  2042.       while (*(++ptr) != 0)
  2043.         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
  2044.       }
  2045.     else break;
  2046.     }
  2047.   }
  2048.  
  2049. /* If the next thing is itself optional, we have to give up. */
  2050.  
  2051. if (*ptr == '*' || *ptr == '?' || strncmp((char *)ptr, "{0,", 3) == 0)
  2052.   return FALSE;
  2053.  
  2054. /* Now compare the next item with the previous opcode. If the previous is a
  2055. positive single character match, "item" either contains the character or, if
  2056. "item" is greater than 127 in utf8 mode, the character's bytes are in
  2057. utf8_char. */
  2058.  
  2059.  
  2060. /* Handle cases when the next item is a character. */
  2061.  
  2062. if (next >= 0) switch(op_code)
  2063.   {
  2064.   case OP_CHAR:
  2065. #ifdef SUPPORT_UTF8
  2066.   if (utf8 && item > 127) { GETCHAR(item, utf8_char); }
  2067. #endif
  2068.   return item != next;
  2069.  
  2070.   /* For CHARNC (caseless character) we must check the other case. If we have
  2071.   Unicode property support, we can use it to test the other case of
  2072.   high-valued characters. */
  2073.  
  2074.   case OP_CHARNC:
  2075. #ifdef SUPPORT_UTF8
  2076.   if (utf8 && item > 127) { GETCHAR(item, utf8_char); }
  2077. #endif
  2078.   if (item == next) return FALSE;
  2079. #ifdef SUPPORT_UTF8
  2080.   if (utf8)
  2081.     {
  2082.     unsigned int othercase;
  2083.     if (next < 128) othercase = cd->fcc[next]; else
  2084. #ifdef SUPPORT_UCP
  2085.     othercase = _pcre_ucp_othercase((unsigned int)next);
  2086. #else
  2087.     othercase = NOTACHAR;
  2088. #endif
  2089.     return (unsigned int)item != othercase;
  2090.     }
  2091.   else
  2092. #endif  /* SUPPORT_UTF8 */
  2093.   return (item != cd->fcc[next]);  /* Non-UTF-8 mode */
  2094.  
  2095.   /* For OP_NOT, "item" must be a single-byte character. */
  2096.  
  2097.   case OP_NOT:
  2098.   if (next < 0) return FALSE;  /* Not a character */
  2099.   if (item == next) return TRUE;
  2100.   if ((options & PCRE_CASELESS) == 0) return FALSE;
  2101. #ifdef SUPPORT_UTF8
  2102.   if (utf8)
  2103.     {
  2104.     unsigned int othercase;
  2105.     if (next < 128) othercase = cd->fcc[next]; else
  2106. #ifdef SUPPORT_UCP
  2107.     othercase = _pcre_ucp_othercase(next);
  2108. #else
  2109.     othercase = NOTACHAR;
  2110. #endif
  2111.     return (unsigned int)item == othercase;
  2112.     }
  2113.   else
  2114. #endif  /* SUPPORT_UTF8 */
  2115.   return (item == cd->fcc[next]);  /* Non-UTF-8 mode */
  2116.  
  2117.   case OP_DIGIT:
  2118.   return next > 127 || (cd->ctypes[next] & ctype_digit) == 0;
  2119.  
  2120.   case OP_NOT_DIGIT:
  2121.   return next <= 127 && (cd->ctypes[next] & ctype_digit) != 0;
  2122.  
  2123.   case OP_WHITESPACE:
  2124.   return next > 127 || (cd->ctypes[next] & ctype_space) == 0;
  2125.  
  2126.   case OP_NOT_WHITESPACE:
  2127.   return next <= 127 && (cd->ctypes[next] & ctype_space) != 0;
  2128.  
  2129.   case OP_WORDCHAR:
  2130.   return next > 127 || (cd->ctypes[next] & ctype_word) == 0;
  2131.  
  2132.   case OP_NOT_WORDCHAR:
  2133.   return next <= 127 && (cd->ctypes[next] & ctype_word) != 0;
  2134.  
  2135.   case OP_HSPACE:
  2136.   case OP_NOT_HSPACE:
  2137.   switch(next)
  2138.     {
  2139.     case 0x09:
  2140.     case 0x20:
  2141.     case 0xa0:
  2142.     case 0x1680:
  2143.     case 0x180e:
  2144.     case 0x2000:
  2145.     case 0x2001:
  2146.     case 0x2002:
  2147.     case 0x2003:
  2148.     case 0x2004:
  2149.     case 0x2005:
  2150.     case 0x2006:
  2151.     case 0x2007:
  2152.     case 0x2008:
  2153.     case 0x2009:
  2154.     case 0x200A:
  2155.     case 0x202f:
  2156.     case 0x205f:
  2157.     case 0x3000:
  2158.     return op_code != OP_HSPACE;
  2159.     default:
  2160.     return op_code == OP_HSPACE;
  2161.     }
  2162.  
  2163.   case OP_VSPACE:
  2164.   case OP_NOT_VSPACE:
  2165.   switch(next)
  2166.     {
  2167.     case 0x0a:
  2168.     case 0x0b:
  2169.     case 0x0c:
  2170.     case 0x0d:
  2171.     case 0x85:
  2172.     case 0x2028:
  2173.     case 0x2029:
  2174.     return op_code != OP_VSPACE;
  2175.     default:
  2176.     return op_code == OP_VSPACE;
  2177.     }
  2178.  
  2179.   default:
  2180.   return FALSE;
  2181.   }
  2182.  
  2183.  
  2184. /* Handle the case when the next item is \d, \s, etc. */
  2185.  
  2186. switch(op_code)
  2187.   {
  2188.   case OP_CHAR:
  2189.   case OP_CHARNC:
  2190. #ifdef SUPPORT_UTF8
  2191.   if (utf8 && item > 127) { GETCHAR(item, utf8_char); }
  2192. #endif
  2193.   switch(-next)
  2194.     {
  2195.     case ESC_d:
  2196.     return item > 127 || (cd->ctypes[item] & ctype_digit) == 0;
  2197.  
  2198.     case ESC_D:
  2199.     return item <= 127 && (cd->ctypes[item] & ctype_digit) != 0;
  2200.  
  2201.     case ESC_s:
  2202.     return item > 127 || (cd->ctypes[item] & ctype_space) == 0;
  2203.  
  2204.     case ESC_S:
  2205.     return item <= 127 && (cd->ctypes[item] & ctype_space) != 0;
  2206.  
  2207.     case ESC_w:
  2208.     return item > 127 || (cd->ctypes[item] & ctype_word) == 0;
  2209.  
  2210.     case ESC_W:
  2211.     return item <= 127 && (cd->ctypes[item] & ctype_word) != 0;
  2212.  
  2213.     case ESC_h:
  2214.     case ESC_H:
  2215.     switch(item)
  2216.       {
  2217.       case 0x09:
  2218.       case 0x20:
  2219.       case 0xa0:
  2220.       case 0x1680:
  2221.       case 0x180e:
  2222.       case 0x2000:
  2223.       case 0x2001:
  2224.       case 0x2002:
  2225.       case 0x2003:
  2226.       case 0x2004:
  2227.       case 0x2005:
  2228.       case 0x2006:
  2229.       case 0x2007:
  2230.       case 0x2008:
  2231.       case 0x2009:
  2232.       case 0x200A:
  2233.       case 0x202f:
  2234.       case 0x205f:
  2235.       case 0x3000:
  2236.       return -next != ESC_h;
  2237.       default:
  2238.       return -next == ESC_h;
  2239.       }
  2240.  
  2241.     case ESC_v:
  2242.     case ESC_V:
  2243.     switch(item)
  2244.       {
  2245.       case 0x0a:
  2246.       case 0x0b:
  2247.       case 0x0c:
  2248.       case 0x0d:
  2249.       case 0x85:
  2250.       case 0x2028:
  2251.       case 0x2029:
  2252.       return -next != ESC_v;
  2253.       default:
  2254.       return -next == ESC_v;
  2255.       }
  2256.  
  2257.     default:
  2258.     return FALSE;
  2259.     }
  2260.  
  2261.   case OP_DIGIT:
  2262.   return next == -ESC_D || next == -ESC_s || next == -ESC_W ||
  2263.          next == -ESC_h || next == -ESC_v;
  2264.  
  2265.   case OP_NOT_DIGIT:
  2266.   return next == -ESC_d;
  2267.  
  2268.   case OP_WHITESPACE:
  2269.   return next == -ESC_S || next == -ESC_d || next == -ESC_w;
  2270.  
  2271.   case OP_NOT_WHITESPACE:
  2272.   return next == -ESC_s || next == -ESC_h || next == -ESC_v;
  2273.  
  2274.   case OP_HSPACE:
  2275.   return next == -ESC_S || next == -ESC_H || next == -ESC_d || next == -ESC_w;
  2276.  
  2277.   case OP_NOT_HSPACE:
  2278.   return next == -ESC_h;
  2279.  
  2280.   /* Can't have \S in here because VT matches \S (Perl anomaly) */
  2281.   case OP_VSPACE:
  2282.   return next == -ESC_V || next == -ESC_d || next == -ESC_w;
  2283.  
  2284.   case OP_NOT_VSPACE:
  2285.   return next == -ESC_v;
  2286.  
  2287.   case OP_WORDCHAR:
  2288.   return next == -ESC_W || next == -ESC_s || next == -ESC_h || next == -ESC_v;
  2289.  
  2290.   case OP_NOT_WORDCHAR:
  2291.   return next == -ESC_w || next == -ESC_d;
  2292.  
  2293.   default:
  2294.   return FALSE;
  2295.   }
  2296.  
  2297. /* Control does not reach here */
  2298. }
  2299.  
  2300.  
  2301.  
  2302. /*************************************************
  2303. *           Compile one branch                   *
  2304. *************************************************/
  2305.  
  2306. /* Scan the pattern, compiling it into the a vector. If the options are
  2307. changed during the branch, the pointer is used to change the external options
  2308. bits. This function is used during the pre-compile phase when we are trying
  2309. to find out the amount of memory needed, as well as during the real compile
  2310. phase. The value of lengthptr distinguishes the two phases.
  2311.  
  2312. Arguments:
  2313.   optionsptr     pointer to the option bits
  2314.   codeptr        points to the pointer to the current code point
  2315.   ptrptr         points to the current pattern pointer
  2316.   errorcodeptr   points to error code variable
  2317.   firstbyteptr   set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
  2318.   reqbyteptr     set to the last literal character required, else < 0
  2319.   bcptr          points to current branch chain
  2320.   cd             contains pointers to tables etc.
  2321.   lengthptr      NULL during the real compile phase
  2322.                  points to length accumulator during pre-compile phase
  2323.  
  2324. Returns:         TRUE on success
  2325.                  FALSE, with *errorcodeptr set non-zero on error
  2326. */
  2327.  
  2328. static BOOL
  2329. compile_branch(int *optionsptr, uschar **codeptr, const uschar **ptrptr,
  2330.   int *errorcodeptr, int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr,
  2331.   compile_data *cd, int *lengthptr)
  2332. {
  2333. int repeat_type, op_type;
  2334. int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
  2335. int bravalue = 0;
  2336. int greedy_default, greedy_non_default;
  2337. int firstbyte, reqbyte;
  2338. int zeroreqbyte, zerofirstbyte;
  2339. int req_caseopt, reqvary, tempreqvary;
  2340. int options = *optionsptr;
  2341. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  2342.     int after_manual_callout = 0;
  2343. #endif /* AutoHotkey */
  2344. int length_prevgroup = 0;
  2345. register int c;
  2346. register uschar *code = *codeptr;
  2347. uschar *last_code = code;
  2348. uschar *orig_code = code;
  2349. uschar *tempcode;
  2350. BOOL inescq = FALSE;
  2351. BOOL groupsetfirstbyte = FALSE;
  2352. const uschar *ptr = *ptrptr;
  2353. const uschar *tempptr;
  2354. uschar *previous = NULL;
  2355. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  2356.     uschar *previous_callout = NULL;
  2357. #endif /* AutoHotkey */
  2358. uschar *save_hwm = NULL;
  2359. uschar classbits[32];
  2360.  
  2361. #ifdef SUPPORT_UTF8
  2362. BOOL class_utf8;
  2363. BOOL utf8 = (options & PCRE_UTF8) != 0;
  2364. uschar *class_utf8data;
  2365. uschar utf8_char[6];
  2366. #else
  2367. BOOL utf8 = FALSE;
  2368. uschar *utf8_char = NULL;
  2369. #endif
  2370.  
  2371. #ifdef DEBUG
  2372. if (lengthptr != NULL) DPRINTF((">> start branch\n"));
  2373. #endif
  2374.  
  2375. /* Set up the default and non-default settings for greediness */
  2376.  
  2377. greedy_default = ((options & PCRE_UNGREEDY) != 0);
  2378. greedy_non_default = greedy_default ^ 1;
  2379.  
  2380. /* Initialize no first byte, no required byte. REQ_UNSET means "no char
  2381. matching encountered yet". It gets changed to REQ_NONE if we hit something that
  2382. matches a non-fixed char first char; reqbyte just remains unset if we never
  2383. find one.
  2384.  
  2385. When we hit a repeat whose minimum is zero, we may have to adjust these values
  2386. to take the zero repeat into account. This is implemented by setting them to
  2387. zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual
  2388. item types that can be repeated set these backoff variables appropriately. */
  2389.  
  2390. firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
  2391.  
  2392. /* The variable req_caseopt contains either the REQ_CASELESS value or zero,
  2393. according to the current setting of the caseless flag. REQ_CASELESS is a bit
  2394. value > 255. It is added into the firstbyte or reqbyte variables to record the
  2395. case status of the value. This is used only for ASCII characters. */
  2396.  
  2397. req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
  2398.  
  2399. /* Switch on next character until the end of the branch */
  2400.  
  2401. for (;; ptr++)
  2402.   {
  2403.   BOOL negate_class;
  2404.   BOOL possessive_quantifier;
  2405.   BOOL is_quantifier;
  2406.   BOOL is_recurse;
  2407.   BOOL reset_bracount;
  2408.   int class_charcount;
  2409.   int class_lastchar;
  2410.   int newoptions;
  2411.   int recno;
  2412.   int refsign;
  2413.   int skipbytes;
  2414.   int subreqbyte;
  2415.   int subfirstbyte;
  2416.   int terminator;
  2417.   int mclength;
  2418.   uschar mcbuffer[8];
  2419.  
  2420.   /* Get next byte in the pattern */
  2421.  
  2422.   c = *ptr;
  2423.  
  2424.   /* If we are in the pre-compile phase, accumulate the length used for the
  2425.   previous cycle of this loop. */
  2426.  
  2427.   if (lengthptr != NULL)
  2428.     {
  2429. #ifdef DEBUG
  2430.     if (code > cd->hwm) cd->hwm = code;                 /* High water info */
  2431. #endif
  2432.     if (code > cd->start_workspace + COMPILE_WORK_SIZE) /* Check for overrun */
  2433.       {
  2434.       *errorcodeptr = ERR52;
  2435.       goto FAILED;
  2436.       }
  2437.  
  2438.     /* There is at least one situation where code goes backwards: this is the
  2439.     case of a zero quantifier after a class (e.g. [ab]{0}). At compile time,
  2440.     the class is simply eliminated. However, it is created first, so we have to
  2441.     allow memory for it. Therefore, don't ever reduce the length at this point.
  2442.     */
  2443.  
  2444.     if (code < last_code) code = last_code;
  2445.  
  2446.     /* Paranoid check for integer overflow */
  2447.  
  2448.     if (OFLOW_MAX - *lengthptr < code - last_code)
  2449.       {
  2450.       *errorcodeptr = ERR20;
  2451.       goto FAILED;
  2452.       }
  2453.  
  2454.     *lengthptr += code - last_code;
  2455.     DPRINTF(("length=%d added %d c=%c\n", *lengthptr, code - last_code, c));
  2456.  
  2457.     /* If "previous" is set and it is not at the start of the work space, move
  2458.     it back to there, in order to avoid filling up the work space. Otherwise,
  2459.     if "previous" is NULL, reset the current code pointer to the start. */
  2460.  
  2461.     if (previous != NULL)
  2462.       {
  2463.       if (previous > orig_code)
  2464.         {
  2465.         memmove(orig_code, previous, code - previous);
  2466.         code -= previous - orig_code;
  2467.         previous = orig_code;
  2468.         }
  2469.       }
  2470.     else code = orig_code;
  2471.  
  2472.     /* Remember where this code item starts so we can pick up the length
  2473.     next time round. */
  2474.  
  2475.     last_code = code;
  2476.     }
  2477.  
  2478.   /* In the real compile phase, just check the workspace used by the forward
  2479.   reference list. */
  2480.  
  2481.   else if (cd->hwm > cd->start_workspace + COMPILE_WORK_SIZE)
  2482.     {
  2483.     *errorcodeptr = ERR52;
  2484.     goto FAILED;
  2485.     }
  2486.  
  2487.   /* If in \Q...\E, check for the end; if not, we have a literal */
  2488.  
  2489.   if (inescq && c != 0)
  2490.     {
  2491.     if (c == '\\' && ptr[1] == 'E')
  2492.       {
  2493.       inescq = FALSE;
  2494.       ptr++;
  2495.       continue;
  2496.       }
  2497.     else
  2498.       {
  2499. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  2500.       if (previous_callout != NULL)
  2501.         {
  2502.         if (lengthptr == NULL)  /* Don't attempt in pre-compile phase */
  2503.           complete_callout(previous_callout, ptr, cd);
  2504.         previous_callout = NULL;
  2505.         }
  2506.       if ((options & PCRE_AUTO_CALLOUT) != 0)
  2507.         {
  2508.         previous_callout = code;
  2509.         code = auto_callout(code, ptr, cd);
  2510.         }
  2511. #endif /* AutoHotkey */
  2512.       goto NORMAL_CHAR;
  2513.       }
  2514.     }
  2515.  
  2516.   /* Fill in length of a previous callout, except when the next thing is
  2517.   a quantifier. */
  2518.  
  2519.   is_quantifier = c == '*' || c == '+' || c == '?' ||
  2520.     (c == '{' && is_counted_repeat(ptr+1));
  2521.  
  2522. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  2523.   if (!is_quantifier && previous_callout != NULL &&
  2524.        after_manual_callout-- <= 0)
  2525.     {
  2526.     if (lengthptr == NULL)      /* Don't attempt in pre-compile phase */
  2527.       complete_callout(previous_callout, ptr, cd);
  2528.     previous_callout = NULL;
  2529.     }
  2530. #endif /* AutoHotkey */
  2531.  
  2532.   /* In extended mode, skip white space and comments */
  2533.  
  2534.   if ((options & PCRE_EXTENDED) != 0)
  2535.     {
  2536.     if ((cd->ctypes[c] & ctype_space) != 0) continue;
  2537.     if (c == '#')
  2538.       {
  2539.       while (*(++ptr) != 0)
  2540.         {
  2541.         if (IS_NEWLINE(ptr)) { ptr += cd->nllen - 1; break; }
  2542.         }
  2543.       if (*ptr != 0) continue;
  2544.  
  2545.       /* Else fall through to handle end of string */
  2546.       c = 0;
  2547.       }
  2548.     }
  2549.  
  2550.   /* No auto callout for quantifiers. */
  2551.  
  2552. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  2553.   if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier)
  2554.     {
  2555.     previous_callout = code;
  2556.     code = auto_callout(code, ptr, cd);
  2557.     }
  2558. #endif /* AutoHotkey */
  2559.  
  2560.   switch(c)
  2561.     {
  2562.     /* ===================================================================*/
  2563.     case 0:                        /* The branch terminates at string end */
  2564.     case '|':                      /* or | or ) */
  2565.     case ')':
  2566.     *firstbyteptr = firstbyte;
  2567.     *reqbyteptr = reqbyte;
  2568.     *codeptr = code;
  2569.     *ptrptr = ptr;
  2570.     if (lengthptr != NULL)
  2571.       {
  2572.       if (OFLOW_MAX - *lengthptr < code - last_code)
  2573.         {
  2574.         *errorcodeptr = ERR20;
  2575.         goto FAILED;
  2576.         }
  2577.       *lengthptr += code - last_code;   /* To include callout length */
  2578.       DPRINTF((">> end branch\n"));
  2579.       }
  2580.     return TRUE;
  2581.  
  2582.  
  2583.     /* ===================================================================*/
  2584.     /* Handle single-character metacharacters. In multiline mode, ^ disables
  2585.     the setting of any following char as a first character. */
  2586.  
  2587.     case '^':
  2588.     if ((options & PCRE_MULTILINE) != 0)
  2589.       {
  2590.       if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  2591.       }
  2592.     previous = NULL;
  2593.     *code++ = OP_CIRC;
  2594.     break;
  2595.  
  2596.     case '$':
  2597.     previous = NULL;
  2598.     *code++ = OP_DOLL;
  2599.     break;
  2600.  
  2601.     /* There can never be a first char if '.' is first, whatever happens about
  2602.     repeats. The value of reqbyte doesn't change either. */
  2603.  
  2604.     case '.':
  2605.     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  2606.     zerofirstbyte = firstbyte;
  2607.     zeroreqbyte = reqbyte;
  2608.     previous = code;
  2609.     *code++ = OP_ANY;
  2610.     break;
  2611.  
  2612.  
  2613.     /* ===================================================================*/
  2614.     /* Character classes. If the included characters are all < 256, we build a
  2615.     32-byte bitmap of the permitted characters, except in the special case
  2616.     where there is only one such character. For negated classes, we build the
  2617.     map as usual, then invert it at the end. However, we use a different opcode
  2618.     so that data characters > 255 can be handled correctly.
  2619.  
  2620.     If the class contains characters outside the 0-255 range, a different
  2621.     opcode is compiled. It may optionally have a bit map for characters < 256,
  2622.     but those above are are explicitly listed afterwards. A flag byte tells
  2623.     whether the bitmap is present, and whether this is a negated class or not.
  2624.     */
  2625.  
  2626.     case '[':
  2627.     previous = code;
  2628.  
  2629.     /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
  2630.     they are encountered at the top level, so we'll do that too. */
  2631.  
  2632.     if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  2633.         check_posix_syntax(ptr, &tempptr, cd))
  2634.       {
  2635.       *errorcodeptr = (ptr[1] == ':')? ERR13 : ERR31;
  2636.       goto FAILED;
  2637.       }
  2638.  
  2639.     /* If the first character is '^', set the negation flag and skip it. Also,
  2640.     if the first few characters (either before or after ^) are \Q\E or \E we
  2641.     skip them too. This makes for compatibility with Perl. */
  2642.  
  2643.     negate_class = FALSE;
  2644.     for (;;)
  2645.       {
  2646.       c = *(++ptr);
  2647.       if (c == '\\')
  2648.         {
  2649.         if (ptr[1] == 'E') ptr++;
  2650.           else if (strncmp((const char *)ptr+1, "Q\\E", 3) == 0) ptr += 3;
  2651.             else break;
  2652.         }
  2653.       else if (!negate_class && c == '^')
  2654.         negate_class = TRUE;
  2655.       else break;
  2656.       }
  2657.  
  2658.     /* Keep a count of chars with values < 256 so that we can optimize the case
  2659.     of just a single character (as long as it's < 256). However, For higher
  2660.     valued UTF-8 characters, we don't yet do any optimization. */
  2661.  
  2662.     class_charcount = 0;
  2663.     class_lastchar = -1;
  2664.  
  2665.     /* Initialize the 32-char bit map to all zeros. We build the map in a
  2666.     temporary bit of memory, in case the class contains only 1 character (less
  2667.     than 256), because in that case the compiled code doesn't use the bit map.
  2668.     */
  2669.  
  2670.     memset(classbits, 0, 32 * sizeof(uschar));
  2671.  
  2672. #ifdef SUPPORT_UTF8
  2673.     class_utf8 = FALSE;                       /* No chars >= 256 */
  2674.     class_utf8data = code + LINK_SIZE + 2;    /* For UTF-8 items */
  2675. #endif
  2676.  
  2677.     /* Process characters until ] is reached. By writing this as a "do" it
  2678.     means that an initial ] is taken as a data character. At the start of the
  2679.     loop, c contains the first byte of the character. */
  2680.  
  2681.     if (c != 0) do
  2682.       {
  2683.       const uschar *oldptr;
  2684.  
  2685. #ifdef SUPPORT_UTF8
  2686.       if (utf8 && c > 127)
  2687.         {                           /* Braces are required because the */
  2688.         GETCHARLEN(c, ptr, ptr);    /* macro generates multiple statements */
  2689.         }
  2690. #endif
  2691.  
  2692.       /* Inside \Q...\E everything is literal except \E */
  2693.  
  2694.       if (inescq)
  2695.         {
  2696.         if (c == '\\' && ptr[1] == 'E')     /* If we are at \E */
  2697.           {
  2698.           inescq = FALSE;                   /* Reset literal state */
  2699.           ptr++;                            /* Skip the 'E' */
  2700.           continue;                         /* Carry on with next */
  2701.           }
  2702.         goto CHECK_RANGE;                   /* Could be range if \E follows */
  2703.         }
  2704.  
  2705.       /* Handle POSIX class names. Perl allows a negation extension of the
  2706.       form [:^name:]. A square bracket that doesn't match the syntax is
  2707.       treated as a literal. We also recognize the POSIX constructions
  2708.       [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
  2709.       5.6 and 5.8 do. */
  2710.  
  2711.       if (c == '[' &&
  2712.           (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  2713.           check_posix_syntax(ptr, &tempptr, cd))
  2714.         {
  2715.         BOOL local_negate = FALSE;
  2716.         int posix_class, taboffset, tabopt;
  2717.         register const uschar *cbits = cd->cbits;
  2718.         uschar pbits[32];
  2719.  
  2720.         if (ptr[1] != ':')
  2721.           {
  2722.           *errorcodeptr = ERR31;
  2723.           goto FAILED;
  2724.           }
  2725.  
  2726.         ptr += 2;
  2727.         if (*ptr == '^')
  2728.           {
  2729.           local_negate = TRUE;
  2730.           ptr++;
  2731.           }
  2732.  
  2733.         posix_class = check_posix_name(ptr, tempptr - ptr);
  2734.         if (posix_class < 0)
  2735.           {
  2736.           *errorcodeptr = ERR30;
  2737.           goto FAILED;
  2738.           }
  2739.  
  2740.         /* If matching is caseless, upper and lower are converted to
  2741.         alpha. This relies on the fact that the class table starts with
  2742.         alpha, lower, upper as the first 3 entries. */
  2743.  
  2744.         if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
  2745.           posix_class = 0;
  2746.  
  2747.         /* We build the bit map for the POSIX class in a chunk of local store
  2748.         because we may be adding and subtracting from it, and we don't want to
  2749.         subtract bits that may be in the main map already. At the end we or the
  2750.         result into the bit map that is being built. */
  2751.  
  2752.         posix_class *= 3;
  2753.  
  2754.         /* Copy in the first table (always present) */
  2755.  
  2756.         memcpy(pbits, cbits + posix_class_maps[posix_class],
  2757.           32 * sizeof(uschar));
  2758.  
  2759.         /* If there is a second table, add or remove it as required. */
  2760.  
  2761.         taboffset = posix_class_maps[posix_class + 1];
  2762.         tabopt = posix_class_maps[posix_class + 2];
  2763.  
  2764.         if (taboffset >= 0)
  2765.           {
  2766.           if (tabopt >= 0)
  2767.             for (c = 0; c < 32; c++) pbits[c] |= cbits[c + taboffset];
  2768.           else
  2769.             for (c = 0; c < 32; c++) pbits[c] &= ~cbits[c + taboffset];
  2770.           }
  2771.  
  2772.         /* Not see if we need to remove any special characters. An option
  2773.         value of 1 removes vertical space and 2 removes underscore. */
  2774.  
  2775.         if (tabopt < 0) tabopt = -tabopt;
  2776.         if (tabopt == 1) pbits[1] &= ~0x3c;
  2777.           else if (tabopt == 2) pbits[11] &= 0x7f;
  2778.  
  2779.         /* Add the POSIX table or its complement into the main table that is
  2780.         being built and we are done. */
  2781.  
  2782.         if (local_negate)
  2783.           for (c = 0; c < 32; c++) classbits[c] |= ~pbits[c];
  2784.         else
  2785.           for (c = 0; c < 32; c++) classbits[c] |= pbits[c];
  2786.  
  2787.         ptr = tempptr + 1;
  2788.         class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
  2789.         continue;    /* End of POSIX syntax handling */
  2790.         }
  2791.  
  2792.       /* Backslash may introduce a single character, or it may introduce one
  2793.       of the specials, which just set a flag. The sequence \b is a special
  2794.       case. Inside a class (and only there) it is treated as backspace.
  2795.       Elsewhere it marks a word boundary. Other escapes have preset maps ready
  2796.       to 'or' into the one we are building. We assume they have more than one
  2797.       character in them, so set class_charcount bigger than one. */
  2798.  
  2799.       if (c == '\\')
  2800.         {
  2801.         c = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE);
  2802.         if (*errorcodeptr != 0) goto FAILED;
  2803.  
  2804.         if (-c == ESC_b) c = '\b';       /* \b is backslash in a class */
  2805.         else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
  2806.         else if (-c == ESC_R) c = 'R';   /* \R is literal R in a class */
  2807.         else if (-c == ESC_Q)            /* Handle start of quoted string */
  2808.           {
  2809.           if (ptr[1] == '\\' && ptr[2] == 'E')
  2810.             {
  2811.             ptr += 2; /* avoid empty string */
  2812.             }
  2813.           else inescq = TRUE;
  2814.           continue;
  2815.           }
  2816.         else if (-c == ESC_E) continue;  /* Ignore orphan \E */
  2817.  
  2818.         if (c < 0)
  2819.           {
  2820.           register const uschar *cbits = cd->cbits;
  2821.           class_charcount += 2;     /* Greater than 1 is what matters */
  2822.  
  2823.           /* Save time by not doing this in the pre-compile phase. */
  2824.  
  2825.           if (lengthptr == NULL) switch (-c)
  2826.             {
  2827.             case ESC_d:
  2828.             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
  2829.             continue;
  2830.  
  2831.             case ESC_D:
  2832.             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
  2833.             continue;
  2834.  
  2835.             case ESC_w:
  2836.             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
  2837.             continue;
  2838.  
  2839.             case ESC_W:
  2840.             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
  2841.             continue;
  2842.  
  2843.             case ESC_s:
  2844.             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
  2845.             classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
  2846.             continue;
  2847.  
  2848.             case ESC_S:
  2849.             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
  2850.             classbits[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
  2851.             continue;
  2852.  
  2853.             case ESC_E: /* Perl ignores an orphan \E */
  2854.             continue;
  2855.  
  2856.             default:    /* Not recognized; fall through */
  2857.             break;      /* Need "default" setting to stop compiler warning. */
  2858.             }
  2859.  
  2860.           /* In the pre-compile phase, just do the recognition. */
  2861.  
  2862.           else if (c == -ESC_d || c == -ESC_D || c == -ESC_w ||
  2863.                    c == -ESC_W || c == -ESC_s || c == -ESC_S) continue;
  2864.  
  2865.           /* We need to deal with \H, \h, \V, and \v in both phases because
  2866.           they use extra memory. */
  2867.  
  2868.           if (-c == ESC_h)
  2869.             {
  2870.             SETBIT(classbits, 0x09); /* VT */
  2871.             SETBIT(classbits, 0x20); /* SPACE */
  2872.             SETBIT(classbits, 0xa0); /* NSBP */
  2873. #ifdef SUPPORT_UTF8
  2874.             if (utf8)
  2875.               {
  2876.               class_utf8 = TRUE;
  2877.               *class_utf8data++ = XCL_SINGLE;
  2878.               class_utf8data += _pcre_ord2utf8(0x1680, class_utf8data);
  2879.               *class_utf8data++ = XCL_SINGLE;
  2880.               class_utf8data += _pcre_ord2utf8(0x180e, class_utf8data);
  2881.               *class_utf8data++ = XCL_RANGE;
  2882.               class_utf8data += _pcre_ord2utf8(0x2000, class_utf8data);
  2883.               class_utf8data += _pcre_ord2utf8(0x200A, class_utf8data);
  2884.               *class_utf8data++ = XCL_SINGLE;
  2885.               class_utf8data += _pcre_ord2utf8(0x202f, class_utf8data);
  2886.               *class_utf8data++ = XCL_SINGLE;
  2887.               class_utf8data += _pcre_ord2utf8(0x205f, class_utf8data);
  2888.               *class_utf8data++ = XCL_SINGLE;
  2889.               class_utf8data += _pcre_ord2utf8(0x3000, class_utf8data);
  2890.               }
  2891. #endif
  2892.             continue;
  2893.             }
  2894.  
  2895.           if (-c == ESC_H)
  2896.             {
  2897.             for (c = 0; c < 32; c++)
  2898.               {
  2899.               int x = 0xff;
  2900.               switch (c)
  2901.                 {
  2902.                 case 0x09/8: x ^= 1 << (0x09%8); break;
  2903.                 case 0x20/8: x ^= 1 << (0x20%8); break;
  2904.                 case 0xa0/8: x ^= 1 << (0xa0%8); break;
  2905.                 default: break;
  2906.                 }
  2907.               classbits[c] |= x;
  2908.               }
  2909.  
  2910. #ifdef SUPPORT_UTF8
  2911.             if (utf8)
  2912.               {
  2913.               class_utf8 = TRUE;
  2914.               *class_utf8data++ = XCL_RANGE;
  2915.               class_utf8data += _pcre_ord2utf8(0x0100, class_utf8data);
  2916.               class_utf8data += _pcre_ord2utf8(0x167f, class_utf8data);
  2917.               *class_utf8data++ = XCL_RANGE;
  2918.               class_utf8data += _pcre_ord2utf8(0x1681, class_utf8data);
  2919.               class_utf8data += _pcre_ord2utf8(0x180d, class_utf8data);
  2920.               *class_utf8data++ = XCL_RANGE;
  2921.               class_utf8data += _pcre_ord2utf8(0x180f, class_utf8data);
  2922.               class_utf8data += _pcre_ord2utf8(0x1fff, class_utf8data);
  2923.               *class_utf8data++ = XCL_RANGE;
  2924.               class_utf8data += _pcre_ord2utf8(0x200B, class_utf8data);
  2925.               class_utf8data += _pcre_ord2utf8(0x202e, class_utf8data);
  2926.               *class_utf8data++ = XCL_RANGE;
  2927.               class_utf8data += _pcre_ord2utf8(0x2030, class_utf8data);
  2928.               class_utf8data += _pcre_ord2utf8(0x205e, class_utf8data);
  2929.               *class_utf8data++ = XCL_RANGE;
  2930.               class_utf8data += _pcre_ord2utf8(0x2060, class_utf8data);
  2931.               class_utf8data += _pcre_ord2utf8(0x2fff, class_utf8data);
  2932.               *class_utf8data++ = XCL_RANGE;
  2933.               class_utf8data += _pcre_ord2utf8(0x3001, class_utf8data);
  2934.               class_utf8data += _pcre_ord2utf8(0x7fffffff, class_utf8data);
  2935.               }
  2936. #endif
  2937.             continue;
  2938.             }
  2939.  
  2940.           if (-c == ESC_v)
  2941.             {
  2942.             SETBIT(classbits, 0x0a); /* LF */
  2943.             SETBIT(classbits, 0x0b); /* VT */
  2944.             SETBIT(classbits, 0x0c); /* FF */
  2945.             SETBIT(classbits, 0x0d); /* CR */
  2946.             SETBIT(classbits, 0x85); /* NEL */
  2947. #ifdef SUPPORT_UTF8
  2948.             if (utf8)
  2949.               {
  2950.               class_utf8 = TRUE;
  2951.               *class_utf8data++ = XCL_RANGE;
  2952.               class_utf8data += _pcre_ord2utf8(0x2028, class_utf8data);
  2953.               class_utf8data += _pcre_ord2utf8(0x2029, class_utf8data);
  2954.               }
  2955. #endif
  2956.             continue;
  2957.             }
  2958.  
  2959.           if (-c == ESC_V)
  2960.             {
  2961.             for (c = 0; c < 32; c++)
  2962.               {
  2963.               int x = 0xff;
  2964.               switch (c)
  2965.                 {
  2966.                 case 0x0a/8: x ^= 1 << (0x0a%8);
  2967.                              x ^= 1 << (0x0b%8);
  2968.                              x ^= 1 << (0x0c%8);
  2969.                              x ^= 1 << (0x0d%8);
  2970.                              break;
  2971.                 case 0x85/8: x ^= 1 << (0x85%8); break;
  2972.                 default: break;
  2973.                 }
  2974.               classbits[c] |= x;
  2975.               }
  2976.  
  2977. #ifdef SUPPORT_UTF8
  2978.             if (utf8)
  2979.               {
  2980.               class_utf8 = TRUE;
  2981.               *class_utf8data++ = XCL_RANGE;
  2982.               class_utf8data += _pcre_ord2utf8(0x0100, class_utf8data);
  2983.               class_utf8data += _pcre_ord2utf8(0x2027, class_utf8data);
  2984.               *class_utf8data++ = XCL_RANGE;
  2985.               class_utf8data += _pcre_ord2utf8(0x2029, class_utf8data);
  2986.               class_utf8data += _pcre_ord2utf8(0x7fffffff, class_utf8data);
  2987.               }
  2988. #endif
  2989.             continue;
  2990.             }
  2991.  
  2992.           /* We need to deal with \P and \p in both phases. */
  2993.  
  2994. #ifdef SUPPORT_UCP
  2995.           if (-c == ESC_p || -c == ESC_P)
  2996.             {
  2997.             BOOL negated;
  2998.             int pdata;
  2999.             int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr);
  3000.             if (ptype < 0) goto FAILED;
  3001.             class_utf8 = TRUE;
  3002.             *class_utf8data++ = ((-c == ESC_p) != negated)?
  3003.               XCL_PROP : XCL_NOTPROP;
  3004.             *class_utf8data++ = ptype;
  3005.             *class_utf8data++ = pdata;
  3006.             class_charcount -= 2;   /* Not a < 256 character */
  3007.             continue;
  3008.             }
  3009. #endif
  3010.           /* Unrecognized escapes are faulted if PCRE is running in its
  3011.           strict mode. By default, for compatibility with Perl, they are
  3012.           treated as literals. */
  3013.  
  3014.           if ((options & PCRE_EXTRA) != 0)
  3015.             {
  3016.             *errorcodeptr = ERR7;
  3017.             goto FAILED;
  3018.             }
  3019.  
  3020.           class_charcount -= 2;  /* Undo the default count from above */
  3021.           c = *ptr;              /* Get the final character and fall through */
  3022.           }
  3023.  
  3024.         /* Fall through if we have a single character (c >= 0). This may be
  3025.         greater than 256 in UTF-8 mode. */
  3026.  
  3027.         }   /* End of backslash handling */
  3028.  
  3029.       /* A single character may be followed by '-' to form a range. However,
  3030.       Perl does not permit ']' to be the end of the range. A '-' character
  3031.       at the end is treated as a literal. Perl ignores orphaned \E sequences
  3032.       entirely. The code for handling \Q and \E is messy. */
  3033.  
  3034.       CHECK_RANGE:
  3035.       while (ptr[1] == '\\' && ptr[2] == 'E')
  3036.         {
  3037.         inescq = FALSE;
  3038.         ptr += 2;
  3039.         }
  3040.  
  3041.       oldptr = ptr;
  3042.  
  3043.       /* Remember \r or \n */
  3044.  
  3045.       if (c == '\r' || c == '\n') cd->external_flags |= PCRE_HASCRORLF;
  3046.  
  3047.       /* Check for range */
  3048.  
  3049.       if (!inescq && ptr[1] == '-')
  3050.         {
  3051.         int d;
  3052.         ptr += 2;
  3053.         while (*ptr == '\\' && ptr[1] == 'E') ptr += 2;
  3054.  
  3055.         /* If we hit \Q (not followed by \E) at this point, go into escaped
  3056.         mode. */
  3057.  
  3058.         while (*ptr == '\\' && ptr[1] == 'Q')
  3059.           {
  3060.           ptr += 2;
  3061.           if (*ptr == '\\' && ptr[1] == 'E') { ptr += 2; continue; }
  3062.           inescq = TRUE;
  3063.           break;
  3064.           }
  3065.  
  3066.         if (*ptr == 0 || (!inescq && *ptr == ']'))
  3067.           {
  3068.           ptr = oldptr;
  3069.           goto LONE_SINGLE_CHARACTER;
  3070.           }
  3071.  
  3072. #ifdef SUPPORT_UTF8
  3073.         if (utf8)
  3074.           {                           /* Braces are required because the */
  3075.           GETCHARLEN(d, ptr, ptr);    /* macro generates multiple statements */
  3076.           }
  3077.         else
  3078. #endif
  3079.         d = *ptr;  /* Not UTF-8 mode */
  3080.  
  3081.         /* The second part of a range can be a single-character escape, but
  3082.         not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  3083.         in such circumstances. */
  3084.  
  3085.         if (!inescq && d == '\\')
  3086.           {
  3087.           d = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE);
  3088.           if (*errorcodeptr != 0) goto FAILED;
  3089.  
  3090.           /* \b is backslash; \X is literal X; \R is literal R; any other
  3091.           special means the '-' was literal */
  3092.  
  3093.           if (d < 0)
  3094.             {
  3095.             if (d == -ESC_b) d = '\b';
  3096.             else if (d == -ESC_X) d = 'X';
  3097.             else if (d == -ESC_R) d = 'R'; else
  3098.               {
  3099.               ptr = oldptr;
  3100.               goto LONE_SINGLE_CHARACTER;  /* A few lines below */
  3101.               }
  3102.             }
  3103.           }
  3104.  
  3105.         /* Check that the two values are in the correct order. Optimize
  3106.         one-character ranges */
  3107.  
  3108.         if (d < c)
  3109.           {
  3110.           *errorcodeptr = ERR8;
  3111.           goto FAILED;
  3112.           }
  3113.  
  3114.         if (d == c) goto LONE_SINGLE_CHARACTER;  /* A few lines below */
  3115.  
  3116.         /* Remember \r or \n */
  3117.  
  3118.         if (d == '\r' || d == '\n') cd->external_flags |= PCRE_HASCRORLF;
  3119.  
  3120.         /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
  3121.         matching, we have to use an XCLASS with extra data items. Caseless
  3122.         matching for characters > 127 is available only if UCP support is
  3123.         available. */
  3124.  
  3125. #ifdef SUPPORT_UTF8
  3126.         if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
  3127.           {
  3128.           class_utf8 = TRUE;
  3129.  
  3130.           /* With UCP support, we can find the other case equivalents of
  3131.           the relevant characters. There may be several ranges. Optimize how
  3132.           they fit with the basic range. */
  3133.  
  3134. #ifdef SUPPORT_UCP
  3135.           if ((options & PCRE_CASELESS) != 0)
  3136.             {
  3137.             unsigned int occ, ocd;
  3138.             unsigned int cc = c;
  3139.             unsigned int origd = d;
  3140.             while (get_othercase_range(&cc, origd, &occ, &ocd))
  3141.               {
  3142.               if (occ >= (unsigned int)c &&
  3143.                   ocd <= (unsigned int)d)
  3144.                 continue;                          /* Skip embedded ranges */
  3145.  
  3146.               if (occ < (unsigned int)c  &&
  3147.                   ocd >= (unsigned int)c - 1)      /* Extend the basic range */
  3148.                 {                                  /* if there is overlap,   */
  3149.                 c = occ;                           /* noting that if occ < c */
  3150.                 continue;                          /* we can't have ocd > d  */
  3151.                 }                                  /* because a subrange is  */
  3152.               if (ocd > (unsigned int)d &&
  3153.                   occ <= (unsigned int)d + 1)      /* always shorter than    */
  3154.                 {                                  /* the basic range.       */
  3155.                 d = ocd;
  3156.                 continue;
  3157.                 }
  3158.  
  3159.               if (occ == ocd)
  3160.                 {
  3161.                 *class_utf8data++ = XCL_SINGLE;
  3162.                 }
  3163.               else
  3164.                 {
  3165.                 *class_utf8data++ = XCL_RANGE;
  3166.                 class_utf8data += _pcre_ord2utf8(occ, class_utf8data);
  3167.                 }
  3168.               class_utf8data += _pcre_ord2utf8(ocd, class_utf8data);
  3169.               }
  3170.             }
  3171. #endif  /* SUPPORT_UCP */
  3172.  
  3173.           /* Now record the original range, possibly modified for UCP caseless
  3174.           overlapping ranges. */
  3175.  
  3176.           *class_utf8data++ = XCL_RANGE;
  3177.           class_utf8data += _pcre_ord2utf8(c, class_utf8data);
  3178.           class_utf8data += _pcre_ord2utf8(d, class_utf8data);
  3179.  
  3180.           /* With UCP support, we are done. Without UCP support, there is no
  3181.           caseless matching for UTF-8 characters > 127; we can use the bit map
  3182.           for the smaller ones. */
  3183.  
  3184. #ifdef SUPPORT_UCP
  3185.           continue;    /* With next character in the class */
  3186. #else
  3187.           if ((options & PCRE_CASELESS) == 0 || c > 127) continue;
  3188.  
  3189.           /* Adjust upper limit and fall through to set up the map */
  3190.  
  3191.           d = 127;
  3192.  
  3193. #endif  /* SUPPORT_UCP */
  3194.           }
  3195. #endif  /* SUPPORT_UTF8 */
  3196.  
  3197.         /* We use the bit map for all cases when not in UTF-8 mode; else
  3198.         ranges that lie entirely within 0-127 when there is UCP support; else
  3199.         for partial ranges without UCP support. */
  3200.  
  3201.         class_charcount += d - c + 1;
  3202.         class_lastchar = d;
  3203.  
  3204.         /* We can save a bit of time by skipping this in the pre-compile. */
  3205.  
  3206.         if (lengthptr == NULL) for (; c <= d; c++)
  3207.           {
  3208.           classbits[c/8] |= (1 << (c&7));
  3209.           if ((options & PCRE_CASELESS) != 0)
  3210.             {
  3211.             int uc = cd->fcc[c];           /* flip case */
  3212.             classbits[uc/8] |= (1 << (uc&7));
  3213.             }
  3214.           }
  3215.  
  3216.         continue;   /* Go get the next char in the class */
  3217.         }
  3218.  
  3219.       /* Handle a lone single character - we can get here for a normal
  3220.       non-escape char, or after \ that introduces a single character or for an
  3221.       apparent range that isn't. */
  3222.  
  3223.       LONE_SINGLE_CHARACTER:
  3224.  
  3225.       /* Handle a character that cannot go in the bit map */
  3226.  
  3227. #ifdef SUPPORT_UTF8
  3228.       if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
  3229.         {
  3230.         class_utf8 = TRUE;
  3231.         *class_utf8data++ = XCL_SINGLE;
  3232.         class_utf8data += _pcre_ord2utf8(c, class_utf8data);
  3233.  
  3234. #ifdef SUPPORT_UCP
  3235.         if ((options & PCRE_CASELESS) != 0)
  3236.           {
  3237.           unsigned int othercase;
  3238.           if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR)
  3239.             {
  3240.             *class_utf8data++ = XCL_SINGLE;
  3241.             class_utf8data += _pcre_ord2utf8(othercase, class_utf8data);
  3242.             }
  3243.           }
  3244. #endif  /* SUPPORT_UCP */
  3245.  
  3246.         }
  3247.       else
  3248. #endif  /* SUPPORT_UTF8 */
  3249.  
  3250.       /* Handle a single-byte character */
  3251.         {
  3252.         classbits[c/8] |= (1 << (c&7));
  3253.         if ((options & PCRE_CASELESS) != 0)
  3254.           {
  3255.           c = cd->fcc[c];   /* flip case */
  3256.           classbits[c/8] |= (1 << (c&7));
  3257.           }
  3258.         class_charcount++;
  3259.         class_lastchar = c;
  3260.         }
  3261.       }
  3262.  
  3263.     /* Loop until ']' reached. This "while" is the end of the "do" above. */
  3264.  
  3265.     while ((c = *(++ptr)) != 0 && (c != ']' || inescq));
  3266.  
  3267.     if (c == 0)                          /* Missing terminating ']' */
  3268.       {
  3269.       *errorcodeptr = ERR6;
  3270.       goto FAILED;
  3271.       }
  3272.  
  3273.  
  3274. /* This code has been disabled because it would mean that \s counts as
  3275. an explicit \r or \n reference, and that's not really what is wanted. Now
  3276. we set the flag only if there is a literal "\r" or "\n" in the class. */
  3277.  
  3278. #if 0
  3279.     /* Remember whether \r or \n are in this class */
  3280.  
  3281.     if (negate_class)
  3282.       {
  3283.       if ((classbits[1] & 0x24) != 0x24) cd->external_flags |= PCRE_HASCRORLF;
  3284.       }
  3285.     else
  3286.       {
  3287.       if ((classbits[1] & 0x24) != 0) cd->external_flags |= PCRE_HASCRORLF;
  3288.       }
  3289. #endif
  3290.  
  3291.  
  3292.     /* If class_charcount is 1, we saw precisely one character whose value is
  3293.     less than 256. As long as there were no characters >= 128 and there was no
  3294.     use of \p or \P, in other words, no use of any XCLASS features, we can
  3295.     optimize.
  3296.  
  3297.     In UTF-8 mode, we can optimize the negative case only if there were no
  3298.     characters >= 128 because OP_NOT and the related opcodes like OP_NOTSTAR
  3299.     operate on single-bytes only. This is an historical hangover. Maybe one day
  3300.     we can tidy these opcodes to handle multi-byte characters.
  3301.  
  3302.     The optimization throws away the bit map. We turn the item into a
  3303.     1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
  3304.     that OP_NOT does not support multibyte characters. In the positive case, it
  3305.     can cause firstbyte to be set. Otherwise, there can be no first char if
  3306.     this item is first, whatever repeat count may follow. In the case of
  3307.     reqbyte, save the previous value for reinstating. */
  3308.  
  3309. #ifdef SUPPORT_UTF8
  3310.     if (class_charcount == 1 && !class_utf8 &&
  3311.       (!utf8 || !negate_class || class_lastchar < 128))
  3312. #else
  3313.     if (class_charcount == 1)
  3314. #endif
  3315.       {
  3316.       zeroreqbyte = reqbyte;
  3317.  
  3318.       /* The OP_NOT opcode works on one-byte characters only. */
  3319.  
  3320.       if (negate_class)
  3321.         {
  3322.         if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  3323.         zerofirstbyte = firstbyte;
  3324.         *code++ = OP_NOT;
  3325.         *code++ = class_lastchar;
  3326.         break;
  3327.         }
  3328.  
  3329.       /* For a single, positive character, get the value into mcbuffer, and
  3330.       then we can handle this with the normal one-character code. */
  3331.  
  3332. #ifdef SUPPORT_UTF8
  3333.       if (utf8 && class_lastchar > 127)
  3334.         mclength = _pcre_ord2utf8(class_lastchar, mcbuffer);
  3335.       else
  3336. #endif
  3337.         {
  3338.         mcbuffer[0] = class_lastchar;
  3339.         mclength = 1;
  3340.         }
  3341.       goto ONE_CHAR;
  3342.       }       /* End of 1-char optimization */
  3343.  
  3344.     /* The general case - not the one-char optimization. If this is the first
  3345.     thing in the branch, there can be no first char setting, whatever the
  3346.     repeat count. Any reqbyte setting must remain unchanged after any kind of
  3347.     repeat. */
  3348.  
  3349.     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  3350.     zerofirstbyte = firstbyte;
  3351.     zeroreqbyte = reqbyte;
  3352.  
  3353.     /* If there are characters with values > 255, we have to compile an
  3354.     extended class, with its own opcode. If there are no characters < 256,
  3355.     we can omit the bitmap in the actual compiled code. */
  3356.  
  3357. #ifdef SUPPORT_UTF8
  3358.     if (class_utf8)
  3359.       {
  3360.       *class_utf8data++ = XCL_END;    /* Marks the end of extra data */
  3361.       *code++ = OP_XCLASS;
  3362.       code += LINK_SIZE;
  3363.       *code = negate_class? XCL_NOT : 0;
  3364.  
  3365.       /* If the map is required, move up the extra data to make room for it;
  3366.       otherwise just move the code pointer to the end of the extra data. */
  3367.  
  3368.       if (class_charcount > 0)
  3369.         {
  3370.         *code++ |= XCL_MAP;
  3371.         memmove(code + 32, code, class_utf8data - code);
  3372.         memcpy(code, classbits, 32);
  3373.         code = class_utf8data + 32;
  3374.         }
  3375.       else code = class_utf8data;
  3376.  
  3377.       /* Now fill in the complete length of the item */
  3378.  
  3379.       PUT(previous, 1, code - previous);
  3380.       break;   /* End of class handling */
  3381.       }
  3382. #endif
  3383.  
  3384.     /* If there are no characters > 255, negate the 32-byte map if necessary,
  3385.     and copy it into the code vector. If this is the first thing in the branch,
  3386.     there can be no first char setting, whatever the repeat count. Any reqbyte
  3387.     setting must remain unchanged after any kind of repeat. */
  3388.  
  3389.     if (negate_class)
  3390.       {
  3391.       *code++ = OP_NCLASS;
  3392.       if (lengthptr == NULL)    /* Save time in the pre-compile phase */
  3393.         for (c = 0; c < 32; c++) code[c] = ~classbits[c];
  3394.       }
  3395.     else
  3396.       {
  3397.       *code++ = OP_CLASS;
  3398.       memcpy(code, classbits, 32);
  3399.       }
  3400.     code += 32;
  3401.     break;
  3402.  
  3403.  
  3404.     /* ===================================================================*/
  3405.     /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
  3406.     has been tested above. */
  3407.  
  3408.     case '{':
  3409.     if (!is_quantifier) goto NORMAL_CHAR;
  3410.     ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorcodeptr);
  3411.     if (*errorcodeptr != 0) goto FAILED;
  3412.     goto REPEAT;
  3413.  
  3414.     case '*':
  3415.     repeat_min = 0;
  3416.     repeat_max = -1;
  3417.     goto REPEAT;
  3418.  
  3419.     case '+':
  3420.     repeat_min = 1;
  3421.     repeat_max = -1;
  3422.     goto REPEAT;
  3423.  
  3424.     case '?':
  3425.     repeat_min = 0;
  3426.     repeat_max = 1;
  3427.  
  3428.     REPEAT:
  3429.     if (previous == NULL)
  3430.       {
  3431.       *errorcodeptr = ERR9;
  3432.       goto FAILED;
  3433.       }
  3434.  
  3435.     if (repeat_min == 0)
  3436.       {
  3437.       firstbyte = zerofirstbyte;    /* Adjust for zero repeat */
  3438.       reqbyte = zeroreqbyte;        /* Ditto */
  3439.       }
  3440.  
  3441.     /* Remember whether this is a variable length repeat */
  3442.  
  3443.     reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
  3444.  
  3445.     op_type = 0;                    /* Default single-char op codes */
  3446.     possessive_quantifier = FALSE;  /* Default not possessive quantifier */
  3447.  
  3448.     /* Save start of previous item, in case we have to move it up to make space
  3449.     for an inserted OP_ONCE for the additional '+' extension. */
  3450.  
  3451.     tempcode = previous;
  3452.  
  3453.     /* If the next character is '+', we have a possessive quantifier. This
  3454.     implies greediness, whatever the setting of the PCRE_UNGREEDY option.
  3455.     If the next character is '?' this is a minimizing repeat, by default,
  3456.     but if PCRE_UNGREEDY is set, it works the other way round. We change the
  3457.     repeat type to the non-default. */
  3458.  
  3459.     if (ptr[1] == '+')
  3460.       {
  3461.       repeat_type = 0;                  /* Force greedy */
  3462.       possessive_quantifier = TRUE;
  3463.       ptr++;
  3464.       }
  3465.     else if (ptr[1] == '?')
  3466.       {
  3467.       repeat_type = greedy_non_default;
  3468.       ptr++;
  3469.       }
  3470.     else repeat_type = greedy_default;
  3471.  
  3472.     /* If previous was a character match, abolish the item and generate a
  3473.     repeat item instead. If a char item has a minumum of more than one, ensure
  3474.     that it is set in reqbyte - it might not be if a sequence such as x{3} is
  3475.     the first thing in a branch because the x will have gone into firstbyte
  3476.     instead.  */
  3477.  
  3478.     if (*previous == OP_CHAR || *previous == OP_CHARNC)
  3479.       {
  3480.       /* Deal with UTF-8 characters that take up more than one byte. It's
  3481.       easier to write this out separately than try to macrify it. Use c to
  3482.       hold the length of the character in bytes, plus 0x80 to flag that it's a
  3483.       length rather than a small character. */
  3484.  
  3485. #ifdef SUPPORT_UTF8
  3486.       if (utf8 && (code[-1] & 0x80) != 0)
  3487.         {
  3488.         uschar *lastchar = code - 1;
  3489.         while((*lastchar & 0xc0) == 0x80) lastchar--;
  3490.         c = code - lastchar;            /* Length of UTF-8 character */
  3491.         memcpy(utf8_char, lastchar, c); /* Save the char */
  3492.         c |= 0x80;                      /* Flag c as a length */
  3493.         }
  3494.       else
  3495. #endif
  3496.  
  3497.       /* Handle the case of a single byte - either with no UTF8 support, or
  3498.       with UTF-8 disabled, or for a UTF-8 character < 128. */
  3499.  
  3500.         {
  3501.         c = code[-1];
  3502.         if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
  3503.         }
  3504.  
  3505.       /* If the repetition is unlimited, it pays to see if the next thing on
  3506.       the line is something that cannot possibly match this character. If so,
  3507.       automatically possessifying this item gains some performance in the case
  3508.       where the match fails. */
  3509.  
  3510.       if (!possessive_quantifier &&
  3511.           repeat_max < 0 &&
  3512.           check_auto_possessive(*previous, c, utf8, utf8_char, ptr + 1,
  3513.             options, cd))
  3514.         {
  3515.         repeat_type = 0;    /* Force greedy */
  3516.         possessive_quantifier = TRUE;
  3517.         }
  3518.  
  3519.       goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
  3520.       }
  3521.  
  3522.     /* If previous was a single negated character ([^a] or similar), we use
  3523.     one of the special opcodes, replacing it. The code is shared with single-
  3524.     character repeats by setting opt_type to add a suitable offset into
  3525.     repeat_type. We can also test for auto-possessification. OP_NOT is
  3526.     currently used only for single-byte chars. */
  3527.  
  3528.     else if (*previous == OP_NOT)
  3529.       {
  3530.       op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
  3531.       c = previous[1];
  3532.       if (!possessive_quantifier &&
  3533.           repeat_max < 0 &&
  3534.           check_auto_possessive(OP_NOT, c, utf8, NULL, ptr + 1, options, cd))
  3535.         {
  3536.         repeat_type = 0;    /* Force greedy */
  3537.         possessive_quantifier = TRUE;
  3538.         }
  3539.       goto OUTPUT_SINGLE_REPEAT;
  3540.       }
  3541.  
  3542.     /* If previous was a character type match (\d or similar), abolish it and
  3543.     create a suitable repeat item. The code is shared with single-character
  3544.     repeats by setting op_type to add a suitable offset into repeat_type. Note
  3545.     the the Unicode property types will be present only when SUPPORT_UCP is
  3546.     defined, but we don't wrap the little bits of code here because it just
  3547.     makes it horribly messy. */
  3548.  
  3549.     else if (*previous < OP_EODN)
  3550.       {
  3551.       uschar *oldcode;
  3552.       int prop_type, prop_value;
  3553.       op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
  3554.       c = *previous;
  3555.  
  3556.       if (!possessive_quantifier &&
  3557.           repeat_max < 0 &&
  3558.           check_auto_possessive(c, 0, utf8, NULL, ptr + 1, options, cd))
  3559.         {
  3560.         repeat_type = 0;    /* Force greedy */
  3561.         possessive_quantifier = TRUE;
  3562.         }
  3563.  
  3564.       OUTPUT_SINGLE_REPEAT:
  3565.       if (*previous == OP_PROP || *previous == OP_NOTPROP)
  3566.         {
  3567.         prop_type = previous[1];
  3568.         prop_value = previous[2];
  3569.         }
  3570.       else prop_type = prop_value = -1;
  3571.  
  3572.       oldcode = code;
  3573.       code = previous;                  /* Usually overwrite previous item */
  3574.  
  3575.       /* If the maximum is zero then the minimum must also be zero; Perl allows
  3576.       this case, so we do too - by simply omitting the item altogether. */
  3577.  
  3578.       if (repeat_max == 0) goto END_REPEAT;
  3579.  
  3580.       /* All real repeats make it impossible to handle partial matching (maybe
  3581.       one day we will be able to remove this restriction). */
  3582.  
  3583.       if (repeat_max != 1) cd->external_flags |= PCRE_NOPARTIAL;
  3584.  
  3585.       /* Combine the op_type with the repeat_type */
  3586.  
  3587.       repeat_type += op_type;
  3588.  
  3589.       /* A minimum of zero is handled either as the special case * or ?, or as
  3590.       an UPTO, with the maximum given. */
  3591.  
  3592.       if (repeat_min == 0)
  3593.         {
  3594.         if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
  3595.           else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
  3596.         else
  3597.           {
  3598.           *code++ = OP_UPTO + repeat_type;
  3599.           PUT2INC(code, 0, repeat_max);
  3600.           }
  3601.         }
  3602.  
  3603.       /* A repeat minimum of 1 is optimized into some special cases. If the
  3604.       maximum is unlimited, we use OP_PLUS. Otherwise, the original item is
  3605.       left in place and, if the maximum is greater than 1, we use OP_UPTO with
  3606.       one less than the maximum. */
  3607.  
  3608.       else if (repeat_min == 1)
  3609.         {
  3610.         if (repeat_max == -1)
  3611.           *code++ = OP_PLUS + repeat_type;
  3612.         else
  3613.           {
  3614.           code = oldcode;                 /* leave previous item in place */
  3615.           if (repeat_max == 1) goto END_REPEAT;
  3616.           *code++ = OP_UPTO + repeat_type;
  3617.           PUT2INC(code, 0, repeat_max - 1);
  3618.           }
  3619.         }
  3620.  
  3621.       /* The case {n,n} is just an EXACT, while the general case {n,m} is
  3622.       handled as an EXACT followed by an UPTO. */
  3623.  
  3624.       else
  3625.         {
  3626.         *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
  3627.         PUT2INC(code, 0, repeat_min);
  3628.  
  3629.         /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
  3630.         we have to insert the character for the previous code. For a repeated
  3631.         Unicode property match, there are two extra bytes that define the
  3632.         required property. In UTF-8 mode, long characters have their length in
  3633.         c, with the 0x80 bit as a flag. */
  3634.  
  3635.         if (repeat_max < 0)
  3636.           {
  3637. #ifdef SUPPORT_UTF8
  3638.           if (utf8 && c >= 128)
  3639.             {
  3640.             memcpy(code, utf8_char, c & 7);
  3641.             code += c & 7;
  3642.             }
  3643.           else
  3644. #endif
  3645.             {
  3646.             *code++ = c;
  3647.             if (prop_type >= 0)
  3648.               {
  3649.               *code++ = prop_type;
  3650.               *code++ = prop_value;
  3651.               }
  3652.             }
  3653.           *code++ = OP_STAR + repeat_type;
  3654.           }
  3655.  
  3656.         /* Else insert an UPTO if the max is greater than the min, again
  3657.         preceded by the character, for the previously inserted code. If the
  3658.         UPTO is just for 1 instance, we can use QUERY instead. */
  3659.  
  3660.         else if (repeat_max != repeat_min)
  3661.           {
  3662. #ifdef SUPPORT_UTF8
  3663.           if (utf8 && c >= 128)
  3664.             {
  3665.             memcpy(code, utf8_char, c & 7);
  3666.             code += c & 7;
  3667.             }
  3668.           else
  3669. #endif
  3670.           *code++ = c;
  3671.           if (prop_type >= 0)
  3672.             {
  3673.             *code++ = prop_type;
  3674.             *code++ = prop_value;
  3675.             }
  3676.           repeat_max -= repeat_min;
  3677.  
  3678.           if (repeat_max == 1)
  3679.             {
  3680.             *code++ = OP_QUERY + repeat_type;
  3681.             }
  3682.           else
  3683.             {
  3684.             *code++ = OP_UPTO + repeat_type;
  3685.             PUT2INC(code, 0, repeat_max);
  3686.             }
  3687.           }
  3688.         }
  3689.  
  3690.       /* The character or character type itself comes last in all cases. */
  3691.  
  3692. #ifdef SUPPORT_UTF8
  3693.       if (utf8 && c >= 128)
  3694.         {
  3695.         memcpy(code, utf8_char, c & 7);
  3696.         code += c & 7;
  3697.         }
  3698.       else
  3699. #endif
  3700.       *code++ = c;
  3701.  
  3702.       /* For a repeated Unicode property match, there are two extra bytes that
  3703.       define the required property. */
  3704.  
  3705. #ifdef SUPPORT_UCP
  3706.       if (prop_type >= 0)
  3707.         {
  3708.         *code++ = prop_type;
  3709.         *code++ = prop_value;
  3710.         }
  3711. #endif
  3712.       }
  3713.  
  3714.     /* If previous was a character class or a back reference, we put the repeat
  3715.     stuff after it, but just skip the item if the repeat was {0,0}. */
  3716.  
  3717.     else if (*previous == OP_CLASS ||
  3718.              *previous == OP_NCLASS ||
  3719. #ifdef SUPPORT_UTF8
  3720.              *previous == OP_XCLASS ||
  3721. #endif
  3722.              *previous == OP_REF)
  3723.       {
  3724.       if (repeat_max == 0)
  3725.         {
  3726.         code = previous;
  3727.         goto END_REPEAT;
  3728.         }
  3729.  
  3730.       /* All real repeats make it impossible to handle partial matching (maybe
  3731.       one day we will be able to remove this restriction). */
  3732.  
  3733.       if (repeat_max != 1) cd->external_flags |= PCRE_NOPARTIAL;
  3734.  
  3735.       if (repeat_min == 0 && repeat_max == -1)
  3736.         *code++ = OP_CRSTAR + repeat_type;
  3737.       else if (repeat_min == 1 && repeat_max == -1)
  3738.         *code++ = OP_CRPLUS + repeat_type;
  3739.       else if (repeat_min == 0 && repeat_max == 1)
  3740.         *code++ = OP_CRQUERY + repeat_type;
  3741.       else
  3742.         {
  3743.         *code++ = OP_CRRANGE + repeat_type;
  3744.         PUT2INC(code, 0, repeat_min);
  3745.         if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
  3746.         PUT2INC(code, 0, repeat_max);
  3747.         }
  3748.       }
  3749.  
  3750.     /* If previous was a bracket group, we may have to replicate it in certain
  3751.     cases. */
  3752.  
  3753.     else if (*previous == OP_BRA  || *previous == OP_CBRA ||
  3754.              *previous == OP_ONCE || *previous == OP_COND)
  3755.       {
  3756.       register int i;
  3757.       int ketoffset = 0;
  3758.       int len = code - previous;
  3759.       uschar *bralink = NULL;
  3760.  
  3761.       /* Repeating a DEFINE group is pointless */
  3762.  
  3763.       if (*previous == OP_COND && previous[LINK_SIZE+1] == OP_DEF)
  3764.         {
  3765.         *errorcodeptr = ERR55;
  3766.         goto FAILED;
  3767.         }
  3768.  
  3769.       /* If the maximum repeat count is unlimited, find the end of the bracket
  3770.       by scanning through from the start, and compute the offset back to it
  3771.       from the current code pointer. There may be an OP_OPT setting following
  3772.       the final KET, so we can't find the end just by going back from the code
  3773.       pointer. */
  3774.  
  3775.       if (repeat_max == -1)
  3776.         {
  3777.         register uschar *ket = previous;
  3778.         do ket += GET(ket, 1); while (*ket != OP_KET);
  3779.         ketoffset = code - ket;
  3780.         }
  3781.  
  3782.       /* The case of a zero minimum is special because of the need to stick
  3783.       OP_BRAZERO in front of it, and because the group appears once in the
  3784.       data, whereas in other cases it appears the minimum number of times. For
  3785.       this reason, it is simplest to treat this case separately, as otherwise
  3786.       the code gets far too messy. There are several special subcases when the
  3787.       minimum is zero. */
  3788.  
  3789.       if (repeat_min == 0)
  3790.         {
  3791.         /* If the maximum is also zero, we just omit the group from the output
  3792.         altogether. */
  3793.  
  3794.         if (repeat_max == 0)
  3795.           {
  3796.           code = previous;
  3797.           goto END_REPEAT;
  3798.           }
  3799.  
  3800.         /* If the maximum is 1 or unlimited, we just have to stick in the
  3801.         BRAZERO and do no more at this point. However, we do need to adjust
  3802.         any OP_RECURSE calls inside the group that refer to the group itself or
  3803.         any internal or forward referenced group, because the offset is from
  3804.         the start of the whole regex. Temporarily terminate the pattern while
  3805.         doing this. */
  3806.  
  3807.         if (repeat_max <= 1)
  3808.           {
  3809.           *code = OP_END;
  3810.           adjust_recurse(previous, 1, utf8, cd, save_hwm);
  3811.           memmove(previous+1, previous, len);
  3812.           code++;
  3813.           *previous++ = OP_BRAZERO + repeat_type;
  3814.           }
  3815.  
  3816.         /* If the maximum is greater than 1 and limited, we have to replicate
  3817.         in a nested fashion, sticking OP_BRAZERO before each set of brackets.
  3818.         The first one has to be handled carefully because it's the original
  3819.         copy, which has to be moved up. The remainder can be handled by code
  3820.         that is common with the non-zero minimum case below. We have to
  3821.         adjust the value or repeat_max, since one less copy is required. Once
  3822.         again, we may have to adjust any OP_RECURSE calls inside the group. */
  3823.  
  3824.         else
  3825.           {
  3826.           int offset;
  3827.           *code = OP_END;
  3828.           adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd, save_hwm);
  3829.           memmove(previous + 2 + LINK_SIZE, previous, len);
  3830.           code += 2 + LINK_SIZE;
  3831.           *previous++ = OP_BRAZERO + repeat_type;
  3832.           *previous++ = OP_BRA;
  3833.  
  3834.           /* We chain together the bracket offset fields that have to be
  3835.           filled in later when the ends of the brackets are reached. */
  3836.  
  3837.           offset = (bralink == NULL)? 0 : previous - bralink;
  3838.           bralink = previous;
  3839.           PUTINC(previous, 0, offset);
  3840.           }
  3841.  
  3842.         repeat_max--;
  3843.         }
  3844.  
  3845.       /* If the minimum is greater than zero, replicate the group as many
  3846.       times as necessary, and adjust the maximum to the number of subsequent
  3847.       copies that we need. If we set a first char from the group, and didn't
  3848.       set a required char, copy the latter from the former. If there are any
  3849.       forward reference subroutine calls in the group, there will be entries on
  3850.       the workspace list; replicate these with an appropriate increment. */
  3851.  
  3852.       else
  3853.         {
  3854.         if (repeat_min > 1)
  3855.           {
  3856.           /* In the pre-compile phase, we don't actually do the replication. We
  3857.           just adjust the length as if we had. Do some paranoid checks for
  3858.           potential integer overflow. */
  3859.  
  3860.           if (lengthptr != NULL)
  3861.             {
  3862.             int delta = (repeat_min - 1)*length_prevgroup;
  3863.             if ((double)(repeat_min - 1)*(double)length_prevgroup >
  3864.                                                             (double)INT_MAX ||
  3865.                 OFLOW_MAX - *lengthptr < delta)
  3866.               {
  3867.               *errorcodeptr = ERR20;
  3868.               goto FAILED;
  3869.               }
  3870.             *lengthptr += delta;
  3871.             }
  3872.  
  3873.           /* This is compiling for real */
  3874.  
  3875.           else
  3876.             {
  3877.             if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte;
  3878.             for (i = 1; i < repeat_min; i++)
  3879.               {
  3880.               uschar *hc;
  3881.               uschar *this_hwm = cd->hwm;
  3882.               memcpy(code, previous, len);
  3883.               for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE)
  3884.                 {
  3885.                 PUT(cd->hwm, 0, GET(hc, 0) + len);
  3886.                 cd->hwm += LINK_SIZE;
  3887.                 }
  3888.               save_hwm = this_hwm;
  3889.               code += len;
  3890.               }
  3891.             }
  3892.           }
  3893.  
  3894.         if (repeat_max > 0) repeat_max -= repeat_min;
  3895.         }
  3896.  
  3897.       /* This code is common to both the zero and non-zero minimum cases. If
  3898.       the maximum is limited, it replicates the group in a nested fashion,
  3899.       remembering the bracket starts on a stack. In the case of a zero minimum,
  3900.       the first one was set up above. In all cases the repeat_max now specifies
  3901.       the number of additional copies needed. Again, we must remember to
  3902.       replicate entries on the forward reference list. */
  3903.  
  3904.       if (repeat_max >= 0)
  3905.         {
  3906.         /* In the pre-compile phase, we don't actually do the replication. We
  3907.         just adjust the length as if we had. For each repetition we must add 1
  3908.         to the length for BRAZERO and for all but the last repetition we must
  3909.         add 2 + 2*LINKSIZE to allow for the nesting that occurs. Do some
  3910.         paranoid checks to avoid integer overflow. */
  3911.  
  3912.         if (lengthptr != NULL && repeat_max > 0)
  3913.           {
  3914.           int delta = repeat_max * (length_prevgroup + 1 + 2 + 2*LINK_SIZE) -
  3915.                       2 - 2*LINK_SIZE;   /* Last one doesn't nest */
  3916.           if ((double)repeat_max *
  3917.                 (double)(length_prevgroup + 1 + 2 + 2*LINK_SIZE)
  3918.                   > (double)INT_MAX ||
  3919.               OFLOW_MAX - *lengthptr < delta)
  3920.             {
  3921.             *errorcodeptr = ERR20;
  3922.             goto FAILED;
  3923.             }
  3924.           *lengthptr += delta;
  3925.           }
  3926.  
  3927.         /* This is compiling for real */
  3928.  
  3929.         else for (i = repeat_max - 1; i >= 0; i--)
  3930.           {
  3931.           uschar *hc;
  3932.           uschar *this_hwm = cd->hwm;
  3933.  
  3934.           *code++ = OP_BRAZERO + repeat_type;
  3935.  
  3936.           /* All but the final copy start a new nesting, maintaining the
  3937.           chain of brackets outstanding. */
  3938.  
  3939.           if (i != 0)
  3940.             {
  3941.             int offset;
  3942.             *code++ = OP_BRA;
  3943.             offset = (bralink == NULL)? 0 : code - bralink;
  3944.             bralink = code;
  3945.             PUTINC(code, 0, offset);
  3946.             }
  3947.  
  3948.           memcpy(code, previous, len);
  3949.           for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE)
  3950.             {
  3951.             PUT(cd->hwm, 0, GET(hc, 0) + len + ((i != 0)? 2+LINK_SIZE : 1));
  3952.             cd->hwm += LINK_SIZE;
  3953.             }
  3954.           save_hwm = this_hwm;
  3955.           code += len;
  3956.           }
  3957.  
  3958.         /* Now chain through the pending brackets, and fill in their length
  3959.         fields (which are holding the chain links pro tem). */
  3960.  
  3961.         while (bralink != NULL)
  3962.           {
  3963.           int oldlinkoffset;
  3964.           int offset = code - bralink + 1;
  3965.           uschar *bra = code - offset;
  3966.           oldlinkoffset = GET(bra, 1);
  3967.           bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
  3968.           *code++ = OP_KET;
  3969.           PUTINC(code, 0, offset);
  3970.           PUT(bra, 1, offset);
  3971.           }
  3972.         }
  3973.  
  3974.       /* If the maximum is unlimited, set a repeater in the final copy. We
  3975.       can't just offset backwards from the current code point, because we
  3976.       don't know if there's been an options resetting after the ket. The
  3977.       correct offset was computed above.
  3978.  
  3979.       Then, when we are doing the actual compile phase, check to see whether
  3980.       this group is a non-atomic one that could match an empty string. If so,
  3981.       convert the initial operator to the S form (e.g. OP_BRA -> OP_SBRA) so
  3982.       that runtime checking can be done. [This check is also applied to
  3983.       atomic groups at runtime, but in a different way.] */
  3984.  
  3985.       else
  3986.         {
  3987.         uschar *ketcode = code - ketoffset;
  3988.         uschar *bracode = ketcode - GET(ketcode, 1);
  3989.         *ketcode = OP_KETRMAX + repeat_type;
  3990.         if (lengthptr == NULL && *bracode != OP_ONCE)
  3991.           {
  3992.           uschar *scode = bracode;
  3993.           do
  3994.             {
  3995.             if (could_be_empty_branch(scode, ketcode, utf8))
  3996.               {
  3997.               *bracode += OP_SBRA - OP_BRA;
  3998.               break;
  3999.               }
  4000.             scode += GET(scode, 1);
  4001.             }
  4002.           while (*scode == OP_ALT);
  4003.           }
  4004.         }
  4005.       }
  4006.  
  4007.     /* Else there's some kind of shambles */
  4008.  
  4009.     else
  4010.       {
  4011.       *errorcodeptr = ERR11;
  4012.       goto FAILED;
  4013.       }
  4014.  
  4015.     /* If the character following a repeat is '+', or if certain optimization
  4016.     tests above succeeded, possessive_quantifier is TRUE. For some of the
  4017.     simpler opcodes, there is an special alternative opcode for this. For
  4018.     anything else, we wrap the entire repeated item inside OP_ONCE brackets.
  4019.     The '+' notation is just syntactic sugar, taken from Sun's Java package,
  4020.     but the special opcodes can optimize it a bit. The repeated item starts at
  4021.     tempcode, not at previous, which might be the first part of a string whose
  4022.     (former) last char we repeated.
  4023.  
  4024.     Possessifying an 'exact' quantifier has no effect, so we can ignore it. But
  4025.     an 'upto' may follow. We skip over an 'exact' item, and then test the
  4026.     length of what remains before proceeding. */
  4027.  
  4028.     if (possessive_quantifier)
  4029.       {
  4030.       int len;
  4031.       if (*tempcode == OP_EXACT || *tempcode == OP_TYPEEXACT ||
  4032.           *tempcode == OP_NOTEXACT)
  4033.         tempcode += _pcre_OP_lengths[*tempcode];
  4034.       len = code - tempcode;
  4035.       if (len > 0) switch (*tempcode)
  4036.         {
  4037.         case OP_STAR:  *tempcode = OP_POSSTAR; break;
  4038.         case OP_PLUS:  *tempcode = OP_POSPLUS; break;
  4039.         case OP_QUERY: *tempcode = OP_POSQUERY; break;
  4040.         case OP_UPTO:  *tempcode = OP_POSUPTO; break;
  4041.  
  4042.         case OP_TYPESTAR:  *tempcode = OP_TYPEPOSSTAR; break;
  4043.         case OP_TYPEPLUS:  *tempcode = OP_TYPEPOSPLUS; break;
  4044.         case OP_TYPEQUERY: *tempcode = OP_TYPEPOSQUERY; break;
  4045.         case OP_TYPEUPTO:  *tempcode = OP_TYPEPOSUPTO; break;
  4046.  
  4047.         case OP_NOTSTAR:  *tempcode = OP_NOTPOSSTAR; break;
  4048.         case OP_NOTPLUS:  *tempcode = OP_NOTPOSPLUS; break;
  4049.         case OP_NOTQUERY: *tempcode = OP_NOTPOSQUERY; break;
  4050.         case OP_NOTUPTO:  *tempcode = OP_NOTPOSUPTO; break;
  4051.  
  4052.         default:
  4053.         memmove(tempcode + 1+LINK_SIZE, tempcode, len);
  4054.         code += 1 + LINK_SIZE;
  4055.         len += 1 + LINK_SIZE;
  4056.         tempcode[0] = OP_ONCE;
  4057.         *code++ = OP_KET;
  4058.         PUTINC(code, 0, len);
  4059.         PUT(tempcode, 1, len);
  4060.         break;
  4061.         }
  4062.       }
  4063.  
  4064.     /* In all case we no longer have a previous item. We also set the
  4065.     "follows varying string" flag for subsequently encountered reqbytes if
  4066.     it isn't already set and we have just passed a varying length item. */
  4067.  
  4068.     END_REPEAT:
  4069.     previous = NULL;
  4070.     cd->req_varyopt |= reqvary;
  4071.     break;
  4072.  
  4073.  
  4074.     /* ===================================================================*/
  4075.     /* Start of nested parenthesized sub-expression, or comment or lookahead or
  4076.     lookbehind or option setting or condition or all the other extended
  4077.     parenthesis forms.  */
  4078.  
  4079.     case '(':
  4080.     newoptions = options;
  4081.     skipbytes = 0;
  4082.     bravalue = OP_CBRA;
  4083.     save_hwm = cd->hwm;
  4084.     reset_bracount = FALSE;
  4085.  
  4086.     /* First deal with various "verbs" that can be introduced by '*'. */
  4087.  
  4088.     if (*(++ptr) == '*' && (cd->ctypes[ptr[1]] & ctype_letter) != 0)
  4089.       {
  4090.       int i, namelen;
  4091.       const char *vn = verbnames;
  4092.       const uschar *name = ++ptr;
  4093.       previous = NULL;
  4094.       while ((cd->ctypes[*++ptr] & ctype_letter) != 0);
  4095.       if (*ptr == ':')
  4096.         {
  4097.         *errorcodeptr = ERR59;   /* Not supported */
  4098.         goto FAILED;
  4099.         }
  4100.       if (*ptr != ')')
  4101.         {
  4102.         *errorcodeptr = ERR60;
  4103.         goto FAILED;
  4104.         }
  4105.       namelen = ptr - name;
  4106.       for (i = 0; i < verbcount; i++)
  4107.         {
  4108.         if (namelen == verbs[i].len &&
  4109.             strncmp((char *)name, vn, namelen) == 0)
  4110.           {
  4111.           *code = verbs[i].op;
  4112.           if (*code++ == OP_ACCEPT) cd->had_accept = TRUE;
  4113.           break;
  4114.           }
  4115.         vn += verbs[i].len + 1;
  4116.         }
  4117.       if (i < verbcount) continue;
  4118.       *errorcodeptr = ERR60;
  4119.       goto FAILED;
  4120.       }
  4121.  
  4122.     /* Deal with the extended parentheses; all are introduced by '?', and the
  4123.     appearance of any of them means that this is not a capturing group. */
  4124.  
  4125.     else if (*ptr == '?')
  4126.       {
  4127.       int i, set, unset, namelen;
  4128.       int *optset;
  4129.       const uschar *name;
  4130.       uschar *slot;
  4131.  
  4132.       switch (*(++ptr))
  4133.         {
  4134.         case '#':                 /* Comment; skip to ket */
  4135.         ptr++;
  4136.         while (*ptr != 0 && *ptr != ')') ptr++;
  4137.         if (*ptr == 0)
  4138.           {
  4139.           *errorcodeptr = ERR18;
  4140.           goto FAILED;
  4141.           }
  4142.         continue;
  4143.  
  4144.  
  4145.         /* ------------------------------------------------------------ */
  4146.         case '|':                 /* Reset capture count for each branch */
  4147.         reset_bracount = TRUE;
  4148.         /* Fall through */
  4149.  
  4150.         /* ------------------------------------------------------------ */
  4151.         case ':':                 /* Non-capturing bracket */
  4152.         bravalue = OP_BRA;
  4153.         ptr++;
  4154.         break;
  4155.  
  4156.  
  4157.         /* ------------------------------------------------------------ */
  4158.         case '(':
  4159.         bravalue = OP_COND;       /* Conditional group */
  4160.  
  4161.         /* A condition can be an assertion, a number (referring to a numbered
  4162.         group), a name (referring to a named group), or 'R', referring to
  4163.         recursion. R<digits> and R&name are also permitted for recursion tests.
  4164.  
  4165.         There are several syntaxes for testing a named group: (?(name)) is used
  4166.         by Python; Perl 5.10 onwards uses (?(<name>) or (?('name')).
  4167.  
  4168.         There are two unfortunate ambiguities, caused by history. (a) 'R' can
  4169.         be the recursive thing or the name 'R' (and similarly for 'R' followed
  4170.         by digits), and (b) a number could be a name that consists of digits.
  4171.         In both cases, we look for a name first; if not found, we try the other
  4172.         cases. */
  4173.  
  4174.         /* For conditions that are assertions, check the syntax, and then exit
  4175.         the switch. This will take control down to where bracketed groups,
  4176.         including assertions, are processed. */
  4177.  
  4178.         if (ptr[1] == '?' && (ptr[2] == '=' || ptr[2] == '!' || ptr[2] == '<'))
  4179.           break;
  4180.  
  4181.         /* Most other conditions use OP_CREF (a couple change to OP_RREF
  4182.         below), and all need to skip 3 bytes at the start of the group. */
  4183.  
  4184.         code[1+LINK_SIZE] = OP_CREF;
  4185.         skipbytes = 3;
  4186.         refsign = -1;
  4187.  
  4188.         /* Check for a test for recursion in a named group. */
  4189.  
  4190.         if (ptr[1] == 'R' && ptr[2] == '&')
  4191.           {
  4192.           terminator = -1;
  4193.           ptr += 2;
  4194.           code[1+LINK_SIZE] = OP_RREF;    /* Change the type of test */
  4195.           }
  4196.  
  4197.         /* Check for a test for a named group's having been set, using the Perl
  4198.         syntax (?(<name>) or (?('name') */
  4199.  
  4200.         else if (ptr[1] == '<')
  4201.           {
  4202.           terminator = '>';
  4203.           ptr++;
  4204.           }
  4205.         else if (ptr[1] == '\'')
  4206.           {
  4207.           terminator = '\'';
  4208.           ptr++;
  4209.           }
  4210.         else
  4211.           {
  4212.           terminator = 0;
  4213.           if (ptr[1] == '-' || ptr[1] == '+') refsign = *(++ptr);
  4214.           }
  4215.  
  4216.         /* We now expect to read a name; any thing else is an error */
  4217.  
  4218.         if ((cd->ctypes[ptr[1]] & ctype_word) == 0)
  4219.           {
  4220.           ptr += 1;  /* To get the right offset */
  4221.           *errorcodeptr = ERR28;
  4222.           goto FAILED;
  4223.           }
  4224.  
  4225.         /* Read the name, but also get it as a number if it's all digits */
  4226.  
  4227.         recno = 0;
  4228.         name = ++ptr;
  4229.         while ((cd->ctypes[*ptr] & ctype_word) != 0)
  4230.           {
  4231.           if (recno >= 0)
  4232.             recno = ((digitab[*ptr] & ctype_digit) != 0)?
  4233.               recno * 10 + *ptr - '0' : -1;
  4234.           ptr++;
  4235.           }
  4236.         namelen = ptr - name;
  4237.  
  4238.         if ((terminator > 0 && *ptr++ != terminator) || *ptr++ != ')')
  4239.           {
  4240.           ptr--;      /* Error offset */
  4241.           *errorcodeptr = ERR26;
  4242.           goto FAILED;
  4243.           }
  4244.  
  4245.         /* Do no further checking in the pre-compile phase. */
  4246.  
  4247.         if (lengthptr != NULL) break;
  4248.  
  4249.         /* In the real compile we do the work of looking for the actual
  4250.         reference. If the string started with "+" or "-" we require the rest to
  4251.         be digits, in which case recno will be set. */
  4252.  
  4253.         if (refsign > 0)
  4254.           {
  4255.           if (recno <= 0)
  4256.             {
  4257.             *errorcodeptr = ERR58;
  4258.             goto FAILED;
  4259.             }
  4260.           if (refsign == '-')
  4261.             {
  4262.             recno = cd->bracount - recno + 1;
  4263.             if (recno <= 0)
  4264.               {
  4265.               *errorcodeptr = ERR15;
  4266.               goto FAILED;
  4267.               }
  4268.             }
  4269.           else recno += cd->bracount;
  4270.           PUT2(code, 2+LINK_SIZE, recno);
  4271.           break;
  4272.           }
  4273.  
  4274.         /* Otherwise (did not start with "+" or "-"), start by looking for the
  4275.         name. */
  4276.  
  4277.         slot = cd->name_table;
  4278.         for (i = 0; i < cd->names_found; i++)
  4279.           {
  4280.           if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
  4281.           slot += cd->name_entry_size;
  4282.           }
  4283.  
  4284.         /* Found a previous named subpattern */
  4285.  
  4286.         if (i < cd->names_found)
  4287.           {
  4288.           recno = GET2(slot, 0);
  4289.           PUT2(code, 2+LINK_SIZE, recno);
  4290.           }
  4291.  
  4292.         /* Search the pattern for a forward reference */
  4293.  
  4294.         else if ((i = find_parens(ptr, cd->bracount, name, namelen,
  4295.                         (options & PCRE_EXTENDED) != 0)) > 0)
  4296.           {
  4297.           PUT2(code, 2+LINK_SIZE, i);
  4298.           }
  4299.  
  4300.         /* If terminator == 0 it means that the name followed directly after
  4301.         the opening parenthesis [e.g. (?(abc)...] and in this case there are
  4302.         some further alternatives to try. For the cases where terminator != 0
  4303.         [things like (?(<name>... or (?('name')... or (?(R&name)... ] we have
  4304.         now checked all the possibilities, so give an error. */
  4305.  
  4306.         else if (terminator != 0)
  4307.           {
  4308.           *errorcodeptr = ERR15;
  4309.           goto FAILED;
  4310.           }
  4311.  
  4312.         /* Check for (?(R) for recursion. Allow digits after R to specify a
  4313.         specific group number. */
  4314.  
  4315.         else if (*name == 'R')
  4316.           {
  4317.           recno = 0;
  4318.           for (i = 1; i < namelen; i++)
  4319.             {
  4320.             if ((digitab[name[i]] & ctype_digit) == 0)
  4321.               {
  4322.               *errorcodeptr = ERR15;
  4323.               goto FAILED;
  4324.               }
  4325.             recno = recno * 10 + name[i] - '0';
  4326.             }
  4327.           if (recno == 0) recno = RREF_ANY;
  4328.           code[1+LINK_SIZE] = OP_RREF;      /* Change test type */
  4329.           PUT2(code, 2+LINK_SIZE, recno);
  4330.           }
  4331.  
  4332.         /* Similarly, check for the (?(DEFINE) "condition", which is always
  4333.         false. */
  4334.  
  4335.         else if (namelen == 6 && strncmp((char *)name, "DEFINE", 6) == 0)
  4336.           {
  4337.           code[1+LINK_SIZE] = OP_DEF;
  4338.           skipbytes = 1;
  4339.           }
  4340.  
  4341.         /* Check for the "name" actually being a subpattern number. */
  4342.  
  4343.         else if (recno > 0)
  4344.           {
  4345.           PUT2(code, 2+LINK_SIZE, recno);
  4346.           }
  4347.  
  4348.         /* Either an unidentified subpattern, or a reference to (?(0) */
  4349.  
  4350.         else
  4351.           {
  4352.           *errorcodeptr = (recno == 0)? ERR35: ERR15;
  4353.           goto FAILED;
  4354.           }
  4355.         break;
  4356.  
  4357.  
  4358.         /* ------------------------------------------------------------ */
  4359.         case '=':                 /* Positive lookahead */
  4360.         bravalue = OP_ASSERT;
  4361.         ptr++;
  4362.         break;
  4363.  
  4364.  
  4365.         /* ------------------------------------------------------------ */
  4366.         case '!':                 /* Negative lookahead */
  4367.         ptr++;
  4368.         if (*ptr == ')')          /* Optimize (?!) */
  4369.           {
  4370.           *code++ = OP_FAIL;
  4371.           previous = NULL;
  4372.           continue;
  4373.           }
  4374.         bravalue = OP_ASSERT_NOT;
  4375.         break;
  4376.  
  4377.  
  4378.         /* ------------------------------------------------------------ */
  4379.         case '<':                 /* Lookbehind or named define */
  4380.         switch (ptr[1])
  4381.           {
  4382.           case '=':               /* Positive lookbehind */
  4383.           bravalue = OP_ASSERTBACK;
  4384.           ptr += 2;
  4385.           break;
  4386.  
  4387.           case '!':               /* Negative lookbehind */
  4388.           bravalue = OP_ASSERTBACK_NOT;
  4389.           ptr += 2;
  4390.           break;
  4391.  
  4392.           default:                /* Could be name define, else bad */
  4393.           if ((cd->ctypes[ptr[1]] & ctype_word) != 0) goto DEFINE_NAME;
  4394.           ptr++;                  /* Correct offset for error */
  4395.           *errorcodeptr = ERR24;
  4396.           goto FAILED;
  4397.           }
  4398.         break;
  4399.  
  4400.  
  4401.         /* ------------------------------------------------------------ */
  4402.         case '>':                 /* One-time brackets */
  4403.         bravalue = OP_ONCE;
  4404.         ptr++;
  4405.         break;
  4406.  
  4407.  
  4408.         /* ------------------------------------------------------------ */
  4409. #ifdef SUPPORT_CALLOUT  /* AutoHotkey: Omit the callout feature from the code until it's needed. */
  4410.         case 'C':                 /* Callout - may be followed by digits; */
  4411.         previous_callout = code;  /* Save for later completion */
  4412.         after_manual_callout = 1; /* Skip one item before completing */
  4413.         *code++ = OP_CALLOUT;
  4414.           {
  4415.           int n = 0;
  4416.           while ((digitab[*(++ptr)] & ctype_digit) != 0)
  4417.             n = n * 10 + *ptr - '0';
  4418.           if (*ptr != ')')
  4419.             {
  4420.             *errorcodeptr = ERR39;
  4421.             goto FAILED;
  4422.             }
  4423.           if (n > 255)
  4424.             {
  4425.             *errorcodeptr = ERR38;
  4426.             goto FAILED;
  4427.             }
  4428.           *code++ = n;
  4429.           PUT(code, 0, ptr - cd->start_pattern + 1);  /* Pattern offset */
  4430.           PUT(code, LINK_SIZE, 0);                    /* Default length */
  4431.           code += 2 * LINK_SIZE;
  4432.           }
  4433.         previous = NULL;
  4434.         continue;
  4435. #endif /* AutoHotkey */
  4436.  
  4437.  
  4438.         /* ------------------------------------------------------------ */
  4439.         case 'P':                 /* Python-style named subpattern handling */
  4440.         if (*(++ptr) == '=' || *ptr == '>')  /* Reference or recursion */
  4441.           {
  4442.           is_recurse = *ptr == '>';
  4443.           terminator = ')';
  4444.           goto NAMED_REF_OR_RECURSE;
  4445.           }
  4446.         else if (*ptr != '<')    /* Test for Python-style definition */
  4447.           {
  4448.           *errorcodeptr = ERR41;
  4449.           goto FAILED;
  4450.           }
  4451.         /* Fall through to handle (?P< as (?< is handled */
  4452.  
  4453.  
  4454.         /* ------------------------------------------------------------ */
  4455.         DEFINE_NAME:    /* Come here from (?< handling */
  4456.         case '\'':
  4457.           {
  4458.           terminator = (*ptr == '<')? '>' : '\'';
  4459.           name = ++ptr;
  4460.  
  4461.           while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
  4462.           namelen = ptr - name;
  4463.  
  4464.           /* In the pre-compile phase, just do a syntax check. */
  4465.  
  4466.           if (lengthptr != NULL)
  4467.             {
  4468.             if (*ptr != terminator)
  4469.               {
  4470.               *errorcodeptr = ERR42;
  4471.               goto FAILED;
  4472.               }
  4473.             if (cd->names_found >= MAX_NAME_COUNT)
  4474.               {
  4475.               *errorcodeptr = ERR49;
  4476.               goto FAILED;
  4477.               }
  4478.             if (namelen + 3 > cd->name_entry_size)
  4479.               {
  4480.               cd->name_entry_size = namelen + 3;
  4481.               if (namelen > MAX_NAME_SIZE)
  4482.                 {
  4483.                 *errorcodeptr = ERR48;
  4484.                 goto FAILED;
  4485.                 }
  4486.               }
  4487.             }
  4488.  
  4489.           /* In the real compile, create the entry in the table */
  4490.  
  4491.           else
  4492.             {
  4493.             slot = cd->name_table;
  4494.             for (i = 0; i < cd->names_found; i++)
  4495.               {
  4496.               int crc = memcmp(name, slot+2, namelen);
  4497.               if (crc == 0)
  4498.                 {
  4499.                 if (slot[2+namelen] == 0)
  4500.                   {
  4501.                   if ((options & PCRE_DUPNAMES) == 0)
  4502.                     {
  4503.                     *errorcodeptr = ERR43;
  4504.                     goto FAILED;
  4505.                     }
  4506.                   }
  4507.                 else crc = -1;      /* Current name is substring */
  4508.                 }
  4509.               if (crc < 0)
  4510.                 {
  4511.                 memmove(slot + cd->name_entry_size, slot,
  4512.                   (cd->names_found - i) * cd->name_entry_size);
  4513.                 break;
  4514.                 }
  4515.               slot += cd->name_entry_size;
  4516.               }
  4517.  
  4518.             PUT2(slot, 0, cd->bracount + 1);
  4519.             memcpy(slot + 2, name, namelen);
  4520.             slot[2+namelen] = 0;
  4521.             }
  4522.           }
  4523.  
  4524.         /* In both cases, count the number of names we've encountered. */
  4525.  
  4526.         ptr++;                    /* Move past > or ' */
  4527.         cd->names_found++;
  4528.         goto NUMBERED_GROUP;
  4529.  
  4530.  
  4531.         /* ------------------------------------------------------------ */
  4532.         case '&':                 /* Perl recursion/subroutine syntax */
  4533.         terminator = ')';
  4534.         is_recurse = TRUE;
  4535.         /* Fall through */
  4536.  
  4537.         /* We come here from the Python syntax above that handles both
  4538.         references (?P=name) and recursion (?P>name), as well as falling
  4539.         through from the Perl recursion syntax (?&name). */
  4540.  
  4541.         NAMED_REF_OR_RECURSE:
  4542.         name = ++ptr;
  4543.         while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
  4544.         namelen = ptr - name;
  4545.  
  4546.         /* In the pre-compile phase, do a syntax check and set a dummy
  4547.         reference number. */
  4548.  
  4549.         if (lengthptr != NULL)
  4550.           {
  4551.           if (*ptr != terminator)
  4552.             {
  4553.             *errorcodeptr = ERR42;
  4554.             goto FAILED;
  4555.             }
  4556.           if (namelen > MAX_NAME_SIZE)
  4557.             {
  4558.             *errorcodeptr = ERR48;
  4559.             goto FAILED;
  4560.             }
  4561.           recno = 0;
  4562.           }
  4563.  
  4564.         /* In the real compile, seek the name in the table */
  4565.  
  4566.         else
  4567.           {
  4568.           slot = cd->name_table;
  4569.           for (i = 0; i < cd->names_found; i++)
  4570.             {
  4571.             if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
  4572.             slot += cd->name_entry_size;
  4573.             }
  4574.  
  4575.           if (i < cd->names_found)         /* Back reference */
  4576.             {
  4577.             recno = GET2(slot, 0);
  4578.             }
  4579.           else if ((recno =                /* Forward back reference */
  4580.                     find_parens(ptr, cd->bracount, name, namelen,
  4581.                       (options & PCRE_EXTENDED) != 0)) <= 0)
  4582.             {
  4583.             *errorcodeptr = ERR15;
  4584.             goto FAILED;
  4585.             }
  4586.           }
  4587.  
  4588.         /* In both phases, we can now go to the code than handles numerical
  4589.         recursion or backreferences. */
  4590.  
  4591.         if (is_recurse) goto HANDLE_RECURSION;
  4592.           else goto HANDLE_REFERENCE;
  4593.  
  4594.  
  4595.         /* ------------------------------------------------------------ */
  4596.         case 'R':                 /* Recursion */
  4597.         ptr++;                    /* Same as (?0)      */
  4598.         /* Fall through */
  4599.  
  4600.  
  4601.         /* ------------------------------------------------------------ */
  4602.         case '-': case '+':
  4603.         case '0': case '1': case '2': case '3': case '4':   /* Recursion or */
  4604.         case '5': case '6': case '7': case '8': case '9':   /* subroutine */
  4605.           {
  4606.           const uschar *called;
  4607.  
  4608.           if ((refsign = *ptr) == '+') ptr++;
  4609.           else if (refsign == '-')
  4610.             {
  4611.             if ((digitab[ptr[1]] & ctype_digit) == 0)
  4612.               goto OTHER_CHAR_AFTER_QUERY;
  4613.             ptr++;
  4614.             }
  4615.  
  4616.           recno = 0;
  4617.           while((digitab[*ptr] & ctype_digit) != 0)
  4618.             recno = recno * 10 + *ptr++ - '0';
  4619.  
  4620.           if (*ptr != ')')
  4621.             {
  4622.             *errorcodeptr = ERR29;
  4623.             goto FAILED;
  4624.             }
  4625.  
  4626.           if (refsign == '-')
  4627.             {
  4628.             if (recno == 0)
  4629.               {
  4630.               *errorcodeptr = ERR58;
  4631.               goto FAILED;
  4632.               }
  4633.             recno = cd->bracount - recno + 1;
  4634.             if (recno <= 0)
  4635.               {
  4636.               *errorcodeptr = ERR15;
  4637.               goto FAILED;
  4638.               }
  4639.             }
  4640.           else if (refsign == '+')
  4641.             {
  4642.             if (recno == 0)
  4643.               {
  4644.               *errorcodeptr = ERR58;
  4645.               goto FAILED;
  4646.               }
  4647.             recno += cd->bracount;
  4648.             }
  4649.  
  4650.           /* Come here from code above that handles a named recursion */
  4651.  
  4652.           HANDLE_RECURSION:
  4653.  
  4654.           previous = code;
  4655.           called = cd->start_code;
  4656.  
  4657.           /* When we are actually compiling, find the bracket that is being
  4658.           referenced. Temporarily end the regex in case it doesn't exist before
  4659.           this point. If we end up with a forward reference, first check that
  4660.           the bracket does occur later so we can give the error (and position)
  4661.           now. Then remember this forward reference in the workspace so it can
  4662.           be filled in at the end. */
  4663.  
  4664.           if (lengthptr == NULL)
  4665.             {
  4666.             *code = OP_END;
  4667.             if (recno != 0) called = find_bracket(cd->start_code, utf8, recno);
  4668.  
  4669.             /* Forward reference */
  4670.  
  4671.             if (called == NULL)
  4672.               {
  4673.               if (find_parens(ptr, cd->bracount, NULL, recno,
  4674.                    (options & PCRE_EXTENDED) != 0) < 0)
  4675.                 {
  4676.                 *errorcodeptr = ERR15;
  4677.                 goto FAILED;
  4678.                 }
  4679.               called = cd->start_code + recno;
  4680.               PUTINC(cd->hwm, 0, code + 2 + LINK_SIZE - cd->start_code);
  4681.               }
  4682.  
  4683.             /* If not a forward reference, and the subpattern is still open,
  4684.             this is a recursive call. We check to see if this is a left
  4685.             recursion that could loop for ever, and diagnose that case. */
  4686.  
  4687.             else if (GET(called, 1) == 0 &&
  4688.                      could_be_empty(called, code, bcptr, utf8))
  4689.               {
  4690.               *errorcodeptr = ERR40;
  4691.               goto FAILED;
  4692.               }
  4693.             }
  4694.  
  4695.           /* Insert the recursion/subroutine item, automatically wrapped inside
  4696.           "once" brackets. Set up a "previous group" length so that a
  4697.           subsequent quantifier will work. */
  4698.  
  4699.           *code = OP_ONCE;
  4700.           PUT(code, 1, 2 + 2*LINK_SIZE);
  4701.           code += 1 + LINK_SIZE;
  4702.  
  4703.           *code = OP_RECURSE;
  4704.           PUT(code, 1, called - cd->start_code);
  4705.           code += 1 + LINK_SIZE;
  4706.  
  4707.           *code = OP_KET;
  4708.           PUT(code, 1, 2 + 2*LINK_SIZE);
  4709.           code += 1 + LINK_SIZE;
  4710.  
  4711.           length_prevgroup = 3 + 3*LINK_SIZE;
  4712.           }
  4713.  
  4714.         /* Can't determine a first byte now */
  4715.  
  4716.         if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  4717.         continue;
  4718.  
  4719.  
  4720.         /* ------------------------------------------------------------ */
  4721.         default:              /* Other characters: check option setting */
  4722.         OTHER_CHAR_AFTER_QUERY:
  4723.         set = unset = 0;
  4724.         optset = &set;
  4725.  
  4726.         while (*ptr != ')' && *ptr != ':')
  4727.           {
  4728.           switch (*ptr++)
  4729.             {
  4730.             case '-': optset = &unset; break;
  4731.  
  4732.             case 'J':    /* Record that it changed in the external options */
  4733.             *optset |= PCRE_DUPNAMES;
  4734.             cd->external_flags |= PCRE_JCHANGED;
  4735.             break;
  4736.  
  4737.             case 'i': *optset |= PCRE_CASELESS; break;
  4738.             case 'm': *optset |= PCRE_MULTILINE; break;
  4739.             case 's': *optset |= PCRE_DOTALL; break;
  4740.             case 'x': *optset |= PCRE_EXTENDED; break;
  4741.             case 'U': *optset |= PCRE_UNGREEDY; break;
  4742.             case 'X': *optset |= PCRE_EXTRA; break;
  4743.  
  4744.             default:  *errorcodeptr = ERR12;
  4745.                       ptr--;    /* Correct the offset */
  4746.                       goto FAILED;
  4747.             }
  4748.           }
  4749.  
  4750.         /* Set up the changed option bits, but don't change anything yet. */
  4751.  
  4752.         newoptions = (options | set) & (~unset);
  4753.  
  4754.         /* If the options ended with ')' this is not the start of a nested
  4755.         group with option changes, so the options change at this level. If this
  4756.         item is right at the start of the pattern, the options can be
  4757.         abstracted and made external in the pre-compile phase, and ignored in
  4758.         the compile phase. This can be helpful when matching -- for instance in
  4759.         caseless checking of required bytes.
  4760.  
  4761.         If the code pointer is not (cd->start_code + 1 + LINK_SIZE), we are
  4762.         definitely *not* at the start of the pattern because something has been
  4763.         compiled. In the pre-compile phase, however, the code pointer can have
  4764.         that value after the start, because it gets reset as code is discarded
  4765.         during the pre-compile. However, this can happen only at top level - if
  4766.         we are within parentheses, the starting BRA will still be present. At
  4767.         any parenthesis level, the length value can be used to test if anything
  4768.         has been compiled at that level. Thus, a test for both these conditions
  4769.         is necessary to ensure we correctly detect the start of the pattern in
  4770.         both phases.
  4771.  
  4772.         If we are not at the pattern start, compile code to change the ims
  4773.         options if this setting actually changes any of them. We also pass the
  4774.         new setting back so that it can be put at the start of any following
  4775.         branches, and when this group ends (if we are in a group), a resetting
  4776.         item can be compiled. */
  4777.  
  4778.         if (*ptr == ')')
  4779.           {
  4780.           if (code == cd->start_code + 1 + LINK_SIZE &&
  4781.                (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
  4782.             {
  4783.             cd->external_options = newoptions;
  4784.             options = newoptions;
  4785.             }
  4786.          else
  4787.             {
  4788.             if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
  4789.               {
  4790.               *code++ = OP_OPT;
  4791.               *code++ = newoptions & PCRE_IMS;
  4792.               }
  4793.  
  4794.             /* Change options at this level, and pass them back for use
  4795.             in subsequent branches. Reset the greedy defaults and the case
  4796.             value for firstbyte and reqbyte. */
  4797.  
  4798.             *optionsptr = options = newoptions;
  4799.             greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
  4800.             greedy_non_default = greedy_default ^ 1;
  4801.             req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
  4802.             }
  4803.  
  4804.           previous = NULL;       /* This item can't be repeated */
  4805.           continue;              /* It is complete */
  4806.           }
  4807.  
  4808.         /* If the options ended with ':' we are heading into a nested group
  4809.         with possible change of options. Such groups are non-capturing and are
  4810.         not assertions of any kind. All we need to do is skip over the ':';
  4811.         the newoptions value is handled below. */
  4812.  
  4813.         bravalue = OP_BRA;
  4814.         ptr++;
  4815.         }     /* End of switch for character following (? */
  4816.       }       /* End of (? handling */
  4817.  
  4818.     /* Opening parenthesis not followed by '?'. If PCRE_NO_AUTO_CAPTURE is set,
  4819.     all unadorned brackets become non-capturing and behave like (?:...)
  4820.     brackets. */
  4821.  
  4822.     else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
  4823.       {
  4824.       bravalue = OP_BRA;
  4825.       }
  4826.  
  4827.     /* Else we have a capturing group. */
  4828.  
  4829.     else
  4830.       {
  4831.       NUMBERED_GROUP:
  4832.       cd->bracount += 1;
  4833.       PUT2(code, 1+LINK_SIZE, cd->bracount);
  4834.       skipbytes = 2;
  4835.       }
  4836.  
  4837.     /* Process nested bracketed regex. Assertions may not be repeated, but
  4838.     other kinds can be. All their opcodes are >= OP_ONCE. We copy code into a
  4839.     non-register variable in order to be able to pass its address because some
  4840.     compilers complain otherwise. Pass in a new setting for the ims options if
  4841.     they have changed. */
  4842.  
  4843.     previous = (bravalue >= OP_ONCE)? code : NULL;
  4844.     *code = bravalue;
  4845.     tempcode = code;
  4846.     tempreqvary = cd->req_varyopt;     /* Save value before bracket */
  4847.     length_prevgroup = 0;              /* Initialize for pre-compile phase */
  4848.  
  4849.     if (!compile_regex(
  4850.          newoptions,                   /* The complete new option state */
  4851.          options & PCRE_IMS,           /* The previous ims option state */
  4852.          &tempcode,                    /* Where to put code (updated) */
  4853.          &ptr,                         /* Input pointer (updated) */
  4854.          errorcodeptr,                 /* Where to put an error message */
  4855.          (bravalue == OP_ASSERTBACK ||
  4856.           bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  4857.          reset_bracount,               /* True if (?| group */
  4858.          skipbytes,                    /* Skip over bracket number */
  4859.          &subfirstbyte,                /* For possible first char */
  4860.          &subreqbyte,                  /* For possible last char */
  4861.          bcptr,                        /* Current branch chain */
  4862.          cd,                           /* Tables block */
  4863.          (lengthptr == NULL)? NULL :   /* Actual compile phase */
  4864.            &length_prevgroup           /* Pre-compile phase */
  4865.          ))
  4866.       goto FAILED;
  4867.  
  4868.     /* At the end of compiling, code is still pointing to the start of the
  4869.     group, while tempcode has been updated to point past the end of the group
  4870.     and any option resetting that may follow it. The pattern pointer (ptr)
  4871.     is on the bracket. */
  4872.  
  4873.     /* If this is a conditional bracket, check that there are no more than
  4874.     two branches in the group, or just one if it's a DEFINE group. We do this
  4875.     in the real compile phase, not in the pre-pass, where the whole group may
  4876.     not be available. */
  4877.  
  4878.     if (bravalue == OP_COND && lengthptr == NULL)
  4879.       {
  4880.       uschar *tc = code;
  4881.       int condcount = 0;
  4882.  
  4883.       do {
  4884.          condcount++;
  4885.          tc += GET(tc,1);
  4886.          }
  4887.       while (*tc != OP_KET);
  4888.  
  4889.       /* A DEFINE group is never obeyed inline (the "condition" is always
  4890.       false). It must have only one branch. */
  4891.  
  4892.       if (code[LINK_SIZE+1] == OP_DEF)
  4893.         {
  4894.         if (condcount > 1)
  4895.           {
  4896.           *errorcodeptr = ERR54;
  4897.           goto FAILED;
  4898.           }
  4899.         bravalue = OP_DEF;   /* Just a flag to suppress char handling below */
  4900.         }
  4901.  
  4902.       /* A "normal" conditional group. If there is just one branch, we must not
  4903.       make use of its firstbyte or reqbyte, because this is equivalent to an
  4904.       empty second branch. */
  4905.  
  4906.       else
  4907.         {
  4908.         if (condcount > 2)
  4909.           {
  4910.           *errorcodeptr = ERR27;
  4911.           goto FAILED;
  4912.           }
  4913.         if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE;
  4914.         }
  4915.       }
  4916.  
  4917.     /* Error if hit end of pattern */
  4918.  
  4919.     if (*ptr != ')')
  4920.       {
  4921.       *errorcodeptr = ERR14;
  4922.       goto FAILED;
  4923.       }
  4924.  
  4925.     /* In the pre-compile phase, update the length by the length of the group,
  4926.     less the brackets at either end. Then reduce the compiled code to just a
  4927.     set of non-capturing brackets so that it doesn't use much memory if it is
  4928.     duplicated by a quantifier.*/
  4929.  
  4930.     if (lengthptr != NULL)
  4931.       {
  4932.       if (OFLOW_MAX - *lengthptr < length_prevgroup - 2 - 2*LINK_SIZE)
  4933.         {
  4934.         *errorcodeptr = ERR20;
  4935.         goto FAILED;
  4936.         }
  4937.       *lengthptr += length_prevgroup - 2 - 2*LINK_SIZE;
  4938.       *code++ = OP_BRA;
  4939.       PUTINC(code, 0, 1 + LINK_SIZE);
  4940.       *code++ = OP_KET;
  4941.       PUTINC(code, 0, 1 + LINK_SIZE);
  4942.       break;    /* No need to waste time with special character handling */
  4943.       }
  4944.  
  4945.     /* Otherwise update the main code pointer to the end of the group. */
  4946.  
  4947.     code = tempcode;
  4948.  
  4949.     /* For a DEFINE group, required and first character settings are not
  4950.     relevant. */
  4951.  
  4952.     if (bravalue == OP_DEF) break;
  4953.  
  4954.     /* Handle updating of the required and first characters for other types of
  4955.     group. Update for normal brackets of all kinds, and conditions with two
  4956.     branches (see code above). If the bracket is followed by a quantifier with
  4957.     zero repeat, we have to back off. Hence the definition of zeroreqbyte and
  4958.     zerofirstbyte outside the main loop so that they can be accessed for the
  4959.     back off. */
  4960.  
  4961.     zeroreqbyte = reqbyte;
  4962.     zerofirstbyte = firstbyte;
  4963.     groupsetfirstbyte = FALSE;
  4964.  
  4965.     if (bravalue >= OP_ONCE)
  4966.       {
  4967.       /* If we have not yet set a firstbyte in this branch, take it from the
  4968.       subpattern, remembering that it was set here so that a repeat of more
  4969.       than one can replicate it as reqbyte if necessary. If the subpattern has
  4970.       no firstbyte, set "none" for the whole branch. In both cases, a zero
  4971.       repeat forces firstbyte to "none". */
  4972.  
  4973.       if (firstbyte == REQ_UNSET)
  4974.         {
  4975.         if (subfirstbyte >= 0)
  4976.           {
  4977.           firstbyte = subfirstbyte;
  4978.           groupsetfirstbyte = TRUE;
  4979.           }
  4980.         else firstbyte = REQ_NONE;
  4981.         zerofirstbyte = REQ_NONE;
  4982.         }
  4983.  
  4984.       /* If firstbyte was previously set, convert the subpattern's firstbyte
  4985.       into reqbyte if there wasn't one, using the vary flag that was in
  4986.       existence beforehand. */
  4987.  
  4988.       else if (subfirstbyte >= 0 && subreqbyte < 0)
  4989.         subreqbyte = subfirstbyte | tempreqvary;
  4990.  
  4991.       /* If the subpattern set a required byte (or set a first byte that isn't
  4992.       really the first byte - see above), set it. */
  4993.  
  4994.       if (subreqbyte >= 0) reqbyte = subreqbyte;
  4995.       }
  4996.  
  4997.     /* For a forward assertion, we take the reqbyte, if set. This can be
  4998.     helpful if the pattern that follows the assertion doesn't set a different
  4999.     char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte
  5000.     for an assertion, however because it leads to incorrect effect for patterns
  5001.     such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead
  5002.     of a firstbyte. This is overcome by a scan at the end if there's no
  5003.     firstbyte, looking for an asserted first char. */
  5004.  
  5005.     else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte;
  5006.     break;     /* End of processing '(' */
  5007.  
  5008.  
  5009.     /* ===================================================================*/
  5010.     /* Handle metasequences introduced by \. For ones like \d, the ESC_ values
  5011.     are arranged to be the negation of the corresponding OP_values. For the
  5012.     back references, the values are ESC_REF plus the reference number. Only
  5013.     back references and those types that consume a character may be repeated.
  5014.     We can test for values between ESC_b and ESC_Z for the latter; this may
  5015.     have to change if any new ones are ever created. */
  5016.  
  5017.     case '\\':
  5018.     tempptr = ptr;
  5019.     c = check_escape(&ptr, errorcodeptr, cd->bracount, options, FALSE);
  5020.     if (*errorcodeptr != 0) goto FAILED;
  5021.  
  5022.     if (c < 0)
  5023.       {
  5024.       if (-c == ESC_Q)            /* Handle start of quoted string */
  5025.         {
  5026.         if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
  5027.           else inescq = TRUE;
  5028.         continue;
  5029.         }
  5030.  
  5031.       if (-c == ESC_E) continue;  /* Perl ignores an orphan \E */
  5032.  
  5033.       /* For metasequences that actually match a character, we disable the
  5034.       setting of a first character if it hasn't already been set. */
  5035.  
  5036.       if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z)
  5037.         firstbyte = REQ_NONE;
  5038.  
  5039.       /* Set values to reset to if this is followed by a zero repeat. */
  5040.  
  5041.       zerofirstbyte = firstbyte;
  5042.       zeroreqbyte = reqbyte;
  5043.  
  5044.       /* \k<name> or \k'name' is a back reference by name (Perl syntax).
  5045.       We also support \k{name} (.NET syntax) */
  5046.  
  5047.       if (-c == ESC_k && (ptr[1] == '<' || ptr[1] == '\'' || ptr[1] == '{'))
  5048.         {
  5049.         is_recurse = FALSE;
  5050.         terminator = (*(++ptr) == '<')? '>' : (*ptr == '\'')? '\'' : '}';
  5051.         goto NAMED_REF_OR_RECURSE;
  5052.         }
  5053.  
  5054.       /* Back references are handled specially; must disable firstbyte if
  5055.       not set to cope with cases like (?=(\w+))\1: which would otherwise set
  5056.       ':' later. */
  5057.  
  5058.       if (-c >= ESC_REF)
  5059.         {
  5060.         recno = -c - ESC_REF;
  5061.  
  5062.         HANDLE_REFERENCE:    /* Come here from named backref handling */
  5063.         if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
  5064.         previous = code;
  5065.         *code++ = OP_REF;
  5066.         PUT2INC(code, 0, recno);
  5067.         cd->backref_map |= (recno < 32)? (1 << recno) : 1;
  5068.         if (recno > cd->top_backref) cd->top_backref = recno;
  5069.         }
  5070.  
  5071.       /* So are Unicode property matches, if supported. */
  5072.  
  5073. #ifdef SUPPORT_UCP
  5074.       else if (-c == ESC_P || -c == ESC_p)
  5075.         {
  5076.         BOOL negated;
  5077.         int pdata;
  5078.         int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr);
  5079.         if (ptype < 0) goto FAILED;
  5080.         previous = code;
  5081.         *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
  5082.         *code++ = ptype;
  5083.         *code++ = pdata;
  5084.         }
  5085. #else
  5086.  
  5087.       /* If Unicode properties are not supported, \X, \P, and \p are not
  5088.       allowed. */
  5089.  
  5090.       else if (-c == ESC_X || -c == ESC_P || -c == ESC_p)
  5091.         {
  5092.         *errorcodeptr = ERR45;
  5093.         goto FAILED;
  5094.         }
  5095. #endif
  5096.  
  5097.       /* For the rest (including \X when Unicode properties are supported), we
  5098.       can obtain the OP value by negating the escape value. */
  5099.  
  5100.       else
  5101.         {
  5102.         previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
  5103.         *code++ = -c;
  5104.         }
  5105.       continue;
  5106.       }
  5107.  
  5108.     /* We have a data character whose value is in c. In UTF-8 mode it may have
  5109.     a value > 127. We set its representation in the length/buffer, and then
  5110.     handle it as a data character. */
  5111.  
  5112. #ifdef SUPPORT_UTF8
  5113.     if (utf8 && c > 127)
  5114.       mclength = _pcre_ord2utf8(c, mcbuffer);
  5115.     else
  5116. #endif
  5117.  
  5118.      {
  5119.      mcbuffer[0] = c;
  5120.      mclength = 1;
  5121.      }
  5122.     goto ONE_CHAR;
  5123.  
  5124.  
  5125.     /* ===================================================================*/
  5126.     /* Handle a literal character. It is guaranteed not to be whitespace or #
  5127.     when the extended flag is set. If we are in UTF-8 mode, it may be a
  5128.     multi-byte literal character. */
  5129.  
  5130.     default:
  5131.     NORMAL_CHAR:
  5132.     mclength = 1;
  5133.     mcbuffer[0] = c;
  5134.  
  5135. #ifdef SUPPORT_UTF8
  5136.     if (utf8 && c >= 0xc0)
  5137.       {
  5138.       while ((ptr[1] & 0xc0) == 0x80)
  5139.         mcbuffer[mclength++] = *(++ptr);
  5140.       }
  5141. #endif
  5142.  
  5143.     /* At this point we have the character's bytes in mcbuffer, and the length
  5144.     in mclength. When not in UTF-8 mode, the length is always 1. */
  5145.  
  5146.     ONE_CHAR:
  5147.     previous = code;
  5148.     *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR;
  5149.     for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
  5150.  
  5151.     /* Remember if \r or \n were seen */
  5152.  
  5153.     if (mcbuffer[0] == '\r' || mcbuffer[0] == '\n')
  5154.       cd->external_flags |= PCRE_HASCRORLF;
  5155.  
  5156.     /* Set the first and required bytes appropriately. If no previous first
  5157.     byte, set it from this character, but revert to none on a zero repeat.
  5158.     Otherwise, leave the firstbyte value alone, and don't change it on a zero
  5159.     repeat. */
  5160.  
  5161.     if (firstbyte == REQ_UNSET)
  5162.       {
  5163.       zerofirstbyte = REQ_NONE;
  5164.       zeroreqbyte = reqbyte;
  5165.  
  5166.       /* If the character is more than one byte long, we can set firstbyte
  5167.       only if it is not to be matched caselessly. */
  5168.  
  5169.       if (mclength == 1 || req_caseopt == 0)
  5170.         {
  5171.         firstbyte = mcbuffer[0] | req_caseopt;
  5172.         if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt;
  5173.         }
  5174.       else firstbyte = reqbyte = REQ_NONE;
  5175.       }
  5176.  
  5177.     /* firstbyte was previously set; we can set reqbyte only the length is
  5178.     1 or the matching is caseful. */
  5179.  
  5180.     else
  5181.       {
  5182.       zerofirstbyte = firstbyte;
  5183.       zeroreqbyte = reqbyte;
  5184.       if (mclength == 1 || req_caseopt == 0)
  5185.         reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
  5186.       }
  5187.  
  5188.     break;            /* End of literal character handling */
  5189.     }
  5190.   }                   /* end of big loop */
  5191.  
  5192.  
  5193. /* Control never reaches here by falling through, only by a goto for all the
  5194. error states. Pass back the position in the pattern so that it can be displayed
  5195. to the user for diagnosing the error. */
  5196.  
  5197. FAILED:
  5198. *ptrptr = ptr;
  5199. return FALSE;
  5200. }
  5201.  
  5202.  
  5203.  
  5204.  
  5205. /*************************************************
  5206. *     Compile sequence of alternatives           *
  5207. *************************************************/
  5208.  
  5209. /* On entry, ptr is pointing past the bracket character, but on return it
  5210. points to the closing bracket, or vertical bar, or end of string. The code
  5211. variable is pointing at the byte into which the BRA operator has been stored.
  5212. If the ims options are changed at the start (for a (?ims: group) or during any
  5213. branch, we need to insert an OP_OPT item at the start of every following branch
  5214. to ensure they get set correctly at run time, and also pass the new options
  5215. into every subsequent branch compile.
  5216.  
  5217. This function is used during the pre-compile phase when we are trying to find
  5218. out the amount of memory needed, as well as during the real compile phase. The
  5219. value of lengthptr distinguishes the two phases.
  5220.  
  5221. Arguments:
  5222.   options        option bits, including any changes for this subpattern
  5223.   oldims         previous settings of ims option bits
  5224.   codeptr        -> the address of the current code pointer
  5225.   ptrptr         -> the address of the current pattern pointer
  5226.   errorcodeptr   -> pointer to error code variable
  5227.   lookbehind     TRUE if this is a lookbehind assertion
  5228.   reset_bracount TRUE to reset the count for each branch
  5229.   skipbytes      skip this many bytes at start (for brackets and OP_COND)
  5230.   firstbyteptr   place to put the first required character, or a negative number
  5231.   reqbyteptr     place to put the last required character, or a negative number
  5232.   bcptr          pointer to the chain of currently open branches
  5233.   cd             points to the data block with tables pointers etc.
  5234.   lengthptr      NULL during the real compile phase
  5235.                  points to length accumulator during pre-compile phase
  5236.  
  5237. Returns:         TRUE on success
  5238. */
  5239.  
  5240. static BOOL
  5241. compile_regex(int options, int oldims, uschar **codeptr, const uschar **ptrptr,
  5242.   int *errorcodeptr, BOOL lookbehind, BOOL reset_bracount, int skipbytes,
  5243.   int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd,
  5244.   int *lengthptr)
  5245. {
  5246. const uschar *ptr = *ptrptr;
  5247. uschar *code = *codeptr;
  5248. uschar *last_branch = code;
  5249. uschar *start_bracket = code;
  5250. uschar *reverse_count = NULL;
  5251. int firstbyte, reqbyte;
  5252. int branchfirstbyte, branchreqbyte;
  5253. int length;
  5254. int orig_bracount;
  5255. int max_bracount;
  5256. branch_chain bc;
  5257.  
  5258. bc.outer = bcptr;
  5259. bc.current = code;
  5260.  
  5261. firstbyte = reqbyte = REQ_UNSET;
  5262.  
  5263. /* Accumulate the length for use in the pre-compile phase. Start with the
  5264. length of the BRA and KET and any extra bytes that are required at the
  5265. beginning. We accumulate in a local variable to save frequent testing of
  5266. lenthptr for NULL. We cannot do this by looking at the value of code at the
  5267. start and end of each alternative, because compiled items are discarded during
  5268. the pre-compile phase so that the work space is not exceeded. */
  5269.  
  5270. length = 2 + 2*LINK_SIZE + skipbytes;
  5271.  
  5272. /* WARNING: If the above line is changed for any reason, you must also change
  5273. the code that abstracts option settings at the start of the pattern and makes
  5274. them global. It tests the value of length for (2 + 2*LINK_SIZE) in the
  5275. pre-compile phase to find out whether anything has yet been compiled or not. */
  5276.  
  5277. /* Offset is set zero to mark that this bracket is still open */
  5278.  
  5279. PUT(code, 1, 0);
  5280. code += 1 + LINK_SIZE + skipbytes;
  5281.  
  5282. /* Loop for each alternative branch */
  5283.  
  5284. orig_bracount = max_bracount = cd->bracount;
  5285. for (;;)
  5286.   {
  5287.   /* For a (?| group, reset the capturing bracket count so that each branch
  5288.   uses the same numbers. */
  5289.  
  5290.   if (reset_bracount) cd->bracount = orig_bracount;
  5291.  
  5292.   /* Handle a change of ims options at the start of the branch */
  5293.  
  5294.   if ((options & PCRE_IMS) != oldims)
  5295.     {
  5296.     *code++ = OP_OPT;
  5297.     *code++ = options & PCRE_IMS;
  5298.     length += 2;
  5299.     }
  5300.  
  5301.   /* Set up dummy OP_REVERSE if lookbehind assertion */
  5302.  
  5303.   if (lookbehind)
  5304.     {
  5305.     *code++ = OP_REVERSE;
  5306.     reverse_count = code;
  5307.     PUTINC(code, 0, 0);
  5308.     length += 1 + LINK_SIZE;
  5309.     }
  5310.  
  5311.   /* Now compile the branch; in the pre-compile phase its length gets added
  5312.   into the length. */
  5313.  
  5314.   if (!compile_branch(&options, &code, &ptr, errorcodeptr, &branchfirstbyte,
  5315.         &branchreqbyte, &bc, cd, (lengthptr == NULL)? NULL : &length))
  5316.     {
  5317.     *ptrptr = ptr;
  5318.     return FALSE;
  5319.     }
  5320.  
  5321.   /* Keep the highest bracket count in case (?| was used and some branch
  5322.   has fewer than the rest. */
  5323.  
  5324.   if (cd->bracount > max_bracount) max_bracount = cd->bracount;
  5325.  
  5326.   /* In the real compile phase, there is some post-processing to be done. */
  5327.  
  5328.   if (lengthptr == NULL)
  5329.     {
  5330.     /* If this is the first branch, the firstbyte and reqbyte values for the
  5331.     branch become the values for the regex. */
  5332.  
  5333.     if (*last_branch != OP_ALT)
  5334.       {
  5335.       firstbyte = branchfirstbyte;
  5336.       reqbyte = branchreqbyte;
  5337.       }
  5338.  
  5339.     /* If this is not the first branch, the first char and reqbyte have to
  5340.     match the values from all the previous branches, except that if the
  5341.     previous value for reqbyte didn't have REQ_VARY set, it can still match,
  5342.     and we set REQ_VARY for the regex. */
  5343.  
  5344.     else
  5345.       {
  5346.       /* If we previously had a firstbyte, but it doesn't match the new branch,
  5347.       we have to abandon the firstbyte for the regex, but if there was
  5348.       previously no reqbyte, it takes on the value of the old firstbyte. */
  5349.  
  5350.       if (firstbyte >= 0 && firstbyte != branchfirstbyte)
  5351.         {
  5352.         if (reqbyte < 0) reqbyte = firstbyte;
  5353.         firstbyte = REQ_NONE;
  5354.         }
  5355.  
  5356.       /* If we (now or from before) have no firstbyte, a firstbyte from the
  5357.       branch becomes a reqbyte if there isn't a branch reqbyte. */
  5358.  
  5359.       if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0)
  5360.           branchreqbyte = branchfirstbyte;
  5361.  
  5362.       /* Now ensure that the reqbytes match */
  5363.  
  5364.       if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY))
  5365.         reqbyte = REQ_NONE;
  5366.       else reqbyte |= branchreqbyte;   /* To "or" REQ_VARY */
  5367.       }
  5368.  
  5369.     /* If lookbehind, check that this branch matches a fixed-length string, and
  5370.     put the length into the OP_REVERSE item. Temporarily mark the end of the
  5371.     branch with OP_END. */
  5372.  
  5373.     if (lookbehind)
  5374.       {
  5375.       int fixed_length;
  5376.       *code = OP_END;
  5377.       fixed_length = find_fixedlength(last_branch, options);
  5378.       DPRINTF(("fixed length = %d\n", fixed_length));
  5379.       if (fixed_length < 0)
  5380.         {
  5381.         *errorcodeptr = (fixed_length == -2)? ERR36 : ERR25;
  5382.         *ptrptr = ptr;
  5383.         return FALSE;
  5384.         }
  5385.       PUT(reverse_count, 0, fixed_length);
  5386.       }
  5387.     }
  5388.  
  5389.   /* Reached end of expression, either ')' or end of pattern. In the real
  5390.   compile phase, go back through the alternative branches and reverse the chain
  5391.   of offsets, with the field in the BRA item now becoming an offset to the
  5392.   first alternative. If there are no alternatives, it points to the end of the
  5393.   group. The length in the terminating ket is always the length of the whole
  5394.   bracketed item. If any of the ims options were changed inside the group,
  5395.   compile a resetting op-code following, except at the very end of the pattern.
  5396.   Return leaving the pointer at the terminating char. */
  5397.  
  5398.   if (*ptr != '|')
  5399.     {
  5400.     if (lengthptr == NULL)
  5401.       {
  5402.       int branch_length = code - last_branch;
  5403.       do
  5404.         {
  5405.         int prev_length = GET(last_branch, 1);
  5406.         PUT(last_branch, 1, branch_length);
  5407.         branch_length = prev_length;
  5408.         last_branch -= branch_length;
  5409.         }
  5410.       while (branch_length > 0);
  5411.       }
  5412.  
  5413.     /* Fill in the ket */
  5414.  
  5415.     *code = OP_KET;
  5416.     PUT(code, 1, code - start_bracket);
  5417.     code += 1 + LINK_SIZE;
  5418.  
  5419.     /* Resetting option if needed */
  5420.  
  5421.     if ((options & PCRE_IMS) != oldims && *ptr == ')')
  5422.       {
  5423.       *code++ = OP_OPT;
  5424.       *code++ = oldims;
  5425.       length += 2;
  5426.       }
  5427.  
  5428.     /* Retain the highest bracket number, in case resetting was used. */
  5429.  
  5430.     cd->bracount = max_bracount;
  5431.  
  5432.     /* Set values to pass back */
  5433.  
  5434.     *codeptr = code;
  5435.     *ptrptr = ptr;
  5436.     *firstbyteptr = firstbyte;
  5437.     *reqbyteptr = reqbyte;
  5438.     if (lengthptr != NULL)
  5439.       {
  5440.       if (OFLOW_MAX - *lengthptr < length)
  5441.         {
  5442.         *errorcodeptr = ERR20;
  5443.         return FALSE;
  5444.         }
  5445.       *lengthptr += length;
  5446.       }
  5447.     return TRUE;
  5448.     }
  5449.  
  5450.   /* Another branch follows. In the pre-compile phase, we can move the code
  5451.   pointer back to where it was for the start of the first branch. (That is,
  5452.   pretend that each branch is the only one.)
  5453.  
  5454.   In the real compile phase, insert an ALT node. Its length field points back
  5455.   to the previous branch while the bracket remains open. At the end the chain
  5456.   is reversed. It's done like this so that the start of the bracket has a
  5457.   zero offset until it is closed, making it possible to detect recursion. */
  5458.  
  5459.   if (lengthptr != NULL)
  5460.     {
  5461.     code = *codeptr + 1 + LINK_SIZE + skipbytes;
  5462.     length += 1 + LINK_SIZE;
  5463.     }
  5464.   else
  5465.     {
  5466.     *code = OP_ALT;
  5467.     PUT(code, 1, code - last_branch);
  5468.     bc.current = last_branch = code;
  5469.     code += 1 + LINK_SIZE;
  5470.     }
  5471.  
  5472.   ptr++;
  5473.   }
  5474. /* Control never reaches here */
  5475. }
  5476.  
  5477.  
  5478.  
  5479.  
  5480. /*************************************************
  5481. *          Check for anchored expression         *
  5482. *************************************************/
  5483.  
  5484. /* Try to find out if this is an anchored regular expression. Consider each
  5485. alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
  5486. all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
  5487. it's anchored. However, if this is a multiline pattern, then only OP_SOD
  5488. counts, since OP_CIRC can match in the middle.
  5489.  
  5490. We can also consider a regex to be anchored if OP_SOM starts all its branches.
  5491. This is the code for \G, which means "match at start of match position, taking
  5492. into account the match offset".
  5493.  
  5494. A branch is also implicitly anchored if it starts with .* and DOTALL is set,
  5495. because that will try the rest of the pattern at all possible matching points,
  5496. so there is no point trying again.... er ....
  5497.  
  5498. .... except when the .* appears inside capturing parentheses, and there is a
  5499. subsequent back reference to those parentheses. We haven't enough information
  5500. to catch that case precisely.
  5501.  
  5502. At first, the best we could do was to detect when .* was in capturing brackets
  5503. and the highest back reference was greater than or equal to that level.
  5504. However, by keeping a bitmap of the first 31 back references, we can catch some
  5505. of the more common cases more precisely.
  5506.  
  5507. Arguments:
  5508.   code           points to start of expression (the bracket)
  5509.   options        points to the options setting
  5510.   bracket_map    a bitmap of which brackets we are inside while testing; this
  5511.                   handles up to substring 31; after that we just have to take
  5512.                   the less precise approach
  5513.   backref_map    the back reference bitmap
  5514.  
  5515. Returns:     TRUE or FALSE
  5516. */
  5517.  
  5518. static BOOL
  5519. is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
  5520.   unsigned int backref_map)
  5521. {
  5522. do {
  5523.    const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code],
  5524.      options, PCRE_MULTILINE, FALSE);
  5525.    register int op = *scode;
  5526.  
  5527.    /* Non-capturing brackets */
  5528.  
  5529.    if (op == OP_BRA)
  5530.      {
  5531.      if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
  5532.      }
  5533.  
  5534.    /* Capturing brackets */
  5535.  
  5536.    else if (op == OP_CBRA)
  5537.      {
  5538.      int n = GET2(scode, 1+LINK_SIZE);
  5539.      int new_map = bracket_map | ((n < 32)? (1 << n) : 1);
  5540.      if (!is_anchored(scode, options, new_map, backref_map)) return FALSE;
  5541.      }
  5542.  
  5543.    /* Other brackets */
  5544.  
  5545.    else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  5546.      {
  5547.      if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
  5548.      }
  5549.  
  5550.    /* .* is not anchored unless DOTALL is set and it isn't in brackets that
  5551.    are or may be referenced. */
  5552.  
  5553.    else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR ||
  5554.              op == OP_TYPEPOSSTAR) &&
  5555.             (*options & PCRE_DOTALL) != 0)
  5556.      {
  5557.      if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
  5558.      }
  5559.  
  5560.    /* Check for explicit anchoring */
  5561.  
  5562.    else if (op != OP_SOD && op != OP_SOM &&
  5563.            ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  5564.      return FALSE;
  5565.    code += GET(code, 1);
  5566.    }
  5567. while (*code == OP_ALT);   /* Loop for each alternative */
  5568. return TRUE;
  5569. }
  5570.  
  5571.  
  5572.  
  5573. /*************************************************
  5574. *         Check for starting with ^ or .*        *
  5575. *************************************************/
  5576.  
  5577. /* This is called to find out if every branch starts with ^ or .* so that
  5578. "first char" processing can be done to speed things up in multiline
  5579. matching and for non-DOTALL patterns that start with .* (which must start at
  5580. the beginning or after \n). As in the case of is_anchored() (see above), we
  5581. have to take account of back references to capturing brackets that contain .*
  5582. because in that case we can't make the assumption.
  5583.  
  5584. Arguments:
  5585.   code           points to start of expression (the bracket)
  5586.   bracket_map    a bitmap of which brackets we are inside while testing; this
  5587.                   handles up to substring 31; after that we just have to take
  5588.                   the less precise approach
  5589.   backref_map    the back reference bitmap
  5590.  
  5591. Returns:         TRUE or FALSE
  5592. */
  5593.  
  5594. static BOOL
  5595. is_startline(const uschar *code, unsigned int bracket_map,
  5596.   unsigned int backref_map)
  5597. {
  5598. do {
  5599.    const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code],
  5600.      NULL, 0, FALSE);
  5601.    register int op = *scode;
  5602.  
  5603.    /* Non-capturing brackets */
  5604.  
  5605.    if (op == OP_BRA)
  5606.      {
  5607.      if (!is_startline(scode, bracket_map, backref_map)) return FALSE;
  5608.      }
  5609.  
  5610.    /* Capturing brackets */
  5611.  
  5612.    else if (op == OP_CBRA)
  5613.      {
  5614.      int n = GET2(scode, 1+LINK_SIZE);
  5615.      int new_map = bracket_map | ((n < 32)? (1 << n) : 1);
  5616.      if (!is_startline(scode, new_map, backref_map)) return FALSE;
  5617.      }
  5618.  
  5619.    /* Other brackets */
  5620.  
  5621.    else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  5622.      { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
  5623.  
  5624.    /* .* means "start at start or after \n" if it isn't in brackets that
  5625.    may be referenced. */
  5626.  
  5627.    else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR || op == OP_TYPEPOSSTAR)
  5628.      {
  5629.      if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
  5630.      }
  5631.  
  5632.    /* Check for explicit circumflex */
  5633.  
  5634.    else if (op != OP_CIRC) return FALSE;
  5635.  
  5636.    /* Move on to the next alternative */
  5637.  
  5638.    code += GET(code, 1);
  5639.    }
  5640. while (*code == OP_ALT);  /* Loop for each alternative */
  5641. return TRUE;
  5642. }
  5643.  
  5644.  
  5645.  
  5646. /*************************************************
  5647. *       Check for asserted fixed first char      *
  5648. *************************************************/
  5649.  
  5650. /* During compilation, the "first char" settings from forward assertions are
  5651. discarded, because they can cause conflicts with actual literals that follow.
  5652. However, if we end up without a first char setting for an unanchored pattern,
  5653. it is worth scanning the regex to see if there is an initial asserted first
  5654. char. If all branches start with the same asserted char, or with a bracket all
  5655. of whose alternatives start with the same asserted char (recurse ad lib), then
  5656. we return that char, otherwise -1.
  5657.  
  5658. Arguments:
  5659.   code       points to start of expression (the bracket)
  5660.   options    pointer to the options (used to check casing changes)
  5661.   inassert   TRUE if in an assertion
  5662.  
  5663. Returns:     -1 or the fixed first char
  5664. */
  5665.  
  5666. static int
  5667. find_firstassertedchar(const uschar *code, int *options, BOOL inassert)
  5668. {
  5669. register int c = -1;
  5670. do {
  5671.    int d;
  5672.    const uschar *scode =
  5673.      first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE);
  5674.    register int op = *scode;
  5675.  
  5676.    switch(op)
  5677.      {
  5678.      default:
  5679.      return -1;
  5680.  
  5681.      case OP_BRA:
  5682.      case OP_CBRA:
  5683.      case OP_ASSERT:
  5684.      case OP_ONCE:
  5685.      case OP_COND:
  5686.      if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0)
  5687.        return -1;
  5688.      if (c < 0) c = d; else if (c != d) return -1;
  5689.      break;
  5690.  
  5691.      case OP_EXACT:       /* Fall through */
  5692.      scode += 2;
  5693.  
  5694.      case OP_CHAR:
  5695.      case OP_CHARNC:
  5696.      case OP_PLUS:
  5697.      case OP_MINPLUS:
  5698.      case OP_POSPLUS:
  5699.      if (!inassert) return -1;
  5700.      if (c < 0)
  5701.        {
  5702.        c = scode[1];
  5703.        if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS;
  5704.        }
  5705.      else if (c != scode[1]) return -1;
  5706.      break;
  5707.      }
  5708.  
  5709.    code += GET(code, 1);
  5710.    }
  5711. while (*code == OP_ALT);
  5712. return c;
  5713. }
  5714.  
  5715.  
  5716.  
  5717. /*************************************************
  5718. *        Compile a Regular Expression            *
  5719. *************************************************/
  5720.  
  5721. /* This function takes a string and returns a pointer to a block of store
  5722. holding a compiled version of the expression. The original API for this
  5723. function had no error code return variable; it is retained for backwards
  5724. compatibility. The new function is given a new name.
  5725.  
  5726. Arguments:
  5727.   pattern       the regular expression
  5728.   options       various option bits
  5729.   errorcodeptr  pointer to error code variable (pcre_compile2() only)
  5730.                   can be NULL if you don't want a code value
  5731.   errorptr      pointer to pointer to error text
  5732.   erroroffset   ptr offset in pattern where error was detected
  5733.   tables        pointer to character tables or NULL
  5734.  
  5735. Returns:        pointer to compiled data block, or NULL on error,
  5736.                 with errorptr and erroroffset set
  5737. */
  5738.  
  5739. PCRE_EXP_DEFN pcre *
  5740. pcre_compile(const char *pattern, int options, const char **errorptr,
  5741.   int *erroroffset, const unsigned char *tables)
  5742. {
  5743. return pcre_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
  5744. }
  5745.  
  5746.  
  5747. PCRE_EXP_DEFN pcre *
  5748. pcre_compile2(const char *pattern, int options, int *errorcodeptr,
  5749.   const char **errorptr, int *erroroffset, const unsigned char *tables)
  5750. {
  5751. real_pcre *re;
  5752. int length = 1;  /* For final END opcode */
  5753. int firstbyte, reqbyte, newline;
  5754. int errorcode = 0;
  5755. int skipatstart = 0;
  5756. #ifdef SUPPORT_UTF8
  5757. BOOL utf8;
  5758. #endif
  5759. size_t size;
  5760. uschar *code;
  5761. const uschar *codestart;
  5762. const uschar *ptr;
  5763. compile_data compile_block;
  5764. compile_data *cd = &compile_block;
  5765.  
  5766. /* This space is used for "compiling" into during the first phase, when we are
  5767. computing the amount of memory that is needed. Compiled items are thrown away
  5768. as soon as possible, so that a fairly large buffer should be sufficient for
  5769. this purpose. The same space is used in the second phase for remembering where
  5770. to fill in forward references to subpatterns. */
  5771.  
  5772. uschar cworkspace[COMPILE_WORK_SIZE];
  5773.  
  5774.  
  5775. /* Set this early so that early errors get offset 0. */
  5776.  
  5777. ptr = (const uschar *)pattern;
  5778.  
  5779. /* We can't pass back an error message if errorptr is NULL; I guess the best we
  5780. can do is just return NULL, but we can set a code value if there is a code
  5781. pointer. */
  5782.  
  5783. if (errorptr == NULL)
  5784.   {
  5785.   if (errorcodeptr != NULL) *errorcodeptr = 99;
  5786.   return NULL;
  5787.   }
  5788.  
  5789. *errorptr = NULL;
  5790. if (errorcodeptr != NULL) *errorcodeptr = ERR0;
  5791.  
  5792. /* However, we can give a message for this error */
  5793.  
  5794. if (erroroffset == NULL)
  5795.   {
  5796.   errorcode = ERR16;
  5797.   goto PCRE_EARLY_ERROR_RETURN2;
  5798.   }
  5799.  
  5800. *erroroffset = 0;
  5801.  
  5802. /* Can't support UTF8 unless PCRE has been compiled to include the code. */
  5803.  
  5804. #ifdef SUPPORT_UTF8
  5805. utf8 = (options & PCRE_UTF8) != 0;
  5806. if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
  5807.      (*erroroffset = _pcre_valid_utf8((uschar *)pattern, -1)) >= 0)
  5808.   {
  5809.   errorcode = ERR44;
  5810.   goto PCRE_EARLY_ERROR_RETURN2;
  5811.   }
  5812. #else
  5813. if ((options & PCRE_UTF8) != 0)
  5814.   {
  5815.   errorcode = ERR32;
  5816.   goto PCRE_EARLY_ERROR_RETURN;
  5817.   }
  5818. #endif
  5819.  
  5820. if ((options & ~PUBLIC_OPTIONS) != 0)
  5821.   {
  5822.   errorcode = ERR17;
  5823.   goto PCRE_EARLY_ERROR_RETURN;
  5824.   }
  5825.  
  5826. /* Set up pointers to the individual character tables */
  5827.  
  5828. if (tables == NULL) tables = _pcre_default_tables;
  5829. cd->lcc = tables + lcc_offset;
  5830. cd->fcc = tables + fcc_offset;
  5831. cd->cbits = tables + cbits_offset;
  5832. cd->ctypes = tables + ctypes_offset;
  5833.  
  5834. /* Check for global one-time settings at the start of the pattern, and remember
  5835. the offset for later. */
  5836.  
  5837. while (ptr[skipatstart] == '(' && ptr[skipatstart+1] == '*')
  5838.   {
  5839.   int newnl = 0;
  5840.   int newbsr = 0;
  5841.  
  5842.   if (strncmp((char *)(ptr+skipatstart+2), "CR)", 3) == 0)
  5843.     { skipatstart += 5; newnl = PCRE_NEWLINE_CR; }
  5844.   else if (strncmp((char *)(ptr+skipatstart+2), "LF)", 3)  == 0)
  5845.     { skipatstart += 5; newnl = PCRE_NEWLINE_LF; }
  5846.   else if (strncmp((char *)(ptr+skipatstart+2), "CRLF)", 5)  == 0)
  5847.     { skipatstart += 7; newnl = PCRE_NEWLINE_CR + PCRE_NEWLINE_LF; }
  5848.   else if (strncmp((char *)(ptr+skipatstart+2), "ANY)", 4) == 0)
  5849.     { skipatstart += 6; newnl = PCRE_NEWLINE_ANY; }
  5850.   else if (strncmp((char *)(ptr+skipatstart+2), "ANYCRLF)", 8)  == 0)
  5851.     { skipatstart += 10; newnl = PCRE_NEWLINE_ANYCRLF; }
  5852.  
  5853.   else if (strncmp((char *)(ptr+skipatstart+2), "BSR_ANYCRLF)", 12) == 0)
  5854.     { skipatstart += 14; newbsr = PCRE_BSR_ANYCRLF; }
  5855.   else if (strncmp((char *)(ptr+skipatstart+2), "BSR_UNICODE)", 12) == 0)
  5856.     { skipatstart += 14; newbsr = PCRE_BSR_UNICODE; }
  5857.  
  5858.   if (newnl != 0)
  5859.     options = (options & ~PCRE_NEWLINE_BITS) | newnl;
  5860.   else if (newbsr != 0)
  5861.     options = (options & ~(PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) | newbsr;
  5862.   else break;
  5863.   }
  5864.  
  5865. /* Check validity of \R options. */
  5866.  
  5867. switch (options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE))
  5868.   {
  5869.   case 0:
  5870.   case PCRE_BSR_ANYCRLF:
  5871.   case PCRE_BSR_UNICODE:
  5872.   break;
  5873.   default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN;
  5874.   }
  5875.  
  5876. /* Handle different types of newline. The three bits give seven cases. The
  5877. current code allows for fixed one- or two-byte sequences, plus "any" and
  5878. "anycrlf". */
  5879.  
  5880. switch (options & PCRE_NEWLINE_BITS)
  5881.   {
  5882.   case 0: newline = NEWLINE; break;   /* Build-time default */
  5883.   case PCRE_NEWLINE_CR: newline = '\r'; break;
  5884.   case PCRE_NEWLINE_LF: newline = '\n'; break;
  5885.   case PCRE_NEWLINE_CR+
  5886.        PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break;
  5887.   case PCRE_NEWLINE_ANY: newline = -1; break;
  5888.   case PCRE_NEWLINE_ANYCRLF: newline = -2; break;
  5889.   default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN;
  5890.   }
  5891.  
  5892. if (newline == -2)
  5893.   {
  5894.   cd->nltype = NLTYPE_ANYCRLF;
  5895.   }
  5896. else if (newline < 0)
  5897.   {
  5898.   cd->nltype = NLTYPE_ANY;
  5899.   }
  5900. else
  5901.   {
  5902.   cd->nltype = NLTYPE_FIXED;
  5903.   if (newline > 255)
  5904.     {
  5905.     cd->nllen = 2;
  5906.     cd->nl[0] = (newline >> 8) & 255;
  5907.     cd->nl[1] = newline & 255;
  5908.     }
  5909.   else
  5910.     {
  5911.     cd->nllen = 1;
  5912.     cd->nl[0] = newline;
  5913.     }
  5914.   }
  5915.  
  5916. /* Maximum back reference and backref bitmap. The bitmap records up to 31 back
  5917. references to help in deciding whether (.*) can be treated as anchored or not.
  5918. */
  5919.  
  5920. cd->top_backref = 0;
  5921. cd->backref_map = 0;
  5922.  
  5923. /* Reflect pattern for debugging output */
  5924.  
  5925. DPRINTF(("------------------------------------------------------------------\n"));
  5926. DPRINTF(("%s\n", pattern));
  5927.  
  5928. /* Pretend to compile the pattern while actually just accumulating the length
  5929. of memory required. This behaviour is triggered by passing a non-NULL final
  5930. argument to compile_regex(). We pass a block of workspace (cworkspace) for it
  5931. to compile parts of the pattern into; the compiled code is discarded when it is
  5932. no longer needed, so hopefully this workspace will never overflow, though there
  5933. is a test for its doing so. */
  5934.  
  5935. cd->bracount = 0;
  5936. cd->names_found = 0;
  5937. cd->name_entry_size = 0;
  5938. cd->name_table = NULL;
  5939. cd->start_workspace = cworkspace;
  5940. cd->start_code = cworkspace;
  5941. cd->hwm = cworkspace;
  5942. cd->start_pattern = (const uschar *)pattern;
  5943. cd->end_pattern = (const uschar *)(pattern + strlen(pattern));
  5944. cd->req_varyopt = 0;
  5945. cd->external_options = options;
  5946. cd->external_flags = 0;
  5947.  
  5948. /* Now do the pre-compile. On error, errorcode will be set non-zero, so we
  5949. don't need to look at the result of the function here. The initial options have
  5950. been put into the cd block so that they can be changed if an option setting is
  5951. found within the regex right at the beginning. Bringing initial option settings
  5952. outside can help speed up starting point checks. */
  5953.  
  5954. ptr += skipatstart;
  5955. code = cworkspace;
  5956. *code = OP_BRA;
  5957. (void)compile_regex(cd->external_options, cd->external_options & PCRE_IMS,
  5958.   &code, &ptr, &errorcode, FALSE, FALSE, 0, &firstbyte, &reqbyte, NULL, cd,
  5959.   &length);
  5960. if (errorcode != 0) goto PCRE_EARLY_ERROR_RETURN;
  5961.  
  5962. DPRINTF(("end pre-compile: length=%d workspace=%d\n", length,
  5963.   cd->hwm - cworkspace));
  5964.  
  5965. if (length > MAX_PATTERN_SIZE)
  5966.   {
  5967.   errorcode = ERR20;
  5968.   goto PCRE_EARLY_ERROR_RETURN;
  5969.   }
  5970.  
  5971. /* Compute the size of data block needed and get it, either from malloc or
  5972. externally provided function. Integer overflow should no longer be possible
  5973. because nowadays we limit the maximum value of cd->names_found and
  5974. cd->name_entry_size. */
  5975.  
  5976. size = length + sizeof(real_pcre) + cd->names_found * (cd->name_entry_size + 3);
  5977. re = (real_pcre *)(pcre_malloc)(size);
  5978.  
  5979. if (re == NULL)
  5980.   {
  5981.   errorcode = ERR21;
  5982.   goto PCRE_EARLY_ERROR_RETURN;
  5983.   }
  5984.  
  5985. /* Put in the magic number, and save the sizes, initial options, internal
  5986. flags, and character table pointer. NULL is used for the default character
  5987. tables. The nullpad field is at the end; it's there to help in the case when a
  5988. regex compiled on a system with 4-byte pointers is run on another with 8-byte
  5989. pointers. */
  5990.  
  5991. re->magic_number = MAGIC_NUMBER;
  5992. re->size = size;
  5993. re->options = cd->external_options;
  5994. re->flags = cd->external_flags;
  5995. re->dummy1 = 0;
  5996. re->first_byte = 0;
  5997. re->req_byte = 0;
  5998. re->name_table_offset = sizeof(real_pcre);
  5999. re->name_entry_size = cd->name_entry_size;
  6000. re->name_count = cd->names_found;
  6001. re->ref_count = 0;
  6002. re->tables = (tables == _pcre_default_tables)? NULL : tables;
  6003. re->nullpad = NULL;
  6004.  
  6005. /* The starting points of the name/number translation table and of the code are
  6006. passed around in the compile data block. The start/end pattern and initial
  6007. options are already set from the pre-compile phase, as is the name_entry_size
  6008. field. Reset the bracket count and the names_found field. Also reset the hwm
  6009. field; this time it's used for remembering forward references to subpatterns.
  6010. */
  6011.  
  6012. cd->bracount = 0;
  6013. cd->names_found = 0;
  6014. cd->name_table = (uschar *)re + re->name_table_offset;
  6015. codestart = cd->name_table + re->name_entry_size * re->name_count;
  6016. cd->start_code = codestart;
  6017. cd->hwm = cworkspace;
  6018. cd->req_varyopt = 0;
  6019. cd->had_accept = FALSE;
  6020.  
  6021. /* Set up a starting, non-extracting bracket, then compile the expression. On
  6022. error, errorcode will be set non-zero, so we don't need to look at the result
  6023. of the function here. */
  6024.  
  6025. ptr = (const uschar *)pattern + skipatstart;
  6026. code = (uschar *)codestart;
  6027. *code = OP_BRA;
  6028. (void)compile_regex(re->options, re->options & PCRE_IMS, &code, &ptr,
  6029.   &errorcode, FALSE, FALSE, 0, &firstbyte, &reqbyte, NULL, cd, NULL);
  6030. re->top_bracket = cd->bracount;
  6031. re->top_backref = cd->top_backref;
  6032. re->flags = cd->external_flags;
  6033.  
  6034. if (cd->had_accept) reqbyte = -1;   /* Must disable after (*ACCEPT) */
  6035.  
  6036. /* If not reached end of pattern on success, there's an excess bracket. */
  6037.  
  6038. if (errorcode == 0 && *ptr != 0) errorcode = ERR22;
  6039.  
  6040. /* Fill in the terminating state and check for disastrous overflow, but
  6041. if debugging, leave the test till after things are printed out. */
  6042.  
  6043. *code++ = OP_END;
  6044.  
  6045. #ifndef DEBUG
  6046. if (code - codestart > length) errorcode = ERR23;
  6047. #endif
  6048.  
  6049. /* Fill in any forward references that are required. */
  6050.  
  6051. while (errorcode == 0 && cd->hwm > cworkspace)
  6052.   {
  6053.   int offset, recno;
  6054.   const uschar *groupptr;
  6055.   cd->hwm -= LINK_SIZE;
  6056.   offset = GET(cd->hwm, 0);
  6057.   recno = GET(codestart, offset);
  6058.   groupptr = find_bracket(codestart, (re->options & PCRE_UTF8) != 0, recno);
  6059.   if (groupptr == NULL) errorcode = ERR53;
  6060.     else PUT(((uschar *)codestart), offset, groupptr - codestart);
  6061.   }
  6062.  
  6063. /* Give an error if there's back reference to a non-existent capturing
  6064. subpattern. */
  6065.  
  6066. if (errorcode == 0 && re->top_backref > re->top_bracket) errorcode = ERR15;
  6067.  
  6068. /* Failed to compile, or error while post-processing */
  6069.  
  6070. if (errorcode != 0)
  6071.   {
  6072.   (pcre_free)(re);
  6073.   PCRE_EARLY_ERROR_RETURN:
  6074.   *erroroffset = ptr - (const uschar *)pattern;
  6075.   PCRE_EARLY_ERROR_RETURN2:
  6076.   *errorptr = find_error_text(errorcode);
  6077.   if (errorcodeptr != NULL) *errorcodeptr = errorcode;
  6078.   return NULL;
  6079.   }
  6080.  
  6081. /* If the anchored option was not passed, set the flag if we can determine that
  6082. the pattern is anchored by virtue of ^ characters or \A or anything else (such
  6083. as starting with .* when DOTALL is set).
  6084.  
  6085. Otherwise, if we know what the first byte has to be, save it, because that
  6086. speeds up unanchored matches no end. If not, see if we can set the
  6087. PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
  6088. start with ^. and also when all branches start with .* for non-DOTALL matches.
  6089. */
  6090.  
  6091. if ((re->options & PCRE_ANCHORED) == 0)
  6092.   {
  6093.   int temp_options = re->options;   /* May get changed during these scans */
  6094.   if (is_anchored(codestart, &temp_options, 0, cd->backref_map))
  6095.     re->options |= PCRE_ANCHORED;
  6096.   else
  6097.     {
  6098.     if (firstbyte < 0)
  6099.       firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE);
  6100.     if (firstbyte >= 0)   /* Remove caseless flag for non-caseable chars */
  6101.       {
  6102.       int ch = firstbyte & 255;
  6103.       re->first_byte = ((firstbyte & REQ_CASELESS) != 0 &&
  6104.          cd->fcc[ch] == ch)? ch : firstbyte;
  6105.       re->flags |= PCRE_FIRSTSET;
  6106.       }
  6107.     else if (is_startline(codestart, 0, cd->backref_map))
  6108.       re->flags |= PCRE_STARTLINE;
  6109.     }
  6110.   }
  6111.  
  6112. /* For an anchored pattern, we use the "required byte" only if it follows a
  6113. variable length item in the regex. Remove the caseless flag for non-caseable
  6114. bytes. */
  6115.  
  6116. if (reqbyte >= 0 &&
  6117.      ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
  6118.   {
  6119.   int ch = reqbyte & 255;
  6120.   re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
  6121.     cd->fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte;
  6122.   re->flags |= PCRE_REQCHSET;
  6123.   }
  6124.  
  6125. /* Print out the compiled data if debugging is enabled. This is never the
  6126. case when building a production library. */
  6127.  
  6128. #ifdef DEBUG
  6129.  
  6130. printf("Length = %d top_bracket = %d top_backref = %d\n",
  6131.   length, re->top_bracket, re->top_backref);
  6132.  
  6133. printf("Options=%08x\n", re->options);
  6134.  
  6135. if ((re->flags & PCRE_FIRSTSET) != 0)
  6136.   {
  6137.   int ch = re->first_byte & 255;
  6138.   const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)?
  6139.     "" : " (caseless)";
  6140.   if (isprint(ch)) printf("First char = %c%s\n", ch, caseless);
  6141.     else printf("First char = \\x%02x%s\n", ch, caseless);
  6142.   }
  6143.  
  6144. if ((re->flags & PCRE_REQCHSET) != 0)
  6145.   {
  6146.   int ch = re->req_byte & 255;
  6147.   const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)?
  6148.     "" : " (caseless)";
  6149.   if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless);
  6150.     else printf("Req char = \\x%02x%s\n", ch, caseless);
  6151.   }
  6152.  
  6153. pcre_printint(re, stdout, TRUE);
  6154.  
  6155. /* This check is done here in the debugging case so that the code that
  6156. was compiled can be seen. */
  6157.  
  6158. if (code - codestart > length)
  6159.   {
  6160.   (pcre_free)(re);
  6161.   *errorptr = find_error_text(ERR23);
  6162.   *erroroffset = ptr - (uschar *)pattern;
  6163.   if (errorcodeptr != NULL) *errorcodeptr = ERR23;
  6164.   return NULL;
  6165.   }
  6166. #endif   /* DEBUG */
  6167.  
  6168. return (pcre *)re;
  6169. }
  6170.  
  6171. /* End of pcre_compile.c */
  6172.