pcre.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:150k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: pcre.c,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:55:43  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*************************************************
  10. *      Perl-Compatible Regular Expressions       *
  11. *************************************************/
  12. /*
  13. This is a library of functions to support regular expressions whose syntax
  14. and semantics are as close as possible to those of the Perl 5 language. See
  15. the file Tech.Notes for some information on the internals.
  16. Written by: Philip Hazel <ph10@cam.ac.uk>
  17.            Copyright (c) 1997-2001 University of Cambridge
  18. -----------------------------------------------------------------------------
  19. Permission is granted to anyone to use this software for any purpose on any
  20. computer system, and to redistribute it freely, subject to the following
  21. restrictions:
  22. 1. This software is distributed in the hope that it will be useful,
  23.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  24.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  25. 2. The origin of this software must not be misrepresented, either by
  26.    explicit claim or by omission.
  27. 3. Altered versions must be plainly marked as such, and must not be
  28.    misrepresented as being the original software.
  29. 4. If PCRE is embedded in any software that is released under the GNU
  30.    General Purpose Licence (GPL), then the terms of that licence shall
  31.    supersede any condition above with which it is incompatible.
  32. -----------------------------------------------------------------------------
  33. */
  34. /* Use a macro for debugging printing */
  35. #if defined(PCRE_DEBUG)
  36. #  define DPRINTF(p) printf p
  37. #else
  38. #  define DPRINTF(p) /*nothing*/
  39. #endif
  40. /* Include the internals header, which itself includes Standard C headers plus
  41. the external pcre header. */
  42. #include "pcre_internal.h"
  43. /* Allow compilation as C++ source code, should anybody want to do that. */
  44. #ifdef __cplusplus
  45. #define class pcre_class
  46. #endif
  47. /* Maximum number of items on the nested bracket stacks at compile time. This
  48. applies to the nesting of all kinds of parentheses. It does not limit
  49. un-nested, non-capturing parentheses. This number can be made bigger if
  50. necessary - it is used to dimension one int and one unsigned char vector at
  51. compile time. */
  52. #define BRASTACK_SIZE 200
  53. /* The number of bytes in a literal character string above which we can't add
  54. any more is different when UTF-8 characters may be encountered. */
  55. #ifdef SUPPORT_UTF8
  56. #define MAXLIT 250
  57. #else
  58. #define MAXLIT 255
  59. #endif
  60. /* Min and max values for the common repeats; for the maxima, 0 => infinity */
  61. static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
  62. static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
  63. /* Text forms of OP_ values and things, for debugging (not all used) */
  64. #ifdef DEBUG
  65. static const char *OP_names[] = {
  66.   "End", "\A", "\B", "\b", "\D", "\d",
  67.   "\S", "\s", "\W", "\w", "\Z", "\z",
  68.   "Opt", "^", "$", "Any", "chars", "not",
  69.   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
  70.   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
  71.   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
  72.   "*", "*?", "+", "+?", "?", "??", "{", "{",
  73.   "class", "Ref", "Recurse",
  74.   "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
  75.   "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
  76.   "Brazero", "Braminzero", "Branumber", "Bra"
  77. };
  78. #endif
  79. /* Table for handling escaped characters in the range '0'-'z'. Positive returns
  80. are simple data values; negative values are for special things like d and so
  81. on. Zero means further processing is needed (for things like x), or the escape
  82. is invalid. */
  83. static const short int escapes[] = {
  84.     0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
  85.     0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
  86.   '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */
  87.     0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
  88.     0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
  89.     0,      0, -ESC_Z,    '[',   '\',    ']',    '^',    '_',   /* X - _ */
  90.   '`',      7, -ESC_b,      0, -ESC_d,  ESC_E,  ESC_F,      0,   /* ` - g */
  91.     0,      0,      0,      0,      0,      0,  ESC_N,      0,   /* h - o */
  92.     0,      0,  ESC_R, -ESC_s,  ESC_T,      0,      0, -ESC_w,   /* p - w */
  93.     0,      0, -ESC_z                                            /* x - z */
  94. };
  95. /* Tables of names of POSIX character classes and their lengths. The list is
  96. terminated by a zero length entry. The first three must be alpha, upper, lower,
  97. as this is assumed for handling case independence. */
  98. static const char *posix_names[] = {
  99.   "alpha", "lower", "upper",
  100.   "alnum", "ascii", "cntrl", "digit", "graph",
  101.   "print", "punct", "space", "word",  "xdigit" };
  102. static const uschar posix_name_lengths[] = {
  103.   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
  104. /* Table of class bit maps for each POSIX class; up to three may be combined
  105. to form the class. */
  106. static const int posix_class_maps[] = {
  107.   cbit_lower, cbit_upper, -1,             /* alpha */
  108.   cbit_lower, -1,         -1,             /* lower */
  109.   cbit_upper, -1,         -1,             /* upper */
  110.   cbit_digit, cbit_lower, cbit_upper,     /* alnum */
  111.   cbit_print, cbit_cntrl, -1,             /* ascii */
  112.   cbit_cntrl, -1,         -1,             /* cntrl */
  113.   cbit_digit, -1,         -1,             /* digit */
  114.   cbit_graph, -1,         -1,             /* graph */
  115.   cbit_print, -1,         -1,             /* print */
  116.   cbit_punct, -1,         -1,             /* punct */
  117.   cbit_space, -1,         -1,             /* space */
  118.   cbit_word,  -1,         -1,             /* word */
  119.   cbit_xdigit,-1,         -1              /* xdigit */
  120. };
  121. /* Definition to allow mutual recursion */
  122. static BOOL
  123.   compile_regex(int, int, int *, uschar **, const uschar **, const char **,
  124.     BOOL, int, int *, int *, compile_data *);
  125. /* Structure for building a chain of data that actually lives on the
  126. stack, for holding the values of the subject pointer at the start of each
  127. subpattern, so as to detect when an empty string has been matched by a
  128. subpattern - to break infinite loops. */
  129. typedef struct eptrblock {
  130.   struct eptrblock *prev;
  131.   const uschar *saved_eptr;
  132. } eptrblock;
  133. /* Flag bits for the match() function */
  134. #define match_condassert   0x01    /* Called to check a condition assertion */
  135. #define match_isgroup      0x02    /* Set if start of bracketed group */
  136. /*************************************************
  137. *               Global variables                 *
  138. *************************************************/
  139. /* PCRE is thread-clean and doesn't use any global variables in the normal
  140. sense. However, it calls memory allocation and free functions via the two
  141. indirections below, which are can be changed by the caller, but are shared
  142. between all threads. */
  143. void *(*pcre_malloc)(size_t) = malloc;
  144. void  (*pcre_free)(void *) = free;
  145. /*************************************************
  146. *    Macros and tables for character handling    *
  147. *************************************************/
  148. /* When UTF-8 encoding is being used, a character is no longer just a single
  149. byte. The macros for character handling generate simple sequences when used in
  150. byte-mode, and more complicated ones for UTF-8 characters. */
  151. #ifndef SUPPORT_UTF8
  152. #define GETCHARINC(c, eptr) c = *eptr++;
  153. #define GETCHARLEN(c, eptr, len) c = *eptr;
  154. #define BACKCHAR(eptr)
  155. #else   /* SUPPORT_UTF8 */
  156. /* Get the next UTF-8 character, advancing the pointer */
  157. #define GETCHARINC(c, eptr) 
  158.   c = *eptr++; 
  159.   if (md->utf8 && (c & 0xc0) == 0xc0) 
  160.     { 
  161.     int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ 
  162.     int s = 6*a; 
  163.     c = (c & utf8_table3[a]) << s; 
  164.     while (a-- > 0) 
  165.       { 
  166.       s -= 6; 
  167.       c |= (*eptr++ & 0x3f) << s; 
  168.       } 
  169.     }
  170. /* Get the next UTF-8 character, not advancing the pointer, setting length */
  171. #define GETCHARLEN(c, eptr, len) 
  172.   c = *eptr; 
  173.   len = 1; 
  174.   if (md->utf8 && (c & 0xc0) == 0xc0) 
  175.     { 
  176.     int i; 
  177.     int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ 
  178.     int s = 6*a; 
  179.     c = (c & utf8_table3[a]) << s; 
  180.     for (i = 1; i <= a; i++) 
  181.       { 
  182.       s -= 6; 
  183.       c |= (eptr[i] & 0x3f) << s; 
  184.       } 
  185.     len += a; 
  186.     }
  187. /* If the pointer is not at the start of a character, move it back until
  188. it is. */
  189. #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
  190. #endif
  191. /*************************************************
  192. *             Default character tables           *
  193. *************************************************/
  194. /* A default set of character tables is included in the PCRE binary. Its source
  195. is built by the maketables auxiliary program, which uses the default C ctypes
  196. functions, and put in the file chartables.c. These tables are used by PCRE
  197. whenever the caller of pcre_compile() does not provide an alternate set of
  198. tables. */
  199. #include "chartables.c"
  200. #ifdef SUPPORT_UTF8
  201. /*************************************************
  202. *           Tables for UTF-8 support             *
  203. *************************************************/
  204. /* These are the breakpoints for different numbers of bytes in a UTF-8
  205. character. */
  206. static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
  207. /* These are the indicator bits and the mask for the data bits to set in the
  208. first byte of a character, indexed by the number of additional bytes. */
  209. static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
  210. static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
  211. /* Table of the number of extra characters, indexed by the first character
  212. masked with 0x3f. The highest number for a valid UTF-8 character is in fact
  213. 0x3d. */
  214. static uschar utf8_table4[] = {
  215.   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  216.   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  217.   2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  218.   3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
  219. /*************************************************
  220. *       Convert character value to UTF-8         *
  221. *************************************************/
  222. /* This function takes an integer value in the range 0 - 0x7fffffff
  223. and encodes it as a UTF-8 character in 0 to 6 bytes.
  224. Arguments:
  225.   cvalue     the character value
  226.   buffer     pointer to buffer for result - at least 6 bytes long
  227. Returns:     number of characters placed in the buffer
  228. */
  229. static int
  230. ord2utf8(int cvalue, uschar *buffer)
  231. {
  232. register int i, j;
  233. for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  234.   if (cvalue <= utf8_table1[i]) break;
  235. buffer += i;
  236. for (j = i; j > 0; j--)
  237.  {
  238.  *buffer-- = 0x80 | (cvalue & 0x3f);
  239.  cvalue >>= 6;
  240.  }
  241. *buffer = utf8_table2[i] | cvalue;
  242. return i + 1;
  243. }
  244. #endif
  245. /*************************************************
  246. *          Return version string                 *
  247. *************************************************/
  248. #define STRING(a)  # a
  249. #define XSTRING(s) STRING(s)
  250. const char *
  251. pcre_version(void)
  252. {
  253. return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
  254. }
  255. /*************************************************
  256. * (Obsolete) Return info about compiled pattern  *
  257. *************************************************/
  258. /* This is the original "info" function. It picks potentially useful data out
  259. of the private structure, but its interface was too rigid. It remains for
  260. backwards compatibility. The public options are passed back in an int - though
  261. the re->options field has been expanded to a long int, all the public options
  262. at the low end of it, and so even on 16-bit systems this will still be OK.
  263. Therefore, I haven't changed the API for pcre_info().
  264. Arguments:
  265.   external_re   points to compiled code
  266.   optptr        where to pass back the options
  267.   first_char    where to pass back the first character,
  268.                 or -1 if multiline and all branches start ^,
  269.                 or -2 otherwise
  270. Returns:        number of capturing subpatterns
  271.                 or negative values on error
  272. */
  273. int
  274. pcre_info(const pcre *external_re, int *optptr, int *first_char)
  275. {
  276. const real_pcre *re = (const real_pcre *)external_re;
  277. if (re == NULL) return PCRE_ERROR_NULL;
  278. if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  279. if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
  280. if (first_char != NULL)
  281.   *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  282.      ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  283. return re->top_bracket;
  284. }
  285. /*************************************************
  286. *        Return info about compiled pattern      *
  287. *************************************************/
  288. /* This is a newer "info" function which has an extensible interface so
  289. that additional items can be added compatibly.
  290. Arguments:
  291.   external_re      points to compiled code
  292.   external_study   points to study data, or NULL
  293.   what             what information is required
  294.   where            where to put the information
  295. Returns:           0 if data returned, negative on error
  296. */
  297. int
  298. pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
  299.   void *where)
  300. {
  301. const real_pcre *re = (const real_pcre *)external_re;
  302. const real_pcre_extra *study = (const real_pcre_extra *)study_data;
  303. if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
  304. if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  305. switch (what)
  306.   {
  307.   case PCRE_INFO_OPTIONS:
  308.   *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  309.   break;
  310.   case PCRE_INFO_SIZE:
  311.   *((size_t *)where) = re->size;
  312.   break;
  313.   case PCRE_INFO_CAPTURECOUNT:
  314.   *((int *)where) = re->top_bracket;
  315.   break;
  316.   case PCRE_INFO_BACKREFMAX:
  317.   *((int *)where) = re->top_backref;
  318.   break;
  319.   case PCRE_INFO_FIRSTCHAR:
  320.   *((int *)where) =
  321.     ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
  322.     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  323.   break;
  324.   case PCRE_INFO_FIRSTTABLE:
  325.   *((const uschar **)where) =
  326.     (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
  327.       study->start_bits : NULL;
  328.   break;
  329.   case PCRE_INFO_LASTLITERAL:
  330.   *((int *)where) =
  331.     ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
  332.   break;
  333.   default: return PCRE_ERROR_BADOPTION;
  334.   }
  335. return 0;
  336. }
  337. #ifdef DEBUG
  338. /*************************************************
  339. *        Debugging function to print chars       *
  340. *************************************************/
  341. /* Print a sequence of chars in printable format, stopping at the end of the
  342. subject if the requested.
  343. Arguments:
  344.   p           points to characters
  345.   length      number to print
  346.   is_subject  TRUE if printing from within md->start_subject
  347.   md          pointer to matching data block, if is_subject is TRUE
  348. Returns:     nothing
  349. */
  350. static void
  351. pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
  352. {
  353. int c;
  354. if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
  355. while (length-- > 0)
  356.   if (isprint(c = *(p++))) printf("%c", c); else printf("\x%02x", c);
  357. }
  358. #endif
  359. /*************************************************
  360. *            Handle escapes                      *
  361. *************************************************/
  362. /* This function is called when a  has been encountered. It either returns a
  363. positive value for a simple escape such as n, or a negative value which
  364. encodes one of the more complicated things such as d. When UTF-8 is enabled,
  365. a positive value greater than 255 may be returned. On entry, ptr is pointing at
  366. the . On exit, it is on the final character of the escape sequence.
  367. Arguments:
  368.   ptrptr     points to the pattern position pointer
  369.   errorptr   points to the pointer to the error message
  370.   bracount   number of previous extracting brackets
  371.   options    the options bits
  372.   isclass    TRUE if inside a character class
  373.   cd         pointer to char tables block
  374. Returns:     zero or positive => a data character
  375.              negative => a special escape sequence
  376.              on error, errorptr is set
  377. */
  378. static int
  379. check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
  380.   int options, BOOL isclass, compile_data *cd)
  381. {
  382. const uschar *ptr = *ptrptr;
  383. int c, i;
  384. /* If backslash is at the end of the pattern, it's an error. */
  385. c = *(++ptr);
  386. if (c == 0) *errorptr = ERR1;
  387. /* Digits or letters may have special meaning; all others are literals. */
  388. else if (c < '0' || c > 'z') {}
  389. /* Do an initial lookup in a table. A non-zero result is something that can be
  390. returned immediately. Otherwise further processing may be required. */
  391. else if ((i = escapes[c - '0']) != 0) c = i;
  392. /* Escapes that need further processing, or are illegal. */
  393. else
  394.   {
  395.   const uschar *oldptr;
  396.   switch (c)
  397.     {
  398.     /* The handling of escape sequences consisting of a string of digits
  399.     starting with one that is not zero is not straightforward. By experiment,
  400.     the way Perl works seems to be as follows:
  401.     Outside a character class, the digits are read as a decimal number. If the
  402.     number is less than 10, or if there are that many previous extracting
  403.     left brackets, then it is a back reference. Otherwise, up to three octal
  404.     digits are read to form an escaped byte. Thus 123 is likely to be octal
  405.     123 (cf 123, which is octal 012 followed by the literal 3). If the octal
  406.     value is greater than 377, the least significant 8 bits are taken. Inside a
  407.     character class,  followed by a digit is always an octal number. */
  408.     case '1': case '2': case '3': case '4': case '5':
  409.     case '6': case '7': case '8': case '9':
  410.     if (!isclass)
  411.       {
  412.       oldptr = ptr;
  413.       c -= '0';
  414.       while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
  415.         c = c * 10 + *(++ptr) - '0';
  416.       if (c < 10 || c <= bracount)
  417.         {
  418.         c = -(ESC_REF + c);
  419.         break;
  420.         }
  421.       ptr = oldptr;      /* Put the pointer back and fall through */
  422.       }
  423.     /* Handle an octal number following . If the first digit is 8 or 9, Perl
  424.     generates a binary zero byte and treats the digit as a following literal.
  425.     Thus we have to pull back the pointer by one. */
  426.     if ((c = *ptr) >= '8')
  427.       {
  428.       ptr--;
  429.       c = 0;
  430.       break;
  431.       }
  432.     /*  always starts an octal number, but we may drop through to here with a
  433.     larger first octal digit. */
  434.     case '0':
  435.     c -= '0';
  436.     while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
  437.       ptr[1] != '8' && ptr[1] != '9')
  438.         c = c * 8 + *(++ptr) - '0';
  439.     c &= 255;     /* Take least significant 8 bits */
  440.     break;
  441.     /* x is complicated when UTF-8 is enabled. x{ddd} is a character number
  442.     which can be greater than 0xff, but only if the ddd are hex digits. */
  443.     case 'x':
  444. #ifdef SUPPORT_UTF8
  445.     if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
  446.       {
  447.       const uschar *pt = ptr + 2;
  448.       register int count = 0;
  449.       c = 0;
  450.       while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
  451.         {
  452.         count++;
  453.         c = c * 16 + cd->lcc[*pt] -
  454.           (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
  455.         pt++;
  456.         }
  457.       if (*pt == '}')
  458.         {
  459.         if (c < 0 || count > 8) *errorptr = ERR34;
  460.         ptr = pt;
  461.         break;
  462.         }
  463.       /* If the sequence of hex digits does not end with '}', then we don't
  464.       recognize this construct; fall through to the normal x handling. */
  465.       }
  466. #endif
  467.     /* Read just a single hex char */
  468.     c = 0;
  469.     while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
  470.       {
  471.       ptr++;
  472.       c = c * 16 + cd->lcc[*ptr] -
  473.         (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
  474.       }
  475.     break;
  476.     /* Other special escapes not starting with a digit are straightforward */
  477.     case 'c':
  478.     c = *(++ptr);
  479.     if (c == 0)
  480.       {
  481.       *errorptr = ERR2;
  482.       return 0;
  483.       }
  484.     /* A letter is upper-cased; then the 0x40 bit is flipped */
  485.     if (c >= 'a' && c <= 'z') c = cd->fcc[c];
  486.     c ^= 0x40;
  487.     break;
  488.     /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
  489.     other alphameric following  is an error if PCRE_EXTRA was set; otherwise,
  490.     for Perl compatibility, it is a literal. This code looks a bit odd, but
  491.     there used to be some cases other than the default, and there may be again
  492.     in future, so I haven't "optimized" it. */
  493.     default:
  494.     if ((options & PCRE_EXTRA) != 0) switch(c)
  495.       {
  496.       default:
  497.       *errorptr = ERR3;
  498.       break;
  499.       }
  500.     break;
  501.     }
  502.   }
  503. *ptrptr = ptr;
  504. return c;
  505. }
  506. /*************************************************
  507. *            Check for counted repeat            *
  508. *************************************************/
  509. /* This function is called when a '{' is encountered in a place where it might
  510. start a quantifier. It looks ahead to see if it really is a quantifier or not.
  511. It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
  512. where the ddds are digits.
  513. Arguments:
  514.   p         pointer to the first char after '{'
  515.   cd        pointer to char tables block
  516. Returns:    TRUE or FALSE
  517. */
  518. static BOOL
  519. is_counted_repeat(const uschar *p, compile_data *cd)
  520. {
  521. if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  522. while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  523. if (*p == '}') return TRUE;
  524. if (*p++ != ',') return FALSE;
  525. if (*p == '}') return TRUE;
  526. if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
  527. while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
  528. return (*p == '}');
  529. }
  530. /*************************************************
  531. *         Read repeat counts                     *
  532. *************************************************/
  533. /* Read an item of the form {n,m} and return the values. This is called only
  534. after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
  535. so the syntax is guaranteed to be correct, but we need to check the values.
  536. Arguments:
  537.   p          pointer to first char after '{'
  538.   minp       pointer to int for min
  539.   maxp       pointer to int for max
  540.              returned as -1 if no max
  541.   errorptr   points to pointer to error message
  542.   cd         pointer to character tables clock
  543. Returns:     pointer to '}' on success;
  544.              current ptr on error, with errorptr set
  545. */
  546. static const uschar *
  547. read_repeat_counts(const uschar *p, int *minp, int *maxp,
  548.   const char **errorptr, compile_data *cd)
  549. {
  550. int min = 0;
  551. int max = -1;
  552. while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  553. if (*p == '}') max = min; else
  554.   {
  555.   if (*(++p) != '}')
  556.     {
  557.     max = 0;
  558.     while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  559.     if (max < min)
  560.       {
  561.       *errorptr = ERR4;
  562.       return p;
  563.       }
  564.     }
  565.   }
  566. /* Do paranoid checks, then fill in the required variables, and pass back the
  567. pointer to the terminating '}'. */
  568. if (min > 65535 || max > 65535)
  569.   *errorptr = ERR5;
  570. else
  571.   {
  572.   *minp = min;
  573.   *maxp = max;
  574.   }
  575. return p;
  576. }
  577. /*************************************************
  578. *        Find the fixed length of a pattern      *
  579. *************************************************/
  580. /* Scan a pattern and compute the fixed length of subject that will match it,
  581. if the length is fixed. This is needed for dealing with backward assertions.
  582. Arguments:
  583.   code     points to the start of the pattern (the bracket)
  584.   options  the compiling options
  585. Returns:   the fixed length, or -1 if there is no fixed length
  586. */
  587. static int
  588. find_fixedlength(uschar *code, int options)
  589. {
  590. int length = -1;
  591. register int branchlength = 0;
  592. register uschar *cc = code + 3;
  593. /* Scan along the opcodes for this branch. If we get to the end of the
  594. branch, check the length against that of the other branches. */
  595. for (;;)
  596.   {
  597.   int d;
  598.   register int op = *cc;
  599.   if (op >= OP_BRA) op = OP_BRA;
  600.   switch (op)
  601.     {
  602.     case OP_BRA:
  603.     case OP_ONCE:
  604.     case OP_COND:
  605.     d = find_fixedlength(cc, options);
  606.     if (d < 0) return -1;
  607.     branchlength += d;
  608.     do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  609.     cc += 3;
  610.     break;
  611.     /* Reached end of a branch; if it's a ket it is the end of a nested
  612.     call. If it's ALT it is an alternation in a nested call. If it is
  613.     END it's the end of the outer call. All can be handled by the same code. */
  614.     case OP_ALT:
  615.     case OP_KET:
  616.     case OP_KETRMAX:
  617.     case OP_KETRMIN:
  618.     case OP_END:
  619.     if (length < 0) length = branchlength;
  620.       else if (length != branchlength) return -1;
  621.     if (*cc != OP_ALT) return length;
  622.     cc += 3;
  623.     branchlength = 0;
  624.     break;
  625.     /* Skip over assertive subpatterns */
  626.     case OP_ASSERT:
  627.     case OP_ASSERT_NOT:
  628.     case OP_ASSERTBACK:
  629.     case OP_ASSERTBACK_NOT:
  630.     do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
  631.     cc += 3;
  632.     break;
  633.     /* Skip over things that don't match chars */
  634.     case OP_REVERSE:
  635.     case OP_BRANUMBER:
  636.     case OP_CREF:
  637.     cc++;
  638.     /* Fall through */
  639.     case OP_OPT:
  640.     cc++;
  641.     /* Fall through */
  642.     case OP_SOD:
  643.     case OP_EOD:
  644.     case OP_EODN:
  645.     case OP_CIRC:
  646.     case OP_DOLL:
  647.     case OP_NOT_WORD_BOUNDARY:
  648.     case OP_WORD_BOUNDARY:
  649.     cc++;
  650.     break;
  651.     /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
  652.     This requires a scan of the string, unfortunately. We assume valid UTF-8
  653.     strings, so all we do is reduce the length by one for byte whose bits are
  654.     10xxxxxx. */
  655.     case OP_CHARS:
  656.     branchlength += *(++cc);
  657. #ifdef SUPPORT_UTF8
  658.     for (d = 1; d <= *cc; d++)
  659.       if ((cc[d] & 0xc0) == 0x80) branchlength--;
  660. #endif
  661.     cc += *cc + 1;
  662.     break;
  663.     /* Handle exact repetitions */
  664.     case OP_EXACT:
  665.     case OP_TYPEEXACT:
  666.     branchlength += (cc[1] << 8) + cc[2];
  667.     cc += 4;
  668.     break;
  669.     /* Handle single-char matchers */
  670.     case OP_NOT_DIGIT:
  671.     case OP_DIGIT:
  672.     case OP_NOT_WHITESPACE:
  673.     case OP_WHITESPACE:
  674.     case OP_NOT_WORDCHAR:
  675.     case OP_WORDCHAR:
  676.     case OP_ANY:
  677.     branchlength++;
  678.     cc++;
  679.     break;
  680.     /* Check a class for variable quantification */
  681.     case OP_CLASS:
  682.     cc += 33;
  683.     switch (*cc)
  684.       {
  685.       case OP_CRSTAR:
  686.       case OP_CRMINSTAR:
  687.       case OP_CRQUERY:
  688.       case OP_CRMINQUERY:
  689.       return -1;
  690.       case OP_CRRANGE:
  691.       case OP_CRMINRANGE:
  692.       if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
  693.       branchlength += (cc[1] << 8) + cc[2];
  694.       cc += 5;
  695.       break;
  696.       default:
  697.       branchlength++;
  698.       }
  699.     break;
  700.     /* Anything else is variable length */
  701.     default:
  702.     return -1;
  703.     }
  704.   }
  705. /* Control never gets here */
  706. }
  707. /*************************************************
  708. *           Check for POSIX class syntax         *
  709. *************************************************/
  710. /* This function is called when the sequence "[:" or "[." or "[=" is
  711. encountered in a character class. It checks whether this is followed by an
  712. optional ^ and then a sequence of letters, terminated by a matching ":]" or
  713. ".]" or "=]".
  714. Argument:
  715.   ptr      pointer to the initial [
  716.   endptr   where to return the end pointer
  717.   cd       pointer to compile data
  718. Returns:   TRUE or FALSE
  719. */
  720. static BOOL
  721. check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
  722. {
  723. int terminator;          /* Don't combine these lines; the Solaris cc */
  724. terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
  725. if (*(++ptr) == '^') ptr++;
  726. while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
  727. if (*ptr == terminator && ptr[1] == ']')
  728.   {
  729.   *endptr = ptr;
  730.   return TRUE;
  731.   }
  732. return FALSE;
  733. }
  734. /*************************************************
  735. *          Check POSIX class name                *
  736. *************************************************/
  737. /* This function is called to check the name given in a POSIX-style class entry
  738. such as [:alnum:].
  739. Arguments:
  740.   ptr        points to the first letter
  741.   len        the length of the name
  742. Returns:     a value representing the name, or -1 if unknown
  743. */
  744. static int
  745. check_posix_name(const uschar *ptr, int len)
  746. {
  747. register int yield = 0;
  748. while (posix_name_lengths[yield] != 0)
  749.   {
  750.   if (len == posix_name_lengths[yield] &&
  751.     strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
  752.   yield++;
  753.   }
  754. return -1;
  755. }
  756. /*************************************************
  757. *           Compile one branch                   *
  758. *************************************************/
  759. /* Scan the pattern, compiling it into the code vector.
  760. Arguments:
  761.   options      the option bits
  762.   brackets     points to number of extracting brackets used
  763.   code         points to the pointer to the current code point
  764.   ptrptr       points to the current pattern pointer
  765.   errorptr     points to pointer to error message
  766.   optchanged   set to the value of the last OP_OPT item compiled
  767.   reqchar      set to the last literal character required, else -1
  768.   countlits    set to count of mandatory literal characters
  769.   cd           contains pointers to tables
  770. Returns:       TRUE on success
  771.                FALSE, with *errorptr set on error
  772. */
  773. static BOOL
  774. compile_branch(int options, int *brackets, uschar **codeptr,
  775.   const uschar **ptrptr, const char **errorptr, int *optchanged,
  776.   int *reqchar, int *countlits, compile_data *cd)
  777. {
  778. int repeat_type, op_type;
  779. int repeat_min, repeat_max;
  780. int bravalue, length;
  781. int greedy_default, greedy_non_default;
  782. int prevreqchar;
  783. int condcount = 0;
  784. int subcountlits = 0;
  785. register int c;
  786. register uschar *code = *codeptr;
  787. uschar *tempcode;
  788. const uschar *ptr = *ptrptr;
  789. const uschar *tempptr;
  790. uschar *previous = NULL;
  791. uschar class[32];
  792. /* Set up the default and non-default settings for greediness */
  793. greedy_default = ((options & PCRE_UNGREEDY) != 0);
  794. greedy_non_default = greedy_default ^ 1;
  795. /* Initialize no required char, and count of literals */
  796. *reqchar = prevreqchar = -1;
  797. *countlits = 0;
  798. /* Switch on next character until the end of the branch */
  799. for (;; ptr++)
  800.   {
  801.   BOOL negate_class;
  802.   int class_charcount;
  803.   int class_lastchar;
  804.   int newoptions;
  805.   int skipbytes;
  806.   int subreqchar;
  807.   c = *ptr;
  808.   if ((options & PCRE_EXTENDED) != 0)
  809.     {
  810.     if ((cd->ctypes[c] & ctype_space) != 0) continue;
  811.     if (c == '#')
  812.       {
  813.       /* The space before the ; is to avoid a warning on a silly compiler
  814.       on the Macintosh. */
  815.       while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
  816.       continue;
  817.       }
  818.     }
  819.   switch(c)
  820.     {
  821.     /* The branch terminates at end of string, |, or ). */
  822.     case 0:
  823.     case '|':
  824.     case ')':
  825.     *codeptr = code;
  826.     *ptrptr = ptr;
  827.     return TRUE;
  828.     /* Handle single-character metacharacters */
  829.     case '^':
  830.     previous = NULL;
  831.     *code++ = OP_CIRC;
  832.     break;
  833.     case '$':
  834.     previous = NULL;
  835.     *code++ = OP_DOLL;
  836.     break;
  837.     case '.':
  838.     previous = code;
  839.     *code++ = OP_ANY;
  840.     break;
  841.     /* Character classes. These always build a 32-byte bitmap of the permitted
  842.     characters, except in the special case where there is only one character.
  843.     For negated classes, we build the map as usual, then invert it at the end.
  844.     */
  845.     case '[':
  846.     previous = code;
  847.     *code++ = OP_CLASS;
  848.     /* If the first character is '^', set the negation flag and skip it. */
  849.     if ((c = *(++ptr)) == '^')
  850.       {
  851.       negate_class = TRUE;
  852.       c = *(++ptr);
  853.       }
  854.     else negate_class = FALSE;
  855.     /* Keep a count of chars so that we can optimize the case of just a single
  856.     character. */
  857.     class_charcount = 0;
  858.     class_lastchar = -1;
  859.     /* Initialize the 32-char bit map to all zeros. We have to build the
  860.     map in a temporary bit of store, in case the class contains only 1
  861.     character, because in that case the compiled code doesn't use the
  862.     bit map. */
  863.     memset(class, 0, 32 * sizeof(uschar));
  864.     /* Process characters until ] is reached. By writing this as a "do" it
  865.     means that an initial ] is taken as a data character. */
  866.     do
  867.       {
  868.       if (c == 0)
  869.         {
  870.         *errorptr = ERR6;
  871.         goto FAILED;
  872.         }
  873.       /* Handle POSIX class names. Perl allows a negation extension of the
  874.       form [:^name]. A square bracket that doesn't match the syntax is
  875.       treated as a literal. We also recognize the POSIX constructions
  876.       [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
  877.       5.6 does. */
  878.       if (c == '[' &&
  879.           (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
  880.           check_posix_syntax(ptr, &tempptr, cd))
  881.         {
  882.         BOOL local_negate = FALSE;
  883.         int posix_class, i;
  884.         register const uschar *cbits = cd->cbits;
  885.         if (ptr[1] != ':')
  886.           {
  887.           *errorptr = ERR31;
  888.           goto FAILED;
  889.           }
  890.         ptr += 2;
  891.         if (*ptr == '^')
  892.           {
  893.           local_negate = TRUE;
  894.           ptr++;
  895.           }
  896.         posix_class = check_posix_name(ptr, tempptr - ptr);
  897.         if (posix_class < 0)
  898.           {
  899.           *errorptr = ERR30;
  900.           goto FAILED;
  901.           }
  902.         /* If matching is caseless, upper and lower are converted to
  903.         alpha. This relies on the fact that the class table starts with
  904.         alpha, lower, upper as the first 3 entries. */
  905.         if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
  906.           posix_class = 0;
  907.         /* Or into the map we are building up to 3 of the static class
  908.         tables, or their negations. */
  909.         posix_class *= 3;
  910.         for (i = 0; i < 3; i++)
  911.           {
  912.           int taboffset = posix_class_maps[posix_class + i];
  913.           if (taboffset < 0) break;
  914.           if (local_negate)
  915.             for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
  916.           else
  917.             for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
  918.           }
  919.         ptr = tempptr + 1;
  920.         class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
  921.         continue;
  922.         }
  923.       /* Backslash may introduce a single character, or it may introduce one
  924.       of the specials, which just set a flag. Escaped items are checked for
  925.       validity in the pre-compiling pass. The sequence b is a special case.
  926.       Inside a class (and only there) it is treated as backspace. Elsewhere
  927.       it marks a word boundary. Other escapes have preset maps ready to
  928.       or into the one we are building. We assume they have more than one
  929.       character in them, so set class_count bigger than one. */
  930.       if (c == '\')
  931.         {
  932.         c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  933.         if (-c == ESC_b) c = 'b';
  934.         else if (c < 0)
  935.           {
  936.           register const uschar *cbits = cd->cbits;
  937.           class_charcount = 10;
  938.           switch (-c)
  939.             {
  940.             case ESC_d:
  941.             for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
  942.             continue;
  943.             case ESC_D:
  944.             for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
  945.             continue;
  946.             case ESC_w:
  947.             for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
  948.             continue;
  949.             case ESC_W:
  950.             for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
  951.             continue;
  952.             case ESC_s:
  953.             for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
  954.             continue;
  955.             case ESC_S:
  956.             for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
  957.             continue;
  958.             default:
  959.             *errorptr = ERR7;
  960.             goto FAILED;
  961.             }
  962.           }
  963.         /* Fall through if single character, but don't at present allow
  964.         chars > 255 in UTF-8 mode. */
  965. #ifdef SUPPORT_UTF8
  966.         if (c > 255)
  967.           {
  968.           *errorptr = ERR33;
  969.           goto FAILED;
  970.           }
  971. #endif
  972.         }
  973.       /* A single character may be followed by '-' to form a range. However,
  974.       Perl does not permit ']' to be the end of the range. A '-' character
  975.       here is treated as a literal. */
  976.       if (ptr[1] == '-' && ptr[2] != ']')
  977.         {
  978.         int d;
  979.         ptr += 2;
  980.         d = *ptr;
  981.         if (d == 0)
  982.           {
  983.           *errorptr = ERR6;
  984.           goto FAILED;
  985.           }
  986.         /* The second part of a range can be a single-character escape, but
  987.         not any of the other escapes. Perl 5.6 treats a hyphen as a literal
  988.         in such circumstances. */
  989.         if (d == '\')
  990.           {
  991.           const uschar *oldptr = ptr;
  992.           d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
  993. #ifdef SUPPORT_UTF8
  994.           if (d > 255)
  995.             {
  996.             *errorptr = ERR33;
  997.             goto FAILED;
  998.             }
  999. #endif
  1000.           /* b is backslash; any other special means the '-' was literal */
  1001.           if (d < 0)
  1002.             {
  1003.             if (d == -ESC_b) d = 'b'; else
  1004.               {
  1005.               ptr = oldptr - 2;
  1006.               goto SINGLE_CHARACTER;  /* A few lines below */
  1007.               }
  1008.             }
  1009.           }
  1010.         if (d < c)
  1011.           {
  1012.           *errorptr = ERR8;
  1013.           goto FAILED;
  1014.           }
  1015.         for (; c <= d; c++)
  1016.           {
  1017.           class[c/8] |= (1 << (c&7));
  1018.           if ((options & PCRE_CASELESS) != 0)
  1019.             {
  1020.             int uc = cd->fcc[c];           /* flip case */
  1021.             class[uc/8] |= (1 << (uc&7));
  1022.             }
  1023.           class_charcount++;                /* in case a one-char range */
  1024.           class_lastchar = c;
  1025.           }
  1026.         continue;   /* Go get the next char in the class */
  1027.         }
  1028.       /* Handle a lone single character - we can get here for a normal
  1029.       non-escape char, or after  that introduces a single character. */
  1030.       SINGLE_CHARACTER:
  1031.       class [c/8] |= (1 << (c&7));
  1032.       if ((options & PCRE_CASELESS) != 0)
  1033.         {
  1034.         c = cd->fcc[c];   /* flip case */
  1035.         class[c/8] |= (1 << (c&7));
  1036.         }
  1037.       class_charcount++;
  1038.       class_lastchar = c;
  1039.       }
  1040.     /* Loop until ']' reached; the check for end of string happens inside the
  1041.     loop. This "while" is the end of the "do" above. */
  1042.     while ((c = *(++ptr)) != ']');
  1043.     /* If class_charcount is 1 and class_lastchar is not negative, we saw
  1044.     precisely one character. This doesn't need the whole 32-byte bit map.
  1045.     We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
  1046.     it's negative. */
  1047.     if (class_charcount == 1 && class_lastchar >= 0)
  1048.       {
  1049.       if (negate_class)
  1050.         {
  1051.         code[-1] = OP_NOT;
  1052.         }
  1053.       else
  1054.         {
  1055.         code[-1] = OP_CHARS;
  1056.         *code++ = 1;
  1057.         }
  1058.       *code++ = class_lastchar;
  1059.       }
  1060.     /* Otherwise, negate the 32-byte map if necessary, and copy it into
  1061.     the code vector. */
  1062.     else
  1063.       {
  1064.       if (negate_class)
  1065.         for (c = 0; c < 32; c++) code[c] = ~class[c];
  1066.       else
  1067.         memcpy(code, class, 32);
  1068.       code += 32;
  1069.       }
  1070.     break;
  1071.     /* Various kinds of repeat */
  1072.     case '{':
  1073.     if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
  1074.     ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
  1075.     if (*errorptr != NULL) goto FAILED;
  1076.     goto REPEAT;
  1077.     case '*':
  1078.     repeat_min = 0;
  1079.     repeat_max = -1;
  1080.     goto REPEAT;
  1081.     case '+':
  1082.     repeat_min = 1;
  1083.     repeat_max = -1;
  1084.     goto REPEAT;
  1085.     case '?':
  1086.     repeat_min = 0;
  1087.     repeat_max = 1;
  1088.     REPEAT:
  1089.     if (previous == NULL)
  1090.       {
  1091.       *errorptr = ERR9;
  1092.       goto FAILED;
  1093.       }
  1094.     /* If the next character is '?' this is a minimizing repeat, by default,
  1095.     but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
  1096.     next character. */
  1097.     if (ptr[1] == '?')
  1098.       { repeat_type = greedy_non_default; ptr++; }
  1099.     else repeat_type = greedy_default;
  1100.     /* If previous was a string of characters, chop off the last one and use it
  1101.     as the subject of the repeat. If there was only one character, we can
  1102.     abolish the previous item altogether. A repeat with a zero minimum wipes
  1103.     out any reqchar setting, backing up to the previous value. We must also
  1104.     adjust the countlits value. */
  1105.     if (*previous == OP_CHARS)
  1106.       {
  1107.       int len = previous[1];
  1108.       if (repeat_min == 0) *reqchar = prevreqchar;
  1109.       *countlits += repeat_min - 1;
  1110.       if (len == 1)
  1111.         {
  1112.         c = previous[2];
  1113.         code = previous;
  1114.         }
  1115.       else
  1116.         {
  1117.         c = previous[len+1];
  1118.         previous[1]--;
  1119.         code--;
  1120.         }
  1121.       op_type = 0;                 /* Use single-char op codes */
  1122.       goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
  1123.       }
  1124.     /* If previous was a single negated character ([^a] or similar), we use
  1125.     one of the special opcodes, replacing it. The code is shared with single-
  1126.     character repeats by adding a suitable offset into repeat_type. */
  1127.     else if ((int)*previous == OP_NOT)
  1128.       {
  1129.       op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
  1130.       c = previous[1];
  1131.       code = previous;
  1132.       goto OUTPUT_SINGLE_REPEAT;
  1133.       }
  1134.     /* If previous was a character type match (d or similar), abolish it and
  1135.     create a suitable repeat item. The code is shared with single-character
  1136.     repeats by adding a suitable offset into repeat_type. */
  1137.     else if ((int)*previous < OP_EODN || *previous == OP_ANY)
  1138.       {
  1139.       op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
  1140.       c = *previous;
  1141.       code = previous;
  1142.       OUTPUT_SINGLE_REPEAT:
  1143.       /* If the maximum is zero then the minimum must also be zero; Perl allows
  1144.       this case, so we do too - by simply omitting the item altogether. */
  1145.       if (repeat_max == 0) goto END_REPEAT;
  1146.       /* Combine the op_type with the repeat_type */
  1147.       repeat_type += op_type;
  1148.       /* A minimum of zero is handled either as the special case * or ?, or as
  1149.       an UPTO, with the maximum given. */
  1150.       if (repeat_min == 0)
  1151.         {
  1152.         if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
  1153.           else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
  1154.         else
  1155.           {
  1156.           *code++ = OP_UPTO + repeat_type;
  1157.           *code++ = repeat_max >> 8;
  1158.           *code++ = (repeat_max & 255);
  1159.           }
  1160.         }
  1161.       /* The case {1,} is handled as the special case + */
  1162.       else if (repeat_min == 1 && repeat_max == -1)
  1163.         *code++ = OP_PLUS + repeat_type;
  1164.       /* The case {n,n} is just an EXACT, while the general case {n,m} is
  1165.       handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
  1166.       else
  1167.         {
  1168.         if (repeat_min != 1)
  1169.           {
  1170.           *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
  1171.           *code++ = repeat_min >> 8;
  1172.           *code++ = (repeat_min & 255);
  1173.           }
  1174.         /* If the mininum is 1 and the previous item was a character string,
  1175.         we either have to put back the item that got cancelled if the string
  1176.         length was 1, or add the character back onto the end of a longer
  1177.         string. For a character type nothing need be done; it will just get
  1178.         put back naturally. Note that the final character is always going to
  1179.         get added below. */
  1180.         else if (*previous == OP_CHARS)
  1181.           {
  1182.           if (code == previous) code += 2; else previous[1]++;
  1183.           }
  1184.         /*  For a single negated character we also have to put back the
  1185.         item that got cancelled. */
  1186.         else if (*previous == OP_NOT) code++;
  1187.         /* If the maximum is unlimited, insert an OP_STAR. */
  1188.         if (repeat_max < 0)
  1189.           {
  1190.           *code++ = c;
  1191.           *code++ = OP_STAR + repeat_type;
  1192.           }
  1193.         /* Else insert an UPTO if the max is greater than the min. */
  1194.         else if (repeat_max != repeat_min)
  1195.           {
  1196.           *code++ = c;
  1197.           repeat_max -= repeat_min;
  1198.           *code++ = OP_UPTO + repeat_type;
  1199.           *code++ = repeat_max >> 8;
  1200.           *code++ = (repeat_max & 255);
  1201.           }
  1202.         }
  1203.       /* The character or character type itself comes last in all cases. */
  1204.       *code++ = c;
  1205.       }
  1206.     /* If previous was a character class or a back reference, we put the repeat
  1207.     stuff after it, but just skip the item if the repeat was {0,0}. */
  1208.     else if (*previous == OP_CLASS || *previous == OP_REF)
  1209.       {
  1210.       if (repeat_max == 0)
  1211.         {
  1212.         code = previous;
  1213.         goto END_REPEAT;
  1214.         }
  1215.       if (repeat_min == 0 && repeat_max == -1)
  1216.         *code++ = OP_CRSTAR + repeat_type;
  1217.       else if (repeat_min == 1 && repeat_max == -1)
  1218.         *code++ = OP_CRPLUS + repeat_type;
  1219.       else if (repeat_min == 0 && repeat_max == 1)
  1220.         *code++ = OP_CRQUERY + repeat_type;
  1221.       else
  1222.         {
  1223.         *code++ = OP_CRRANGE + repeat_type;
  1224.         *code++ = repeat_min >> 8;
  1225.         *code++ = repeat_min & 255;
  1226.         if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
  1227.         *code++ = repeat_max >> 8;
  1228.         *code++ = repeat_max & 255;
  1229.         }
  1230.       }
  1231.     /* If previous was a bracket group, we may have to replicate it in certain
  1232.     cases. */
  1233.     else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
  1234.              (int)*previous == OP_COND)
  1235.       {
  1236.       register int i;
  1237.       int ketoffset = 0;
  1238.       int len = code - previous;
  1239.       uschar *bralink = NULL;
  1240.       /* If the maximum repeat count is unlimited, find the end of the bracket
  1241.       by scanning through from the start, and compute the offset back to it
  1242.       from the current code pointer. There may be an OP_OPT setting following
  1243.       the final KET, so we can't find the end just by going back from the code
  1244.       pointer. */
  1245.       if (repeat_max == -1)
  1246.         {
  1247.         register uschar *ket = previous;
  1248.         do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
  1249.         ketoffset = code - ket;
  1250.         }
  1251.       /* The case of a zero minimum is special because of the need to stick
  1252.       OP_BRAZERO in front of it, and because the group appears once in the
  1253.       data, whereas in other cases it appears the minimum number of times. For
  1254.       this reason, it is simplest to treat this case separately, as otherwise
  1255.       the code gets far too messy. There are several special subcases when the
  1256.       minimum is zero. */
  1257.       if (repeat_min == 0)
  1258.         {
  1259.         /* If we set up a required char from the bracket, we must back off
  1260.         to the previous value and reset the countlits value too. */
  1261.         if (subcountlits > 0)
  1262.           {
  1263.           *reqchar = prevreqchar;
  1264.           *countlits -= subcountlits;
  1265.           }
  1266.         /* If the maximum is also zero, we just omit the group from the output
  1267.         altogether. */
  1268.         if (repeat_max == 0)
  1269.           {
  1270.           code = previous;
  1271.           goto END_REPEAT;
  1272.           }
  1273.         /* If the maximum is 1 or unlimited, we just have to stick in the
  1274.         BRAZERO and do no more at this point. */
  1275.         if (repeat_max <= 1)
  1276.           {
  1277.           memmove(previous+1, previous, len);
  1278.           code++;
  1279.           *previous++ = OP_BRAZERO + repeat_type;
  1280.           }
  1281.         /* If the maximum is greater than 1 and limited, we have to replicate
  1282.         in a nested fashion, sticking OP_BRAZERO before each set of brackets.
  1283.         The first one has to be handled carefully because it's the original
  1284.         copy, which has to be moved up. The remainder can be handled by code
  1285.         that is common with the non-zero minimum case below. We just have to
  1286.         adjust the value or repeat_max, since one less copy is required. */
  1287.         else
  1288.           {
  1289.           int offset;
  1290.           memmove(previous+4, previous, len);
  1291.           code += 4;
  1292.           *previous++ = OP_BRAZERO + repeat_type;
  1293.           *previous++ = OP_BRA;
  1294.           /* We chain together the bracket offset fields that have to be
  1295.           filled in later when the ends of the brackets are reached. */
  1296.           offset = (bralink == NULL)? 0 : previous - bralink;
  1297.           bralink = previous;
  1298.           *previous++ = offset >> 8;
  1299.           *previous++ = offset & 255;
  1300.           }
  1301.         repeat_max--;
  1302.         }
  1303.       /* If the minimum is greater than zero, replicate the group as many
  1304.       times as necessary, and adjust the maximum to the number of subsequent
  1305.       copies that we need. */
  1306.       else
  1307.         {
  1308.         for (i = 1; i < repeat_min; i++)
  1309.           {
  1310.           memcpy(code, previous, len);
  1311.           code += len;
  1312.           }
  1313.         if (repeat_max > 0) repeat_max -= repeat_min;
  1314.         }
  1315.       /* This code is common to both the zero and non-zero minimum cases. If
  1316.       the maximum is limited, it replicates the group in a nested fashion,
  1317.       remembering the bracket starts on a stack. In the case of a zero minimum,
  1318.       the first one was set up above. In all cases the repeat_max now specifies
  1319.       the number of additional copies needed. */
  1320.       if (repeat_max >= 0)
  1321.         {
  1322.         for (i = repeat_max - 1; i >= 0; i--)
  1323.           {
  1324.           *code++ = OP_BRAZERO + repeat_type;
  1325.           /* All but the final copy start a new nesting, maintaining the
  1326.           chain of brackets outstanding. */
  1327.           if (i != 0)
  1328.             {
  1329.             int offset;
  1330.             *code++ = OP_BRA;
  1331.             offset = (bralink == NULL)? 0 : code - bralink;
  1332.             bralink = code;
  1333.             *code++ = offset >> 8;
  1334.             *code++ = offset & 255;
  1335.             }
  1336.           memcpy(code, previous, len);
  1337.           code += len;
  1338.           }
  1339.         /* Now chain through the pending brackets, and fill in their length
  1340.         fields (which are holding the chain links pro tem). */
  1341.         while (bralink != NULL)
  1342.           {
  1343.           int oldlinkoffset;
  1344.           int offset = code - bralink + 1;
  1345.           uschar *bra = code - offset;
  1346.           oldlinkoffset = (bra[1] << 8) + bra[2];
  1347.           bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
  1348.           *code++ = OP_KET;
  1349.           *code++ = bra[1] = offset >> 8;
  1350.           *code++ = bra[2] = (offset & 255);
  1351.           }
  1352.         }
  1353.       /* If the maximum is unlimited, set a repeater in the final copy. We
  1354.       can't just offset backwards from the current code point, because we
  1355.       don't know if there's been an options resetting after the ket. The
  1356.       correct offset was computed above. */
  1357.       else code[-ketoffset] = OP_KETRMAX + repeat_type;
  1358.       }
  1359.     /* Else there's some kind of shambles */
  1360.     else
  1361.       {
  1362.       *errorptr = ERR11;
  1363.       goto FAILED;
  1364.       }
  1365.     /* In all case we no longer have a previous item. */
  1366.     END_REPEAT:
  1367.     previous = NULL;
  1368.     break;
  1369.     /* Start of nested bracket sub-expression, or comment or lookahead or
  1370.     lookbehind or option setting or condition. First deal with special things
  1371.     that can come after a bracket; all are introduced by ?, and the appearance
  1372.     of any of them means that this is not a referencing group. They were
  1373.     checked for validity in the first pass over the string, so we don't have to
  1374.     check for syntax errors here.  */
  1375.     case '(':
  1376.     newoptions = options;
  1377.     skipbytes = 0;
  1378.     if (*(++ptr) == '?')
  1379.       {
  1380.       int set, unset;
  1381.       int *optset;
  1382.       switch (*(++ptr))
  1383.         {
  1384.         case '#':                 /* Comment; skip to ket */
  1385.         ptr++;
  1386.         while (*ptr != ')') ptr++;
  1387.         continue;
  1388.         case ':':                 /* Non-extracting bracket */
  1389.         bravalue = OP_BRA;
  1390.         ptr++;
  1391.         break;
  1392.         case '(':
  1393.         bravalue = OP_COND;       /* Conditional group */
  1394.         if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
  1395.           {
  1396.           int condref = *ptr - '0';
  1397.           while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
  1398.           if (condref == 0)
  1399.             {
  1400.             *errorptr = ERR35;
  1401.             goto FAILED;
  1402.             }
  1403.           ptr++;
  1404.           code[3] = OP_CREF;
  1405.           code[4] = condref >> 8;
  1406.           code[5] = condref & 255;
  1407.           skipbytes = 3;
  1408.           }
  1409.         else ptr--;
  1410.         break;
  1411.         case '=':                 /* Positive lookahead */
  1412.         bravalue = OP_ASSERT;
  1413.         ptr++;
  1414.         break;
  1415.         case '!':                 /* Negative lookahead */
  1416.         bravalue = OP_ASSERT_NOT;
  1417.         ptr++;
  1418.         break;
  1419.         case '<':                 /* Lookbehinds */
  1420.         switch (*(++ptr))
  1421.           {
  1422.           case '=':               /* Positive lookbehind */
  1423.           bravalue = OP_ASSERTBACK;
  1424.           ptr++;
  1425.           break;
  1426.           case '!':               /* Negative lookbehind */
  1427.           bravalue = OP_ASSERTBACK_NOT;
  1428.           ptr++;
  1429.           break;
  1430.           default:                /* Syntax error */
  1431.           *errorptr = ERR24;
  1432.           goto FAILED;
  1433.           }
  1434.         break;
  1435.         case '>':                 /* One-time brackets */
  1436.         bravalue = OP_ONCE;
  1437.         ptr++;
  1438.         break;
  1439.         case 'R':                 /* Pattern recursion */
  1440.         *code++ = OP_RECURSE;
  1441.         ptr++;
  1442.         continue;
  1443.         default:                  /* Option setting */
  1444.         set = unset = 0;
  1445.         optset = &set;
  1446.         while (*ptr != ')' && *ptr != ':')
  1447.           {
  1448.           switch (*ptr++)
  1449.             {
  1450.             case '-': optset = &unset; break;
  1451.             case 'i': *optset |= PCRE_CASELESS; break;
  1452.             case 'm': *optset |= PCRE_MULTILINE; break;
  1453.             case 's': *optset |= PCRE_DOTALL; break;
  1454.             case 'x': *optset |= PCRE_EXTENDED; break;
  1455.             case 'U': *optset |= PCRE_UNGREEDY; break;
  1456.             case 'X': *optset |= PCRE_EXTRA; break;
  1457.             default:
  1458.             *errorptr = ERR12;
  1459.             goto FAILED;
  1460.             }
  1461.           }
  1462.         /* Set up the changed option bits, but don't change anything yet. */
  1463.         newoptions = (options | set) & (~unset);
  1464.         /* If the options ended with ')' this is not the start of a nested
  1465.         group with option changes, so the options change at this level. At top
  1466.         level there is nothing else to be done (the options will in fact have
  1467.         been set from the start of compiling as a result of the first pass) but
  1468.         at an inner level we must compile code to change the ims options if
  1469.         necessary, and pass the new setting back so that it can be put at the
  1470.         start of any following branches, and when this group ends, a resetting
  1471.         item can be compiled. */
  1472.         if (*ptr == ')')
  1473.           {
  1474.           if ((options & PCRE_INGROUP) != 0 &&
  1475.               (options & PCRE_IMS) != (newoptions & PCRE_IMS))
  1476.             {
  1477.             *code++ = OP_OPT;
  1478.             *code++ = *optchanged = newoptions & PCRE_IMS;
  1479.             }
  1480.           options = newoptions;  /* Change options at this level */
  1481.           previous = NULL;       /* This item can't be repeated */
  1482.           continue;              /* It is complete */
  1483.           }
  1484.         /* If the options ended with ':' we are heading into a nested group
  1485.         with possible change of options. Such groups are non-capturing and are
  1486.         not assertions of any kind. All we need to do is skip over the ':';
  1487.         the newoptions value is handled below. */
  1488.         bravalue = OP_BRA;
  1489.         ptr++;
  1490.         }
  1491.       }
  1492.     /* Else we have a referencing group; adjust the opcode. If the bracket
  1493.     number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
  1494.     arrange for the true number to follow later, in an OP_BRANUMBER item. */
  1495.     else
  1496.       {
  1497.       if (++(*brackets) > EXTRACT_BASIC_MAX)
  1498.         {
  1499.         bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
  1500.         code[3] = OP_BRANUMBER;
  1501.         code[4] = *brackets >> 8;
  1502.         code[5] = *brackets & 255;
  1503.         skipbytes = 3;
  1504.         }
  1505.       else bravalue = OP_BRA + *brackets;
  1506.       }
  1507.     /* Process nested bracketed re. Assertions may not be repeated, but other
  1508.     kinds can be. We copy code into a non-register variable in order to be able
  1509.     to pass its address because some compilers complain otherwise. Pass in a
  1510.     new setting for the ims options if they have changed. */
  1511.     previous = (bravalue >= OP_ONCE)? code : NULL;
  1512.     *code = bravalue;
  1513.     tempcode = code;
  1514.     if (!compile_regex(
  1515.          options | PCRE_INGROUP,       /* Set for all nested groups */
  1516.          ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
  1517.            newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
  1518.          brackets,                     /* Extracting bracket count */
  1519.          &tempcode,                    /* Where to put code (updated) */
  1520.          &ptr,                         /* Input pointer (updated) */
  1521.          errorptr,                     /* Where to put an error message */
  1522.          (bravalue == OP_ASSERTBACK ||
  1523.           bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
  1524.          skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
  1525.          &subreqchar,                  /* For possible last char */
  1526.          &subcountlits,                /* For literal count */
  1527.          cd))                          /* Tables block */
  1528.       goto FAILED;
  1529.     /* At the end of compiling, code is still pointing to the start of the
  1530.     group, while tempcode has been updated to point past the end of the group
  1531.     and any option resetting that may follow it. The pattern pointer (ptr)
  1532.     is on the bracket. */
  1533.     /* If this is a conditional bracket, check that there are no more than
  1534.     two branches in the group. */
  1535.     else if (bravalue == OP_COND)
  1536.       {
  1537.       uschar *tc = code;
  1538.       condcount = 0;
  1539.       do {
  1540.          condcount++;
  1541.          tc += (tc[1] << 8) | tc[2];
  1542.          }
  1543.       while (*tc != OP_KET);
  1544.       if (condcount > 2)
  1545.         {
  1546.         *errorptr = ERR27;
  1547.         goto FAILED;
  1548.         }
  1549.       }
  1550.     /* Handle updating of the required character. If the subpattern didn't
  1551.     set one, leave it as it was. Otherwise, update it for normal brackets of
  1552.     all kinds, forward assertions, and conditions with two branches. Don't
  1553.     update the literal count for forward assertions, however. If the bracket
  1554.     is followed by a quantifier with zero repeat, we have to back off. Hence
  1555.     the definition of prevreqchar and subcountlits outside the main loop so
  1556.     that they can be accessed for the back off. */
  1557.     if (subreqchar > 0 &&
  1558.          (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
  1559.          (bravalue == OP_COND && condcount == 2)))
  1560.       {
  1561.       prevreqchar = *reqchar;
  1562.       *reqchar = subreqchar;
  1563.       if (bravalue != OP_ASSERT) *countlits += subcountlits;
  1564.       }
  1565.     /* Now update the main code pointer to the end of the group. */
  1566.     code = tempcode;
  1567.     /* Error if hit end of pattern */
  1568.     if (*ptr != ')')
  1569.       {
  1570.       *errorptr = ERR14;
  1571.       goto FAILED;
  1572.       }
  1573.     break;
  1574.     /* Check  for being a real metacharacter; if not, fall through and handle
  1575.     it as a data character at the start of a string. Escape items are checked
  1576.     for validity in the pre-compiling pass. */
  1577.     case '\':
  1578.     tempptr = ptr;
  1579.     c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  1580.     /* Handle metacharacters introduced by . For ones like d, the ESC_ values
  1581.     are arranged to be the negation of the corresponding OP_values. For the
  1582.     back references, the values are ESC_REF plus the reference number. Only
  1583.     back references and those types that consume a character may be repeated.
  1584.     We can test for values between ESC_b and ESC_Z for the latter; this may
  1585.     have to change if any new ones are ever created. */
  1586.     if (c < 0)
  1587.       {
  1588.       if (-c >= ESC_REF)
  1589.         {
  1590.         int number = -c - ESC_REF;
  1591.         previous = code;
  1592.         *code++ = OP_REF;
  1593.         *code++ = number >> 8;
  1594.         *code++ = number & 255;
  1595.         }
  1596.       else
  1597.         {
  1598.         previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
  1599.         *code++ = -c;
  1600.         }
  1601.       continue;
  1602.       }
  1603.     /* Data character: reset and fall through */
  1604.     ptr = tempptr;
  1605.     c = '\';
  1606.     /* Handle a run of data characters until a metacharacter is encountered.
  1607.     The first character is guaranteed not to be whitespace or # when the
  1608.     extended flag is set. */
  1609.     NORMAL_CHAR:
  1610.     default:
  1611.     previous = code;
  1612.     *code = OP_CHARS;
  1613.     code += 2;
  1614.     length = 0;
  1615.     do
  1616.       {
  1617.       if ((options & PCRE_EXTENDED) != 0)
  1618.         {
  1619.         if ((cd->ctypes[c] & ctype_space) != 0) continue;
  1620.         if (c == '#')
  1621.           {
  1622.           /* The space before the ; is to avoid a warning on a silly compiler
  1623.           on the Macintosh. */
  1624.           while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
  1625.           if (c == 0) break;
  1626.           continue;
  1627.           }
  1628.         }
  1629.       /* Backslash may introduce a data char or a metacharacter. Escaped items
  1630.       are checked for validity in the pre-compiling pass. Stop the string
  1631.       before a metaitem. */
  1632.       if (c == '\')
  1633.         {
  1634.         tempptr = ptr;
  1635.         c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
  1636.         if (c < 0) { ptr = tempptr; break; }
  1637.         /* If a character is > 127 in UTF-8 mode, we have to turn it into
  1638.         two or more characters in the UTF-8 encoding. */
  1639. #ifdef SUPPORT_UTF8
  1640.         if (c > 127 && (options & PCRE_UTF8) != 0)
  1641.           {
  1642.           uschar buffer[8];
  1643.           int len = ord2utf8(c, buffer);
  1644.           for (c = 0; c < len; c++) *code++ = buffer[c];
  1645.           length += len;
  1646.           continue;
  1647.           }
  1648. #endif
  1649.         }
  1650.       /* Ordinary character or single-char escape */
  1651.       *code++ = c;
  1652.       length++;
  1653.       }
  1654.     /* This "while" is the end of the "do" above. */
  1655.     while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
  1656.     /* Update the last character and the count of literals */
  1657.     prevreqchar = (length > 1)? code[-2] : *reqchar;
  1658.     *reqchar = code[-1];
  1659.     *countlits += length;
  1660.     /* Compute the length and set it in the data vector, and advance to
  1661.     the next state. */
  1662.     previous[1] = length;
  1663.     if (length < MAXLIT) ptr--;
  1664.     break;
  1665.     }
  1666.   }                   /* end of big loop */
  1667. /* Control never reaches here by falling through, only by a goto for all the
  1668. error states. Pass back the position in the pattern so that it can be displayed
  1669. to the user for diagnosing the error. */
  1670. FAILED:
  1671. *ptrptr = ptr;
  1672. return FALSE;
  1673. }
  1674. /*************************************************
  1675. *     Compile sequence of alternatives           *
  1676. *************************************************/
  1677. /* On entry, ptr is pointing past the bracket character, but on return
  1678. it points to the closing bracket, or vertical bar, or end of string.
  1679. The code variable is pointing at the byte into which the BRA operator has been
  1680. stored. If the ims options are changed at the start (for a (?ims: group) or
  1681. during any branch, we need to insert an OP_OPT item at the start of every
  1682. following branch to ensure they get set correctly at run time, and also pass
  1683. the new options into every subsequent branch compile.
  1684. Argument:
  1685.   options     the option bits
  1686.   optchanged  new ims options to set as if (?ims) were at the start, or -1
  1687.                for no change
  1688.   brackets    -> int containing the number of extracting brackets used
  1689.   codeptr     -> the address of the current code pointer
  1690.   ptrptr      -> the address of the current pattern pointer
  1691.   errorptr    -> pointer to error message
  1692.   lookbehind  TRUE if this is a lookbehind assertion
  1693.   skipbytes   skip this many bytes at start (for OP_COND, OP_BRANUMBER)
  1694.   reqchar     -> place to put the last required character, or a negative number
  1695.   countlits   -> place to put the shortest literal count of any branch
  1696.   cd          points to the data block with tables pointers
  1697. Returns:      TRUE on success
  1698. */
  1699. static BOOL
  1700. compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  1701.   const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
  1702.   int *reqchar, int *countlits, compile_data *cd)
  1703. {
  1704. const uschar *ptr = *ptrptr;
  1705. uschar *code = *codeptr;
  1706. uschar *last_branch = code;
  1707. uschar *start_bracket = code;
  1708. uschar *reverse_count = NULL;
  1709. int oldoptions = options & PCRE_IMS;
  1710. int branchreqchar, branchcountlits;
  1711. *reqchar = -1;
  1712. *countlits = INT_MAX;
  1713. code += 3 + skipbytes;
  1714. /* Loop for each alternative branch */
  1715. for (;;)
  1716.   {
  1717.   int length;
  1718.   /* Handle change of options */
  1719.   if (optchanged >= 0)
  1720.     {
  1721.     *code++ = OP_OPT;
  1722.     *code++ = optchanged;
  1723.     options = (options & ~PCRE_IMS) | optchanged;
  1724.     }
  1725.   /* Set up dummy OP_REVERSE if lookbehind assertion */
  1726.   if (lookbehind)
  1727.     {
  1728.     *code++ = OP_REVERSE;
  1729.     reverse_count = code;
  1730.     *code++ = 0;
  1731.     *code++ = 0;
  1732.     }
  1733.   /* Now compile the branch */
  1734.   if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
  1735.       &branchreqchar, &branchcountlits, cd))
  1736.     {
  1737.     *ptrptr = ptr;
  1738.     return FALSE;
  1739.     }
  1740.   /* Fill in the length of the last branch */
  1741.   length = code - last_branch;
  1742.   last_branch[1] = length >> 8;
  1743.   last_branch[2] = length & 255;
  1744.   /* Save the last required character if all branches have the same; a current
  1745.   value of -1 means unset, while -2 means "previous branch had no last required
  1746.   char".  */
  1747.   if (*reqchar != -2)
  1748.     {
  1749.     if (branchreqchar >= 0)
  1750.       {
  1751.       if (*reqchar == -1) *reqchar = branchreqchar;
  1752.       else if (*reqchar != branchreqchar) *reqchar = -2;
  1753.       }
  1754.     else *reqchar = -2;
  1755.     }
  1756.   /* Keep the shortest literal count */
  1757.   if (branchcountlits < *countlits) *countlits = branchcountlits;
  1758.   DPRINTF(("literal count = %d min=%dn", branchcountlits, *countlits));
  1759.   /* If lookbehind, check that this branch matches a fixed-length string,
  1760.   and put the length into the OP_REVERSE item. Temporarily mark the end of
  1761.   the branch with OP_END. */
  1762.   if (lookbehind)
  1763.     {
  1764.     *code = OP_END;
  1765.     length = find_fixedlength(last_branch, options);
  1766.     DPRINTF(("fixed length = %dn", length));
  1767.     if (length < 0)
  1768.       {
  1769.       *errorptr = ERR25;
  1770.       *ptrptr = ptr;
  1771.       return FALSE;
  1772.       }
  1773.     reverse_count[0] = (length >> 8);
  1774.     reverse_count[1] = length & 255;
  1775.     }
  1776.   /* Reached end of expression, either ')' or end of pattern. Insert a
  1777.   terminating ket and the length of the whole bracketed item, and return,
  1778.   leaving the pointer at the terminating char. If any of the ims options
  1779.   were changed inside the group, compile a resetting op-code following. */
  1780.   if (*ptr != '|')
  1781.     {
  1782.     length = code - start_bracket;
  1783.     *code++ = OP_KET;
  1784.     *code++ = length >> 8;
  1785.     *code++ = length & 255;
  1786.     if (optchanged >= 0)
  1787.       {
  1788.       *code++ = OP_OPT;
  1789.       *code++ = oldoptions;
  1790.       }
  1791.     *codeptr = code;
  1792.     *ptrptr = ptr;
  1793.     return TRUE;
  1794.     }
  1795.   /* Another branch follows; insert an "or" node and advance the pointer. */
  1796.   *code = OP_ALT;
  1797.   last_branch = code;
  1798.   code += 3;
  1799.   ptr++;
  1800.   }
  1801. /* Control never reaches here */
  1802. }
  1803. /*************************************************
  1804. *      Find first significant op code            *
  1805. *************************************************/
  1806. /* This is called by several functions that scan a compiled expression looking
  1807. for a fixed first character, or an anchoring op code etc. It skips over things
  1808. that do not influence this. For one application, a change of caseless option is
  1809. important.
  1810. Arguments:
  1811.   code       pointer to the start of the group
  1812.   options    pointer to external options
  1813.   optbit     the option bit whose changing is significant, or
  1814.              zero if none are
  1815.   optstop    TRUE to return on option change, otherwise change the options
  1816.                value and continue
  1817. Returns:     pointer to the first significant opcode
  1818. */
  1819. static const uschar*
  1820. first_significant_code(const uschar *code, int *options, int optbit,
  1821.   BOOL optstop)
  1822. {
  1823. for (;;)
  1824.   {
  1825.   switch ((int)*code)
  1826.     {
  1827.     case OP_OPT:
  1828.     if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
  1829.       {
  1830.       if (optstop) return code;
  1831.       *options = (int)code[1];
  1832.       }
  1833.     code += 2;
  1834.     break;
  1835.     case OP_CREF:
  1836.     case OP_BRANUMBER:
  1837.     code += 3;
  1838.     break;
  1839.     case OP_WORD_BOUNDARY:
  1840.     case OP_NOT_WORD_BOUNDARY:
  1841.     code++;
  1842.     break;
  1843.     case OP_ASSERT_NOT:
  1844.     case OP_ASSERTBACK:
  1845.     case OP_ASSERTBACK_NOT:
  1846.     do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
  1847.     code += 3;
  1848.     break;
  1849.     default:
  1850.     return code;
  1851.     }
  1852.   }
  1853. /* Control never reaches here */
  1854. }
  1855. /*************************************************
  1856. *          Check for anchored expression         *
  1857. *************************************************/
  1858. /* Try to find out if this is an anchored regular expression. Consider each
  1859. alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
  1860. all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
  1861. it's anchored. However, if this is a multiline pattern, then only OP_SOD
  1862. counts, since OP_CIRC can match in the middle.
  1863. A branch is also implicitly anchored if it starts with .* and DOTALL is set,
  1864. because that will try the rest of the pattern at all possible matching points,
  1865. so there is no point trying them again.
  1866. Arguments:
  1867.   code       points to start of expression (the bracket)
  1868.   options    points to the options setting
  1869. Returns:     TRUE or FALSE
  1870. */
  1871. static BOOL
  1872. is_anchored(register const uschar *code, int *options)
  1873. {
  1874. do {
  1875.    const uschar *scode = first_significant_code(code + 3, options,
  1876.      PCRE_MULTILINE, FALSE);
  1877.    register int op = *scode;
  1878.    if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  1879.      { if (!is_anchored(scode, options)) return FALSE; }
  1880.    else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
  1881.             (*options & PCRE_DOTALL) != 0)
  1882.      { if (scode[1] != OP_ANY) return FALSE; }
  1883.    else if (op != OP_SOD &&
  1884.            ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
  1885.      return FALSE;
  1886.    code += (code[1] << 8) + code[2];
  1887.    }
  1888. while (*code == OP_ALT);
  1889. return TRUE;
  1890. }
  1891. /*************************************************
  1892. *         Check for starting with ^ or .*        *
  1893. *************************************************/
  1894. /* This is called to find out if every branch starts with ^ or .* so that
  1895. "first char" processing can be done to speed things up in multiline
  1896. matching and for non-DOTALL patterns that start with .* (which must start at
  1897. the beginning or after n).
  1898. Argument:  points to start of expression (the bracket)
  1899. Returns:   TRUE or FALSE
  1900. */
  1901. static BOOL
  1902. is_startline(const uschar *code)
  1903. {
  1904. do {
  1905.    const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
  1906.    register int op = *scode;
  1907.    if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
  1908.      { if (!is_startline(scode)) return FALSE; }
  1909.    else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
  1910.      { if (scode[1] != OP_ANY) return FALSE; }
  1911.    else if (op != OP_CIRC) return FALSE;
  1912.    code += (code[1] << 8) + code[2];
  1913.    }
  1914. while (*code == OP_ALT);
  1915. return TRUE;
  1916. }
  1917. /*************************************************
  1918. *          Check for fixed first char            *
  1919. *************************************************/
  1920. /* Try to find out if there is a fixed first character. This is called for
  1921. unanchored expressions, as it speeds up their processing quite considerably.
  1922. Consider each alternative branch. If they all start with the same char, or with
  1923. a bracket all of whose alternatives start with the same char (recurse ad lib),
  1924. then we return that char, otherwise -1.
  1925. Arguments:
  1926.   code       points to start of expression (the bracket)
  1927.   options    pointer to the options (used to check casing changes)
  1928. Returns:     -1 or the fixed first char
  1929. */
  1930. static int
  1931. find_firstchar(const uschar *code, int *options)
  1932. {
  1933. register int c = -1;
  1934. do {
  1935.    int d;
  1936.    const uschar *scode = first_significant_code(code + 3, options,
  1937.      PCRE_CASELESS, TRUE);
  1938.    register int op = *scode;
  1939.    if (op >= OP_BRA) op = OP_BRA;
  1940.    switch(op)
  1941.      {
  1942.      default:
  1943.      return -1;
  1944.      case OP_BRA:
  1945.      case OP_ASSERT:
  1946.      case OP_ONCE:
  1947.      case OP_COND:
  1948.      if ((d = find_firstchar(scode, options)) < 0) return -1;
  1949.      if (c < 0) c = d; else if (c != d) return -1;
  1950.      break;
  1951.      case OP_EXACT:       /* Fall through */
  1952.      scode++;
  1953.      case OP_CHARS:       /* Fall through */
  1954.      scode++;
  1955.      case OP_PLUS:
  1956.      case OP_MINPLUS:
  1957.      if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
  1958.      break;
  1959.      }
  1960.    code += (code[1] << 8) + code[2];
  1961.    }
  1962. while (*code == OP_ALT);
  1963. return c;
  1964. }
  1965. /*************************************************
  1966. *        Compile a Regular Expression            *
  1967. *************************************************/
  1968. /* This function takes a string and returns a pointer to a block of store
  1969. holding a compiled version of the expression.
  1970. Arguments:
  1971.   pattern      the regular expression
  1972.   options      various option bits
  1973.   errorptr     pointer to pointer to error text
  1974.   erroroffset  ptr offset in pattern where error was detected
  1975.   tables       pointer to character tables or NULL
  1976. Returns:       pointer to compiled data block, or NULL on error,
  1977.                with errorptr and erroroffset set
  1978. */
  1979. pcre *
  1980. pcre_compile(const char *pattern, int options, const char **errorptr,
  1981.   int *erroroffset, const unsigned char *tables)
  1982. {
  1983. real_pcre *re;
  1984. int length = 3;      /* For initial BRA plus length */
  1985. int runlength;
  1986. int c, reqchar, countlits;
  1987. int bracount = 0;
  1988. int top_backref = 0;
  1989. int branch_extra = 0;
  1990. int branch_newextra;
  1991. unsigned int brastackptr = 0;
  1992. size_t size;
  1993. uschar *code;
  1994. const uschar *ptr;
  1995. compile_data compile_block;
  1996. int brastack[BRASTACK_SIZE];
  1997. uschar bralenstack[BRASTACK_SIZE];
  1998. #ifdef DEBUG
  1999. uschar *code_base, *code_end;
  2000. #endif
  2001. /* Can't support UTF8 unless PCRE has been compiled to include the code. */
  2002. #ifndef SUPPORT_UTF8
  2003. if ((options & PCRE_UTF8) != 0)
  2004.   {
  2005.   *errorptr = ERR32;
  2006.   return NULL;
  2007.   }
  2008. #endif
  2009. /* We can't pass back an error message if errorptr is NULL; I guess the best we
  2010. can do is just return NULL. */
  2011. if (errorptr == NULL) return NULL;
  2012. *errorptr = NULL;
  2013. /* However, we can give a message for this error */
  2014. if (erroroffset == NULL)
  2015.   {
  2016.   *errorptr = ERR16;
  2017.   return NULL;
  2018.   }
  2019. *erroroffset = 0;
  2020. if ((options & ~PUBLIC_OPTIONS) != 0)
  2021.   {
  2022.   *errorptr = ERR17;
  2023.   return NULL;
  2024.   }
  2025. /* Set up pointers to the individual character tables */
  2026. if (tables == NULL) tables = pcre_default_tables;
  2027. compile_block.lcc = tables + lcc_offset;
  2028. compile_block.fcc = tables + fcc_offset;
  2029. compile_block.cbits = tables + cbits_offset;
  2030. compile_block.ctypes = tables + ctypes_offset;
  2031. /* Reflect pattern for debugging output */
  2032. DPRINTF(("------------------------------------------------------------------n"));
  2033. DPRINTF(("%sn", pattern));
  2034. /* The first thing to do is to make a pass over the pattern to compute the
  2035. amount of store required to hold the compiled code. This does not have to be
  2036. perfect as long as errors are overestimates. At the same time we can detect any
  2037. internal flag settings. Make an attempt to correct for any counted white space
  2038. if an "extended" flag setting appears late in the pattern. We can't be so
  2039. clever for #-comments. */
  2040. ptr = (const uschar *)(pattern - 1);
  2041. while ((c = *(++ptr)) != 0)
  2042.   {
  2043.   int min, max;
  2044.   int class_charcount;
  2045.   int bracket_length;
  2046.   if ((options & PCRE_EXTENDED) != 0)
  2047.     {
  2048.     if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  2049.     if (c == '#')
  2050.       {
  2051.       /* The space before the ; is to avoid a warning on a silly compiler
  2052.       on the Macintosh. */
  2053.       while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
  2054.       continue;
  2055.       }
  2056.     }
  2057.   switch(c)
  2058.     {
  2059.     /* A backslashed item may be an escaped "normal" character or a
  2060.     character type. For a "normal" character, put the pointers and
  2061.     character back so that tests for whitespace etc. in the input
  2062.     are done correctly. */
  2063.     case '\':
  2064.       {
  2065.       const uschar *save_ptr = ptr;
  2066.       c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
  2067.       if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  2068.       if (c >= 0)
  2069.         {
  2070.         ptr = save_ptr;
  2071.         c = '\';
  2072.         goto NORMAL_CHAR;