bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / tomcat-connectors-1.2.32-src / native / iis / pcre / pcre.c
1 /*************************************************
2 *      Perl-Compatible Regular Expressions       *
3 *************************************************/
4
5 /*
6 This is a library of functions to support regular expressions whose syntax
7 and semantics are as close as possible to those of the Perl 5 language. See
8 the file Tech.Notes for some information on the internals.
9
10 Written by: Philip Hazel <ph10@cam.ac.uk>
11
12            Copyright (c) 1997-2004 University of Cambridge
13
14 -----------------------------------------------------------------------------
15 Redistribution and use in source and binary forms, with or without
16 modification, are permitted provided that the following conditions are met:
17
18     * Redistributions of source code must retain the above copyright notice,
19       this list of conditions and the following disclaimer.
20
21     * Redistributions in binary form must reproduce the above copyright
22       notice, this list of conditions and the following disclaimer in the
23       documentation and/or other materials provided with the distribution.
24
25     * Neither the name of the University of Cambridge nor the names of its
26       contributors may be used to endorse or promote products derived from
27       this software without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
30 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
33 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 POSSIBILITY OF SUCH DAMAGE.
40 -----------------------------------------------------------------------------
41 */
42
43
44 /* Define DEBUG to get debugging output on stdout. */
45 /* #define DEBUG */
46
47 /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
48 inline, and there are *still* stupid compilers about that don't like indented
49 pre-processor statements. I suppose it's only been 10 years... */
50
51 #ifdef DEBUG
52 #define DPRINTF(p) printf p
53 #else
54 #define DPRINTF(p) /*nothing*/
55 #endif
56
57 /* Include the internals header, which itself includes "config.h", the Standard
58 C headers, and the external pcre header. */
59
60 #include "internal.h"
61
62 /* If Unicode Property support is wanted, include a private copy of the
63 function that does it, and the table that translates names to numbers. */
64
65 #ifdef SUPPORT_UCP
66 #include "ucp.c"
67 #include "ucptypetable.c"
68 #endif
69
70 /* Maximum number of items on the nested bracket stacks at compile time. This
71 applies to the nesting of all kinds of parentheses. It does not limit
72 un-nested, non-capturing parentheses. This number can be made bigger if
73 necessary - it is used to dimension one int and one unsigned char vector at
74 compile time. */
75
76 #define BRASTACK_SIZE 200
77
78
79 /* Maximum number of ints of offset to save on the stack for recursive calls.
80 If the offset vector is bigger, malloc is used. This should be a multiple of 3,
81 because the offset vector is always a multiple of 3 long. */
82
83 #define REC_STACK_SAVE_MAX 30
84
85
86 /* The maximum remaining length of subject we are prepared to search for a
87 req_byte match. */
88
89 #define REQ_BYTE_MAX 1000
90
91
92 /* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
93 the definition is next to the definition of the opcodes in internal.h. */
94
95 static const uschar OP_lengths[] = { OP_LENGTHS };
96
97 /* Min and max values for the common repeats; for the maxima, 0 => infinity */
98
99 static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
100 static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
101
102 /* Table for handling escaped characters in the range '0'-'z'. Positive returns
103 are simple data values; negative values are for special things like \d and so
104 on. Zero means further processing is needed (for things like \x), or the escape
105 is invalid. */
106
107 #if !EBCDIC   /* This is the "normal" table for ASCII systems */
108 static const short int escapes[] = {
109      0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
110      0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
111    '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
112      0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
113 -ESC_P, -ESC_Q,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
114 -ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
115    '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
116      0,      0,      0,      0,      0,      0,  ESC_n,      0,   /* h - o */
117 -ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0,      0, -ESC_w,   /* p - w */
118      0,      0, -ESC_z                                            /* x - z */
119 };
120
121 #else         /* This is the "abnormal" table for EBCDIC systems */
122 static const short int escapes[] = {
123 /*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
124 /*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
125 /*  58 */     0,     0,    '!',     '$',    '*',   ')',    ';',    '~',
126 /*  60 */   '-',   '/',      0,       0,      0,     0,      0,      0,
127 /*  68 */     0,     0,    '|',     ',',    '%',   '_',    '>',    '?',
128 /*  70 */     0,     0,      0,       0,      0,     0,      0,      0,
129 /*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
130 /*  80 */     0,     7, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
131 /*  88 */     0,     0,      0,     '{',      0,     0,      0,      0,
132 /*  90 */     0,     0,      0,     'l',      0, ESC_n,      0, -ESC_p,
133 /*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
134 /*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,     0, -ESC_w,      0,
135 /*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
136 /*  B0 */     0,     0,      0,       0,      0,     0,      0,      0,
137 /*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
138 /*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
139 /*  C8 */     0,     0,      0,       0,      0,     0,      0,      0,
140 /*  D0 */   '}',     0,      0,       0,      0,     0,      0, -ESC_P,
141 /*  D8 */-ESC_Q,     0,      0,       0,      0,     0,      0,      0,
142 /*  E0 */  '\\',     0, -ESC_S,       0,      0,     0, -ESC_W, -ESC_X,
143 /*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
144 /*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
145 /*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
146 };
147 #endif
148
149
150 /* Tables of names of POSIX character classes and their lengths. The list is
151 terminated by a zero length entry. The first three must be alpha, upper, lower,
152 as this is assumed for handling case independence. */
153
154 static const char *const posix_names[] = {
155   "alpha", "lower", "upper",
156   "alnum", "ascii", "blank", "cntrl", "digit", "graph",
157   "print", "punct", "space", "word",  "xdigit" };
158
159 static const uschar posix_name_lengths[] = {
160   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
161
162 /* Table of class bit maps for each POSIX class; up to three may be combined
163 to form the class. The table for [:blank:] is dynamically modified to remove
164 the vertical space characters. */
165
166 static const int posix_class_maps[] = {
167   cbit_lower, cbit_upper, -1,             /* alpha */
168   cbit_lower, -1,         -1,             /* lower */
169   cbit_upper, -1,         -1,             /* upper */
170   cbit_digit, cbit_lower, cbit_upper,     /* alnum */
171   cbit_print, cbit_cntrl, -1,             /* ascii */
172   cbit_space, -1,         -1,             /* blank - a GNU extension */
173   cbit_cntrl, -1,         -1,             /* cntrl */
174   cbit_digit, -1,         -1,             /* digit */
175   cbit_graph, -1,         -1,             /* graph */
176   cbit_print, -1,         -1,             /* print */
177   cbit_punct, -1,         -1,             /* punct */
178   cbit_space, -1,         -1,             /* space */
179   cbit_word,  -1,         -1,             /* word - a Perl extension */
180   cbit_xdigit,-1,         -1              /* xdigit */
181 };
182
183 /* Table to identify digits and hex digits. This is used when compiling
184 patterns. Note that the tables in chartables are dependent on the locale, and
185 may mark arbitrary characters as digits - but the PCRE compiling code expects
186 to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
187 a private table here. It costs 256 bytes, but it is a lot faster than doing
188 character value tests (at least in some simple cases I timed), and in some
189 applications one wants PCRE to compile efficiently as well as match
190 efficiently.
191
192 For convenience, we use the same bit definitions as in chartables:
193
194   0x04   decimal digit
195   0x08   hexadecimal digit
196
197 Then we can use ctype_digit and ctype_xdigit in the code. */
198
199 #if !EBCDIC    /* This is the "normal" case, for ASCII systems */
200 static const unsigned char digitab[] =
201   {
202   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
203   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15 */
204   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
205   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
206   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */
207   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */
208   0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  */
209   0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */
210   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  @ - G  */
211   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */
212   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */
213   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */
214   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  ` - g  */
215   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h - o  */
216   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */
217   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */
218   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
219   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
220   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
221   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
222   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
223   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
224   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
225   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
226   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
227   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
228   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
229   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
230   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
231   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
232   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
233   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
234
235 #else          /* This is the "abnormal" case, for EBCDIC systems */
236 static const unsigned char digitab[] =
237   {
238   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
239   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15    */
240   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 10 */
241   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31    */
242   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  32- 39 20 */
243   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47    */
244   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 30 */
245   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63    */
246   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 40 */
247   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  72- |     */
248   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 50 */
249   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  88- Â¬     */
250   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 60 */
251   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ?     */
252   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
253   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "     */
254   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g  80 */
255   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143    */
256   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p  90 */
257   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159    */
258   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x  A0 */
259   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175    */
260   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 B0 */
261   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191    */
262   0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  { - G  C0 */
263   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207    */
264   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  } - P  D0 */
265   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223    */
266   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  \ - X  E0 */
267   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239    */
268   0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  F0 */
269   0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255    */
270
271 static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */
272   0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */
273   0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
274   0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */
275   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
276   0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  32- 39 */
277   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47 */
278   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 */
279   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63 */
280   0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 */
281   0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /*  72- |  */
282   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 */
283   0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /*  88- Â¬  */
284   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 */
285   0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ?  */
286   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
287   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "  */
288   0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g  */
289   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143 */
290   0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p  */
291   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159 */
292   0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x  */
293   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175 */
294   0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 */
295   0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
296   0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  { - G  */
297   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207 */
298   0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  } - P  */
299   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223 */
300   0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /*  \ - X  */
301   0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239 */
302   0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
303   0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255 */
304 #endif
305
306
307 /* Definition to allow mutual recursion */
308
309 static BOOL
310   compile_regex(int, int, int *, uschar **, const uschar **, const char **,
311     BOOL, int, int *, int *, branch_chain *, compile_data *);
312
313 /* Structure for building a chain of data that actually lives on the
314 stack, for holding the values of the subject pointer at the start of each
315 subpattern, so as to detect when an empty string has been matched by a
316 subpattern - to break infinite loops. When NO_RECURSE is set, these blocks
317 are on the heap, not on the stack. */
318
319 typedef struct eptrblock {
320   struct eptrblock *epb_prev;
321   const uschar *epb_saved_eptr;
322 } eptrblock;
323
324 /* Flag bits for the match() function */
325
326 #define match_condassert   0x01    /* Called to check a condition assertion */
327 #define match_isgroup      0x02    /* Set if start of bracketed group */
328
329 /* Non-error returns from the match() function. Error returns are externally
330 defined PCRE_ERROR_xxx codes, which are all negative. */
331
332 #define MATCH_MATCH        1
333 #define MATCH_NOMATCH      0
334
335
336
337 /*************************************************
338 *               Global variables                 *
339 *************************************************/
340
341 /* PCRE is thread-clean and doesn't use any global variables in the normal
342 sense. However, it calls memory allocation and free functions via the four
343 indirections below, and it can optionally do callouts. These values can be
344 changed by the caller, but are shared between all threads. However, when
345 compiling for Virtual Pascal, things are done differently (see pcre.in). */
346
347 #ifndef VPCOMPAT
348 #ifdef __cplusplus
349 extern "C" void *(*pcre_malloc)(size_t) = malloc;
350 extern "C" void  (*pcre_free)(void *) = free;
351 extern "C" void *(*pcre_stack_malloc)(size_t) = malloc;
352 extern "C" void  (*pcre_stack_free)(void *) = free;
353 extern "C" int   (*pcre_callout)(pcre_callout_block *) = NULL;
354 #else
355 void *(*pcre_malloc)(size_t) = malloc;
356 void  (*pcre_free)(void *) = free;
357 void *(*pcre_stack_malloc)(size_t) = malloc;
358 void  (*pcre_stack_free)(void *) = free;
359 int   (*pcre_callout)(pcre_callout_block *) = NULL;
360 #endif
361 #endif
362
363
364 /*************************************************
365 *    Macros and tables for character handling    *
366 *************************************************/
367
368 /* When UTF-8 encoding is being used, a character is no longer just a single
369 byte. The macros for character handling generate simple sequences when used in
370 byte-mode, and more complicated ones for UTF-8 characters. */
371
372 #ifndef SUPPORT_UTF8
373 #define GETCHAR(c, eptr) c = *eptr;
374 #define GETCHARINC(c, eptr) c = *eptr++;
375 #define GETCHARINCTEST(c, eptr) c = *eptr++;
376 #define GETCHARLEN(c, eptr, len) c = *eptr;
377 #define BACKCHAR(eptr)
378
379 #else   /* SUPPORT_UTF8 */
380
381 /* Get the next UTF-8 character, not advancing the pointer. This is called when
382 we know we are in UTF-8 mode. */
383
384 #define GETCHAR(c, eptr) \
385   c = *eptr; \
386   if ((c & 0xc0) == 0xc0) \
387     { \
388     int gcii; \
389     int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
390     int gcss = 6*gcaa; \
391     c = (c & utf8_table3[gcaa]) << gcss; \
392     for (gcii = 1; gcii <= gcaa; gcii++) \
393       { \
394       gcss -= 6; \
395       c |= (eptr[gcii] & 0x3f) << gcss; \
396       } \
397     }
398
399 /* Get the next UTF-8 character, advancing the pointer. This is called when we
400 know we are in UTF-8 mode. */
401
402 #define GETCHARINC(c, eptr) \
403   c = *eptr++; \
404   if ((c & 0xc0) == 0xc0) \
405     { \
406     int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
407     int gcss = 6*gcaa; \
408     c = (c & utf8_table3[gcaa]) << gcss; \
409     while (gcaa-- > 0) \
410       { \
411       gcss -= 6; \
412       c |= (*eptr++ & 0x3f) << gcss; \
413       } \
414     }
415
416 /* Get the next character, testing for UTF-8 mode, and advancing the pointer */
417
418 #define GETCHARINCTEST(c, eptr) \
419   c = *eptr++; \
420   if (md->utf8 && (c & 0xc0) == 0xc0) \
421     { \
422     int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
423     int gcss = 6*gcaa; \
424     c = (c & utf8_table3[gcaa]) << gcss; \
425     while (gcaa-- > 0) \
426       { \
427       gcss -= 6; \
428       c |= (*eptr++ & 0x3f) << gcss; \
429       } \
430     }
431
432 /* Get the next UTF-8 character, not advancing the pointer, incrementing length
433 if there are extra bytes. This is called when we know we are in UTF-8 mode. */
434
435 #define GETCHARLEN(c, eptr, len) \
436   c = *eptr; \
437   if ((c & 0xc0) == 0xc0) \
438     { \
439     int gcii; \
440     int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
441     int gcss = 6*gcaa; \
442     c = (c & utf8_table3[gcaa]) << gcss; \
443     for (gcii = 1; gcii <= gcaa; gcii++) \
444       { \
445       gcss -= 6; \
446       c |= (eptr[gcii] & 0x3f) << gcss; \
447       } \
448     len += gcaa; \
449     }
450
451 /* If the pointer is not at the start of a character, move it back until
452 it is. Called only in UTF-8 mode. */
453
454 #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
455
456 #endif
457
458
459
460 /*************************************************
461 *             Default character tables           *
462 *************************************************/
463
464 /* A default set of character tables is included in the PCRE binary. Its source
465 is built by the maketables auxiliary program, which uses the default C ctypes
466 functions, and put in the file chartables.c. These tables are used by PCRE
467 whenever the caller of pcre_compile() does not provide an alternate set of
468 tables. */
469
470 #include "chartables.c"
471
472
473
474 #ifdef SUPPORT_UTF8
475 /*************************************************
476 *           Tables for UTF-8 support             *
477 *************************************************/
478
479 /* These are the breakpoints for different numbers of bytes in a UTF-8
480 character. */
481
482 static const int utf8_table1[] =
483   { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
484
485 /* These are the indicator bits and the mask for the data bits to set in the
486 first byte of a character, indexed by the number of additional bytes. */
487
488 static const int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
489 static const int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
490
491 /* Table of the number of extra characters, indexed by the first character
492 masked with 0x3f. The highest number for a valid UTF-8 character is in fact
493 0x3d. */
494
495 static const uschar utf8_table4[] = {
496   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
497   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
498   2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
499   3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
500
501
502 /*************************************************
503 *       Convert character value to UTF-8         *
504 *************************************************/
505
506 /* This function takes an integer value in the range 0 - 0x7fffffff
507 and encodes it as a UTF-8 character in 0 to 6 bytes.
508
509 Arguments:
510   cvalue     the character value
511   buffer     pointer to buffer for result - at least 6 bytes long
512
513 Returns:     number of characters placed in the buffer
514 */
515
516 static int
517 ord2utf8(int cvalue, uschar *buffer)
518 {
519 register int i, j;
520 for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
521   if (cvalue <= utf8_table1[i]) break;
522 buffer += i;
523 for (j = i; j > 0; j--)
524  {
525  *buffer-- = 0x80 | (cvalue & 0x3f);
526  cvalue >>= 6;
527  }
528 *buffer = utf8_table2[i] | cvalue;
529 return i + 1;
530 }
531 #endif
532
533
534
535 /*************************************************
536 *         Print compiled regex                   *
537 *************************************************/
538
539 /* The code for doing this is held in a separate file that is also included in
540 pcretest.c. It defines a function called print_internals(). */
541
542 #ifdef DEBUG
543 #include "printint.c"
544 #endif
545
546
547
548 /*************************************************
549 *          Return version string                 *
550 *************************************************/
551
552 #define STRING(a)  # a
553 #define XSTRING(s) STRING(s)
554
555 EXPORT const char *
556 pcre_version(void)
557 {
558 return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
559 }
560
561
562
563
564 /*************************************************
565 *         Flip bytes in an integer               *
566 *************************************************/
567
568 /* This function is called when the magic number in a regex doesn't match in
569 order to flip its bytes to see if we are dealing with a pattern that was
570 compiled on a host of different endianness. If so, this function is used to
571 flip other byte values.
572
573 Arguments:
574   value        the number to flip
575   n            the number of bytes to flip (assumed to be 2 or 4)
576
577 Returns:       the flipped value
578 */
579
580 static pcre_uint16
581 byteflip2(pcre_uint16 value)
582 {
583 return ((value & 0x00ff) << 8) |
584        ((value & 0xff00) >> 8);
585 }
586
587 static pcre_uint32
588 byteflip4(pcre_uint32 value)
589 {
590 return ((value & 0x000000ff) << 24) |
591        ((value & 0x0000ff00) <<  8) |
592        ((value & 0x00ff0000) >>  8) |
593        ((value & 0xff000000) >> 24);
594 }
595
596 /*************************************************
597 *       Test for a byte-flipped compiled regex   *
598 *************************************************/
599
600 /* This function is called from pce_exec() and also from pcre_fullinfo(). Its
601 job is to test whether the regex is byte-flipped - that is, it was compiled on
602 a system of opposite endianness. The function is called only when the native
603 MAGIC_NUMBER test fails. If the regex is indeed flipped, we flip all the
604 relevant values into a different data block, and return it.
605
606 Arguments:
607   re               points to the regex
608   study            points to study data, or NULL
609   internal_re      points to a new regex block
610   internal_study   points to a new study block
611
612 Returns:           the new block if is is indeed a byte-flipped regex
613                    NULL if it is not
614 */
615
616 static real_pcre *
617 try_flipped(const real_pcre *re, real_pcre *internal_re,
618   const pcre_study_data *study, pcre_study_data *internal_study)
619 {
620 if (byteflip4(re->magic_number) != MAGIC_NUMBER)
621   return NULL;
622
623 *internal_re = *re;           /* To copy other fields */
624 internal_re->size = byteflip4(re->size);
625 internal_re->options = byteflip4(re->options);
626 internal_re->top_bracket = byteflip2(re->top_bracket);
627 internal_re->top_backref = byteflip2(re->top_backref);
628 internal_re->first_byte = byteflip2(re->first_byte);
629 internal_re->req_byte = byteflip2(re->req_byte);
630 internal_re->name_table_offset = byteflip2(re->name_table_offset);
631 internal_re->name_entry_size = byteflip2(re->name_entry_size);
632 internal_re->name_count = byteflip2(re->name_count);
633
634 if (study != NULL)
635   {
636   *internal_study = *study;   /* To copy other fields */
637   internal_study->size = byteflip4(study->size);
638   internal_study->options = byteflip4(study->options);
639   }
640
641 return internal_re;
642 }
643
644
645
646 /*************************************************
647 * (Obsolete) Return info about compiled pattern  *
648 *************************************************/
649
650 /* This is the original "info" function. It picks potentially useful data out
651 of the private structure, but its interface was too rigid. It remains for
652 backwards compatibility. The public options are passed back in an int - though
653 the re->options field has been expanded to a long int, all the public options
654 at the low end of it, and so even on 16-bit systems this will still be OK.
655 Therefore, I haven't changed the API for pcre_info().
656
657 Arguments:
658   argument_re   points to compiled code
659   optptr        where to pass back the options
660   first_byte    where to pass back the first character,
661                 or -1 if multiline and all branches start ^,
662                 or -2 otherwise
663
664 Returns:        number of capturing subpatterns
665                 or negative values on error
666 */
667
668 EXPORT int
669 pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
670 {
671 real_pcre internal_re;
672 const real_pcre *re = (const real_pcre *)argument_re;
673 if (re == NULL) return PCRE_ERROR_NULL;
674 if (re->magic_number != MAGIC_NUMBER)
675   {
676   re = try_flipped(re, &internal_re, NULL, NULL);
677   if (re == NULL) return PCRE_ERROR_BADMAGIC;
678   }
679 if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
680 if (first_byte != NULL)
681   *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
682      ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
683 return re->top_bracket;
684 }
685
686
687
688 /*************************************************
689 *        Return info about compiled pattern      *
690 *************************************************/
691
692 /* This is a newer "info" function which has an extensible interface so
693 that additional items can be added compatibly.
694
695 Arguments:
696   argument_re      points to compiled code
697   extra_data       points extra data, or NULL
698   what             what information is required
699   where            where to put the information
700
701 Returns:           0 if data returned, negative on error
702 */
703
704 EXPORT int
705 pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
706   void *where)
707 {
708 real_pcre internal_re;
709 pcre_study_data internal_study;
710 const real_pcre *re = (const real_pcre *)argument_re;
711 const pcre_study_data *study = NULL;
712
713 if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
714
715 if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
716   study = (const pcre_study_data *)extra_data->study_data;
717
718 if (re->magic_number != MAGIC_NUMBER)
719   {
720   re = try_flipped(re, &internal_re, study, &internal_study);
721   if (re == NULL) return PCRE_ERROR_BADMAGIC;
722   if (study != NULL) study = &internal_study;
723   }
724
725 switch (what)
726   {
727   case PCRE_INFO_OPTIONS:
728   *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
729   break;
730
731   case PCRE_INFO_SIZE:
732   *((size_t *)where) = re->size;
733   break;
734
735   case PCRE_INFO_STUDYSIZE:
736   *((size_t *)where) = (study == NULL)? 0 : study->size;
737   break;
738
739   case PCRE_INFO_CAPTURECOUNT:
740   *((int *)where) = re->top_bracket;
741   break;
742
743   case PCRE_INFO_BACKREFMAX:
744   *((int *)where) = re->top_backref;
745   break;
746
747   case PCRE_INFO_FIRSTBYTE:
748   *((int *)where) =
749     ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
750     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
751   break;
752
753   /* Make sure we pass back the pointer to the bit vector in the external
754   block, not the internal copy (with flipped integer fields). */
755
756   case PCRE_INFO_FIRSTTABLE:
757   *((const uschar **)where) =
758     (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
759       ((const pcre_study_data *)extra_data->study_data)->start_bits : NULL;
760   break;
761
762   case PCRE_INFO_LASTLITERAL:
763   *((int *)where) =
764     ((re->options & PCRE_REQCHSET) != 0)? re->req_byte : -1;
765   break;
766
767   case PCRE_INFO_NAMEENTRYSIZE:
768   *((int *)where) = re->name_entry_size;
769   break;
770
771   case PCRE_INFO_NAMECOUNT:
772   *((int *)where) = re->name_count;
773   break;
774
775   case PCRE_INFO_NAMETABLE:
776   *((const uschar **)where) = (const uschar *)re + re->name_table_offset;
777   break;
778
779   case PCRE_INFO_DEFAULT_TABLES:
780   *((const uschar **)where) = (const uschar *)pcre_default_tables;
781   break;
782
783   default: return PCRE_ERROR_BADOPTION;
784   }
785
786 return 0;
787 }
788
789
790
791 /*************************************************
792 * Return info about what features are configured *
793 *************************************************/
794
795 /* This is function which has an extensible interface so that additional items
796 can be added compatibly.
797
798 Arguments:
799   what             what information is required
800   where            where to put the information
801
802 Returns:           0 if data returned, negative on error
803 */
804
805 EXPORT int
806 pcre_config(int what, void *where)
807 {
808 switch (what)
809   {
810   case PCRE_CONFIG_UTF8:
811 #ifdef SUPPORT_UTF8
812   *((int *)where) = 1;
813 #else
814   *((int *)where) = 0;
815 #endif
816   break;
817
818   case PCRE_CONFIG_UNICODE_PROPERTIES:
819 #ifdef SUPPORT_UCP
820   *((int *)where) = 1;
821 #else
822   *((int *)where) = 0;
823 #endif
824   break;
825
826   case PCRE_CONFIG_NEWLINE:
827   *((int *)where) = NEWLINE;
828   break;
829
830   case PCRE_CONFIG_LINK_SIZE:
831   *((int *)where) = LINK_SIZE;
832   break;
833
834   case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD:
835   *((int *)where) = POSIX_MALLOC_THRESHOLD;
836   break;
837
838   case PCRE_CONFIG_MATCH_LIMIT:
839   *((unsigned int *)where) = MATCH_LIMIT;
840   break;
841
842   case PCRE_CONFIG_STACKRECURSE:
843 #ifdef NO_RECURSE
844   *((int *)where) = 0;
845 #else
846   *((int *)where) = 1;
847 #endif
848   break;
849
850   default: return PCRE_ERROR_BADOPTION;
851   }
852
853 return 0;
854 }
855
856
857
858 #ifdef DEBUG
859 /*************************************************
860 *        Debugging function to print chars       *
861 *************************************************/
862
863 /* Print a sequence of chars in printable format, stopping at the end of the
864 subject if the requested.
865
866 Arguments:
867   p           points to characters
868   length      number to print
869   is_subject  TRUE if printing from within md->start_subject
870   md          pointer to matching data block, if is_subject is TRUE
871
872 Returns:     nothing
873 */
874
875 static void
876 pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
877 {
878 int c;
879 if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
880 while (length-- > 0)
881   if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
882 }
883 #endif
884
885
886
887
888 /*************************************************
889 *            Handle escapes                      *
890 *************************************************/
891
892 /* This function is called when a \ has been encountered. It either returns a
893 positive value for a simple escape such as \n, or a negative value which
894 encodes one of the more complicated things such as \d. When UTF-8 is enabled,
895 a positive value greater than 255 may be returned. On entry, ptr is pointing at
896 the \. On exit, it is on the final character of the escape sequence.
897
898 Arguments:
899   ptrptr     points to the pattern position pointer
900   errorptr   points to the pointer to the error message
901   bracount   number of previous extracting brackets
902   options    the options bits
903   isclass    TRUE if inside a character class
904
905 Returns:     zero or positive => a data character
906              negative => a special escape sequence
907              on error, errorptr is set
908 */
909
910 static int
911 check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
912   int options, BOOL isclass)
913 {
914 const uschar *ptr = *ptrptr;
915 int c, i;
916
917 /* If backslash is at the end of the pattern, it's an error. */
918
919 c = *(++ptr);
920 if (c == 0) *errorptr = ERR1;
921
922 /* Non-alphamerics are literals. For digits or letters, do an initial lookup in
923 a table. A non-zero result is something that can be returned immediately.
924 Otherwise further processing may be required. */
925
926 #if !EBCDIC    /* ASCII coding */
927 else if (c < '0' || c > 'z') {}                           /* Not alphameric */
928 else if ((i = escapes[c - '0']) != 0) c = i;
929
930 #else          /* EBCDIC coding */
931 else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {}   /* Not alphameric */
932 else if ((i = escapes[c - 0x48]) != 0)  c = i;
933 #endif
934
935 /* Escapes that need further processing, or are illegal. */
936
937 else
938   {
939   const uschar *oldptr;
940   switch (c)
941     {
942     /* A number of Perl escapes are not handled by PCRE. We give an explicit
943     error. */
944
945     case 'l':
946     case 'L':
947     case 'N':
948     case 'u':
949     case 'U':
950     *errorptr = ERR37;
951     break;
952
953     /* The handling of escape sequences consisting of a string of digits
954     starting with one that is not zero is not straightforward. By experiment,
955     the way Perl works seems to be as follows:
956
957     Outside a character class, the digits are read as a decimal number. If the
958     number is less than 10, or if there are that many previous extracting
959     left brackets, then it is a back reference. Otherwise, up to three octal
960     digits are read to form an escaped byte. Thus \123 is likely to be octal
961     123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
962     value is greater than 377, the least significant 8 bits are taken. Inside a
963     character class, \ followed by a digit is always an octal number. */
964
965     case '1': case '2': case '3': case '4': case '5':
966     case '6': case '7': case '8': case '9':
967
968     if (!isclass)
969       {
970       oldptr = ptr;
971       c -= '0';
972       while ((digitab[ptr[1]] & ctype_digit) != 0)
973         c = c * 10 + *(++ptr) - '0';
974       if (c < 10 || c <= bracount)
975         {
976         c = -(ESC_REF + c);
977         break;
978         }
979       ptr = oldptr;      /* Put the pointer back and fall through */
980       }
981
982     /* Handle an octal number following \. If the first digit is 8 or 9, Perl
983     generates a binary zero byte and treats the digit as a following literal.
984     Thus we have to pull back the pointer by one. */
985
986     if ((c = *ptr) >= '8')
987       {
988       ptr--;
989       c = 0;
990       break;
991       }
992
993     /* \0 always starts an octal number, but we may drop through to here with a
994     larger first octal digit. */
995
996     case '0':
997     c -= '0';
998     while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
999         c = c * 8 + *(++ptr) - '0';
1000     c &= 255;     /* Take least significant 8 bits */
1001     break;
1002
1003     /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
1004     which can be greater than 0xff, but only if the ddd are hex digits. */
1005
1006     case 'x':
1007 #ifdef SUPPORT_UTF8
1008     if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
1009       {
1010       const uschar *pt = ptr + 2;
1011       register int count = 0;
1012       c = 0;
1013       while ((digitab[*pt] & ctype_xdigit) != 0)
1014         {
1015         int cc = *pt++;
1016         count++;
1017 #if !EBCDIC    /* ASCII coding */
1018         if (cc >= 'a') cc -= 32;               /* Convert to upper case */
1019         c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
1020 #else          /* EBCDIC coding */
1021         if (cc >= 'a' && cc <= 'z') cc += 64;  /* Convert to upper case */
1022         c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
1023 #endif
1024         }
1025       if (*pt == '}')
1026         {
1027         if (c < 0 || count > 8) *errorptr = ERR34;
1028         ptr = pt;
1029         break;
1030         }
1031       /* If the sequence of hex digits does not end with '}', then we don't
1032       recognize this construct; fall through to the normal \x handling. */
1033       }
1034 #endif
1035
1036     /* Read just a single hex char */
1037
1038     c = 0;
1039     while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
1040       {
1041       int cc;                               /* Some compilers don't like ++ */
1042       cc = *(++ptr);                        /* in initializers */
1043 #if !EBCDIC    /* ASCII coding */
1044       if (cc >= 'a') cc -= 32;              /* Convert to upper case */
1045       c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
1046 #else          /* EBCDIC coding */
1047       if (cc <= 'z') cc += 64;              /* Convert to upper case */
1048       c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
1049 #endif
1050       }
1051     break;
1052
1053     /* Other special escapes not starting with a digit are straightforward */
1054
1055     case 'c':
1056     c = *(++ptr);
1057     if (c == 0)
1058       {
1059       *errorptr = ERR2;
1060       return 0;
1061       }
1062
1063     /* A letter is upper-cased; then the 0x40 bit is flipped. This coding
1064     is ASCII-specific, but then the whole concept of \cx is ASCII-specific.
1065     (However, an EBCDIC equivalent has now been added.) */
1066
1067 #if !EBCDIC    /* ASCII coding */
1068     if (c >= 'a' && c <= 'z') c -= 32;
1069     c ^= 0x40;
1070 #else          /* EBCDIC coding */
1071     if (c >= 'a' && c <= 'z') c += 64;
1072     c ^= 0xC0;
1073 #endif
1074     break;
1075
1076     /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
1077     other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
1078     for Perl compatibility, it is a literal. This code looks a bit odd, but
1079     there used to be some cases other than the default, and there may be again
1080     in future, so I haven't "optimized" it. */
1081
1082     default:
1083     if ((options & PCRE_EXTRA) != 0) switch(c)
1084       {
1085       default:
1086       *errorptr = ERR3;
1087       break;
1088       }
1089     break;
1090     }
1091   }
1092
1093 *ptrptr = ptr;
1094 return c;
1095 }
1096
1097
1098
1099 #ifdef SUPPORT_UCP
1100 /*************************************************
1101 *               Handle \P and \p                 *
1102 *************************************************/
1103
1104 /* This function is called after \P or \p has been encountered, provided that
1105 PCRE is compiled with support for Unicode properties. On entry, ptrptr is
1106 pointing at the P or p. On exit, it is pointing at the final character of the
1107 escape sequence.
1108
1109 Argument:
1110   ptrptr     points to the pattern position pointer
1111   negptr     points to a boolean that is set TRUE for negation else FALSE
1112   errorptr   points to the pointer to the error message
1113
1114 Returns:     value from ucp_type_table, or -1 for an invalid type
1115 */
1116
1117 static int
1118 get_ucp(const uschar **ptrptr, BOOL *negptr, const char **errorptr)
1119 {
1120 int c, i, bot, top;
1121 const uschar *ptr = *ptrptr;
1122 char name[4];
1123
1124 c = *(++ptr);
1125 if (c == 0) goto ERROR_RETURN;
1126
1127 *negptr = FALSE;
1128
1129 /* \P or \p can be followed by a one- or two-character name in {}, optionally
1130 preceded by ^ for negation. */
1131
1132 if (c == '{')
1133   {
1134   if (ptr[1] == '^')
1135     {
1136     *negptr = TRUE;
1137     ptr++;
1138     }
1139   for (i = 0; i <= 2; i++)
1140     {
1141     c = *(++ptr);
1142     if (c == 0) goto ERROR_RETURN;
1143     if (c == '}') break;
1144     name[i] = c;
1145     }
1146   if (c !='}')   /* Try to distinguish error cases */
1147     {
1148     while (*(++ptr) != 0 && *ptr != '}');
1149     if (*ptr == '}') goto UNKNOWN_RETURN; else goto ERROR_RETURN;
1150     }
1151   name[i] = 0;
1152   }
1153
1154 /* Otherwise there is just one following character */
1155
1156 else
1157   {
1158   name[0] = c;
1159   name[1] = 0;
1160   }
1161
1162 *ptrptr = ptr;
1163
1164 /* Search for a recognized property name using binary chop */
1165
1166 bot = 0;
1167 top = sizeof(utt)/sizeof(ucp_type_table);
1168
1169 while (bot < top)
1170   {
1171   i = (bot + top)/2;
1172   c = strcmp(name, utt[i].name);
1173   if (c == 0) return utt[i].value;
1174   if (c > 0) bot = i + 1; else top = i;
1175   }
1176
1177 UNKNOWN_RETURN:
1178 *errorptr = ERR47;
1179 *ptrptr = ptr;
1180 return -1;
1181
1182 ERROR_RETURN:
1183 *errorptr = ERR46;
1184 *ptrptr = ptr;
1185 return -1;
1186 }
1187 #endif
1188
1189
1190
1191
1192 /*************************************************
1193 *            Check for counted repeat            *
1194 *************************************************/
1195
1196 /* This function is called when a '{' is encountered in a place where it might
1197 start a quantifier. It looks ahead to see if it really is a quantifier or not.
1198 It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
1199 where the ddds are digits.
1200
1201 Arguments:
1202   p         pointer to the first char after '{'
1203
1204 Returns:    TRUE or FALSE
1205 */
1206
1207 static BOOL
1208 is_counted_repeat(const uschar *p)
1209 {
1210 if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
1211 while ((digitab[*p] & ctype_digit) != 0) p++;
1212 if (*p == '}') return TRUE;
1213
1214 if (*p++ != ',') return FALSE;
1215 if (*p == '}') return TRUE;
1216
1217 if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
1218 while ((digitab[*p] & ctype_digit) != 0) p++;
1219
1220 return (*p == '}');
1221 }
1222
1223
1224
1225 /*************************************************
1226 *         Read repeat counts                     *
1227 *************************************************/
1228
1229 /* Read an item of the form {n,m} and return the values. This is called only
1230 after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
1231 so the syntax is guaranteed to be correct, but we need to check the values.
1232
1233 Arguments:
1234   p          pointer to first char after '{'
1235   minp       pointer to int for min
1236   maxp       pointer to int for max
1237              returned as -1 if no max
1238   errorptr   points to pointer to error message
1239
1240 Returns:     pointer to '}' on success;
1241              current ptr on error, with errorptr set
1242 */
1243
1244 static const uschar *
1245 read_repeat_counts(const uschar *p, int *minp, int *maxp, const char **errorptr)
1246 {
1247 int min = 0;
1248 int max = -1;
1249
1250 /* Read the minimum value and do a paranoid check: a negative value indicates
1251 an integer overflow. */
1252
1253 while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
1254 if (min < 0 || min > 65535)
1255   {
1256   *errorptr = ERR5;
1257   return p;
1258   }
1259
1260 /* Read the maximum value if there is one, and again do a paranoid on its size.
1261 Also, max must not be less than min. */
1262
1263 if (*p == '}') max = min; else
1264   {
1265   if (*(++p) != '}')
1266     {
1267     max = 0;
1268     while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
1269     if (max < 0 || max > 65535)
1270       {
1271       *errorptr = ERR5;
1272       return p;
1273       }
1274     if (max < min)
1275       {
1276       *errorptr = ERR4;
1277       return p;
1278       }
1279     }
1280   }
1281
1282 /* Fill in the required variables, and pass back the pointer to the terminating
1283 '}'. */
1284
1285 *minp = min;
1286 *maxp = max;
1287 return p;
1288 }
1289
1290
1291
1292 /*************************************************
1293 *      Find first significant op code            *
1294 *************************************************/
1295
1296 /* This is called by several functions that scan a compiled expression looking
1297 for a fixed first character, or an anchoring op code etc. It skips over things
1298 that do not influence this. For some calls, a change of option is important.
1299 For some calls, it makes sense to skip negative forward and all backward
1300 assertions, and also the \b assertion; for others it does not.
1301
1302 Arguments:
1303   code         pointer to the start of the group
1304   options      pointer to external options
1305   optbit       the option bit whose changing is significant, or
1306                  zero if none are
1307   skipassert   TRUE if certain assertions are to be skipped
1308
1309 Returns:       pointer to the first significant opcode
1310 */
1311
1312 static const uschar*
1313 first_significant_code(const uschar *code, int *options, int optbit,
1314   BOOL skipassert)
1315 {
1316 for (;;)
1317   {
1318   switch ((int)*code)
1319     {
1320     case OP_OPT:
1321     if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
1322       *options = (int)code[1];
1323     code += 2;
1324     break;
1325
1326     case OP_ASSERT_NOT:
1327     case OP_ASSERTBACK:
1328     case OP_ASSERTBACK_NOT:
1329     if (!skipassert) return code;
1330     do code += GET(code, 1); while (*code == OP_ALT);
1331     code += OP_lengths[*code];
1332     break;
1333
1334     case OP_WORD_BOUNDARY:
1335     case OP_NOT_WORD_BOUNDARY:
1336     if (!skipassert) return code;
1337     /* Fall through */
1338
1339     case OP_CALLOUT:
1340     case OP_CREF:
1341     case OP_BRANUMBER:
1342     code += OP_lengths[*code];
1343     break;
1344
1345     default:
1346     return code;
1347     }
1348   }
1349 /* Control never reaches here */
1350 }
1351
1352
1353
1354
1355 /*************************************************
1356 *        Find the fixed length of a pattern      *
1357 *************************************************/
1358
1359 /* Scan a pattern and compute the fixed length of subject that will match it,
1360 if the length is fixed. This is needed for dealing with backward assertions.
1361 In UTF8 mode, the result is in characters rather than bytes.
1362
1363 Arguments:
1364   code     points to the start of the pattern (the bracket)
1365   options  the compiling options
1366
1367 Returns:   the fixed length, or -1 if there is no fixed length,
1368              or -2 if \C was encountered
1369 */
1370
1371 static int
1372 find_fixedlength(uschar *code, int options)
1373 {
1374 int length = -1;
1375
1376 register int branchlength = 0;
1377 register uschar *cc = code + 1 + LINK_SIZE;
1378
1379 /* Scan along the opcodes for this branch. If we get to the end of the
1380 branch, check the length against that of the other branches. */
1381
1382 for (;;)
1383   {
1384   int d;
1385   register int op = *cc;
1386   if (op >= OP_BRA) op = OP_BRA;
1387
1388   switch (op)
1389     {
1390     case OP_BRA:
1391     case OP_ONCE:
1392     case OP_COND:
1393     d = find_fixedlength(cc, options);
1394     if (d < 0) return d;
1395     branchlength += d;
1396     do cc += GET(cc, 1); while (*cc == OP_ALT);
1397     cc += 1 + LINK_SIZE;
1398     break;
1399
1400     /* Reached end of a branch; if it's a ket it is the end of a nested
1401     call. If it's ALT it is an alternation in a nested call. If it is
1402     END it's the end of the outer call. All can be handled by the same code. */
1403
1404     case OP_ALT:
1405     case OP_KET:
1406     case OP_KETRMAX:
1407     case OP_KETRMIN:
1408     case OP_END:
1409     if (length < 0) length = branchlength;
1410       else if (length != branchlength) return -1;
1411     if (*cc != OP_ALT) return length;
1412     cc += 1 + LINK_SIZE;
1413     branchlength = 0;
1414     break;
1415
1416     /* Skip over assertive subpatterns */
1417
1418     case OP_ASSERT:
1419     case OP_ASSERT_NOT:
1420     case OP_ASSERTBACK:
1421     case OP_ASSERTBACK_NOT:
1422     do cc += GET(cc, 1); while (*cc == OP_ALT);
1423     /* Fall through */
1424
1425     /* Skip over things that don't match chars */
1426
1427     case OP_REVERSE:
1428     case OP_BRANUMBER:
1429     case OP_CREF:
1430     case OP_OPT:
1431     case OP_CALLOUT:
1432     case OP_SOD:
1433     case OP_SOM:
1434     case OP_EOD:
1435     case OP_EODN:
1436     case OP_CIRC:
1437     case OP_DOLL:
1438     case OP_NOT_WORD_BOUNDARY:
1439     case OP_WORD_BOUNDARY:
1440     cc += OP_lengths[*cc];
1441     break;
1442
1443     /* Handle literal characters */
1444
1445     case OP_CHAR:
1446     case OP_CHARNC:
1447     branchlength++;
1448     cc += 2;
1449 #ifdef SUPPORT_UTF8
1450     if ((options & PCRE_UTF8) != 0)
1451       {
1452       while ((*cc & 0xc0) == 0x80) cc++;
1453       }
1454 #endif
1455     break;
1456
1457     /* Handle exact repetitions. The count is already in characters, but we
1458     need to skip over a multibyte character in UTF8 mode.  */
1459
1460     case OP_EXACT:
1461     branchlength += GET2(cc,1);
1462     cc += 4;
1463 #ifdef SUPPORT_UTF8
1464     if ((options & PCRE_UTF8) != 0)
1465       {
1466       while((*cc & 0x80) == 0x80) cc++;
1467       }
1468 #endif
1469     break;
1470
1471     case OP_TYPEEXACT:
1472     branchlength += GET2(cc,1);
1473     cc += 4;
1474     break;
1475
1476     /* Handle single-char matchers */
1477
1478     case OP_PROP:
1479     case OP_NOTPROP:
1480     cc++;
1481     /* Fall through */
1482
1483     case OP_NOT_DIGIT:
1484     case OP_DIGIT:
1485     case OP_NOT_WHITESPACE:
1486     case OP_WHITESPACE:
1487     case OP_NOT_WORDCHAR:
1488     case OP_WORDCHAR:
1489     case OP_ANY:
1490     branchlength++;
1491     cc++;
1492     break;
1493
1494     /* The single-byte matcher isn't allowed */
1495
1496     case OP_ANYBYTE:
1497     return -2;
1498
1499     /* Check a class for variable quantification */
1500
1501 #ifdef SUPPORT_UTF8
1502     case OP_XCLASS:
1503     cc += GET(cc, 1) - 33;
1504     /* Fall through */
1505 #endif
1506
1507     case OP_CLASS:
1508     case OP_NCLASS:
1509     cc += 33;
1510
1511     switch (*cc)
1512       {
1513       case OP_CRSTAR:
1514       case OP_CRMINSTAR:
1515       case OP_CRQUERY:
1516       case OP_CRMINQUERY:
1517       return -1;
1518
1519       case OP_CRRANGE:
1520       case OP_CRMINRANGE:
1521       if (GET2(cc,1) != GET2(cc,3)) return -1;
1522       branchlength += GET2(cc,1);
1523       cc += 5;
1524       break;
1525
1526       default:
1527       branchlength++;
1528       }
1529     break;
1530
1531     /* Anything else is variable length */
1532
1533     default:
1534     return -1;
1535     }
1536   }
1537 /* Control never gets here */
1538 }
1539
1540
1541
1542
1543 /*************************************************
1544 *    Scan compiled regex for numbered bracket    *
1545 *************************************************/
1546
1547 /* This little function scans through a compiled pattern until it finds a
1548 capturing bracket with the given number.
1549
1550 Arguments:
1551   code        points to start of expression
1552   utf8        TRUE in UTF-8 mode
1553   number      the required bracket number
1554
1555 Returns:      pointer to the opcode for the bracket, or NULL if not found
1556 */
1557
1558 static const uschar *
1559 find_bracket(const uschar *code, BOOL utf8, int number)
1560 {
1561 #ifndef SUPPORT_UTF8
1562 utf8 = utf8;               /* Stop pedantic compilers complaining */
1563 #endif
1564
1565 for (;;)
1566   {
1567   register int c = *code;
1568   if (c == OP_END) return NULL;
1569   else if (c > OP_BRA)
1570     {
1571     int n = c - OP_BRA;
1572     if (n > EXTRACT_BASIC_MAX) n = GET2(code, 2+LINK_SIZE);
1573     if (n == number) return (uschar *)code;
1574     code += OP_lengths[OP_BRA];
1575     }
1576   else
1577     {
1578     code += OP_lengths[c];
1579
1580 #ifdef SUPPORT_UTF8
1581
1582     /* In UTF-8 mode, opcodes that are followed by a character may be followed
1583     by a multi-byte character. The length in the table is a minimum, so we have
1584     to scan along to skip the extra bytes. All opcodes are less than 128, so we
1585     can use relatively efficient code. */
1586
1587     if (utf8) switch(c)
1588       {
1589       case OP_CHAR:
1590       case OP_CHARNC:
1591       case OP_EXACT:
1592       case OP_UPTO:
1593       case OP_MINUPTO:
1594       case OP_STAR:
1595       case OP_MINSTAR:
1596       case OP_PLUS:
1597       case OP_MINPLUS:
1598       case OP_QUERY:
1599       case OP_MINQUERY:
1600       while ((*code & 0xc0) == 0x80) code++;
1601       break;
1602
1603       /* XCLASS is used for classes that cannot be represented just by a bit
1604       map. This includes negated single high-valued characters. The length in
1605       the table is zero; the actual length is stored in the compiled code. */
1606
1607       case OP_XCLASS:
1608       code += GET(code, 1) + 1;
1609       break;
1610       }
1611 #endif
1612     }
1613   }
1614 }
1615
1616
1617
1618 /*************************************************
1619 *   Scan compiled regex for recursion reference  *
1620 *************************************************/
1621
1622 /* This little function scans through a compiled pattern until it finds an
1623 instance of OP_RECURSE.
1624
1625 Arguments:
1626   code        points to start of expression
1627   utf8        TRUE in UTF-8 mode
1628
1629 Returns:      pointer to the opcode for OP_RECURSE, or NULL if not found
1630 */
1631
1632 static const uschar *
1633 find_recurse(const uschar *code, BOOL utf8)
1634 {
1635 #ifndef SUPPORT_UTF8
1636 utf8 = utf8;               /* Stop pedantic compilers complaining */
1637 #endif
1638
1639 for (;;)
1640   {
1641   register int c = *code;
1642   if (c == OP_END) return NULL;
1643   else if (c == OP_RECURSE) return code;
1644   else if (c > OP_BRA)
1645     {
1646     code += OP_lengths[OP_BRA];
1647     }
1648   else
1649     {
1650     code += OP_lengths[c];
1651
1652 #ifdef SUPPORT_UTF8
1653
1654     /* In UTF-8 mode, opcodes that are followed by a character may be followed
1655     by a multi-byte character. The length in the table is a minimum, so we have
1656     to scan along to skip the extra bytes. All opcodes are less than 128, so we
1657     can use relatively efficient code. */
1658
1659     if (utf8) switch(c)
1660       {
1661       case OP_CHAR:
1662       case OP_CHARNC:
1663       case OP_EXACT:
1664       case OP_UPTO:
1665       case OP_MINUPTO:
1666       case OP_STAR:
1667       case OP_MINSTAR:
1668       case OP_PLUS:
1669       case OP_MINPLUS:
1670       case OP_QUERY:
1671       case OP_MINQUERY:
1672       while ((*code & 0xc0) == 0x80) code++;
1673       break;
1674
1675       /* XCLASS is used for classes that cannot be represented just by a bit
1676       map. This includes negated single high-valued characters. The length in
1677       the table is zero; the actual length is stored in the compiled code. */
1678
1679       case OP_XCLASS:
1680       code += GET(code, 1) + 1;
1681       break;
1682       }
1683 #endif
1684     }
1685   }
1686 }
1687
1688
1689
1690 /*************************************************
1691 *    Scan compiled branch for non-emptiness      *
1692 *************************************************/
1693
1694 /* This function scans through a branch of a compiled pattern to see whether it
1695 can match the empty string or not. It is called only from could_be_empty()
1696 below. Note that first_significant_code() skips over assertions. If we hit an
1697 unclosed bracket, we return "empty" - this means we've struck an inner bracket
1698 whose current branch will already have been scanned.
1699
1700 Arguments:
1701   code        points to start of search
1702   endcode     points to where to stop
1703   utf8        TRUE if in UTF8 mode
1704
1705 Returns:      TRUE if what is matched could be empty
1706 */
1707
1708 static BOOL
1709 could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
1710 {
1711 register int c;
1712 for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0, TRUE);
1713      code < endcode;
1714      code = first_significant_code(code + OP_lengths[c], NULL, 0, TRUE))
1715   {
1716   const uschar *ccode;
1717
1718   c = *code;
1719
1720   if (c >= OP_BRA)
1721     {
1722     BOOL empty_branch;
1723     if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
1724
1725     /* Scan a closed bracket */
1726
1727     empty_branch = FALSE;
1728     do
1729       {
1730       if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
1731         empty_branch = TRUE;
1732       code += GET(code, 1);
1733       }
1734     while (*code == OP_ALT);
1735     if (!empty_branch) return FALSE;   /* All branches are non-empty */
1736     code += 1 + LINK_SIZE;
1737     c = *code;
1738     }
1739
1740   else switch (c)
1741     {
1742     /* Check for quantifiers after a class */
1743
1744 #ifdef SUPPORT_UTF8
1745     case OP_XCLASS:
1746     ccode = code + GET(code, 1);
1747     goto CHECK_CLASS_REPEAT;
1748 #endif
1749
1750     case OP_CLASS:
1751     case OP_NCLASS:
1752     ccode = code + 33;
1753
1754 #ifdef SUPPORT_UTF8
1755     CHECK_CLASS_REPEAT:
1756 #endif
1757
1758     switch (*ccode)
1759       {
1760       case OP_CRSTAR:            /* These could be empty; continue */
1761       case OP_CRMINSTAR:
1762       case OP_CRQUERY:
1763       case OP_CRMINQUERY:
1764       break;
1765
1766       default:                   /* Non-repeat => class must match */
1767       case OP_CRPLUS:            /* These repeats aren't empty */
1768       case OP_CRMINPLUS:
1769       return FALSE;
1770
1771       case OP_CRRANGE:
1772       case OP_CRMINRANGE:
1773       if (GET2(ccode, 1) > 0) return FALSE;  /* Minimum > 0 */
1774       break;
1775       }
1776     break;
1777
1778     /* Opcodes that must match a character */
1779
1780     case OP_PROP:
1781     case OP_NOTPROP:
1782     case OP_EXTUNI:
1783     case OP_NOT_DIGIT:
1784     case OP_DIGIT:
1785     case OP_NOT_WHITESPACE:
1786     case OP_WHITESPACE:
1787     case OP_NOT_WORDCHAR:
1788     case OP_WORDCHAR:
1789     case OP_ANY:
1790     case OP_ANYBYTE:
1791     case OP_CHAR:
1792     case OP_CHARNC:
1793     case OP_NOT:
1794     case OP_PLUS:
1795     case OP_MINPLUS:
1796     case OP_EXACT:
1797     case OP_NOTPLUS:
1798     case OP_NOTMINPLUS:
1799     case OP_NOTEXACT:
1800     case OP_TYPEPLUS:
1801     case OP_TYPEMINPLUS:
1802     case OP_TYPEEXACT:
1803     return FALSE;
1804
1805     /* End of branch */
1806
1807     case OP_KET:
1808     case OP_KETRMAX:
1809     case OP_KETRMIN:
1810     case OP_ALT:
1811     return TRUE;
1812
1813     /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO  may be
1814     followed by a multibyte character */
1815
1816 #ifdef SUPPORT_UTF8
1817     case OP_STAR:
1818     case OP_MINSTAR:
1819     case OP_QUERY:
1820     case OP_MINQUERY:
1821     case OP_UPTO:
1822     case OP_MINUPTO:
1823     if (utf8) while ((code[2] & 0xc0) == 0x80) code++;
1824     break;
1825 #endif
1826     }
1827   }
1828
1829 return TRUE;
1830 }
1831
1832
1833
1834 /*************************************************
1835 *    Scan compiled regex for non-emptiness       *
1836 *************************************************/
1837
1838 /* This function is called to check for left recursive calls. We want to check
1839 the current branch of the current pattern to see if it could match the empty
1840 string. If it could, we must look outwards for branches at other levels,
1841 stopping when we pass beyond the bracket which is the subject of the recursion.
1842
1843 Arguments:
1844   code        points to start of the recursion
1845   endcode     points to where to stop (current RECURSE item)
1846   bcptr       points to the chain of current (unclosed) branch starts
1847   utf8        TRUE if in UTF-8 mode
1848
1849 Returns:      TRUE if what is matched could be empty
1850 */
1851
1852 static BOOL
1853 could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr,
1854   BOOL utf8)
1855 {
1856 while (bcptr != NULL && bcptr->current >= code)
1857   {
1858   if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE;
1859   bcptr = bcptr->outer;
1860   }
1861 return TRUE;
1862 }
1863
1864
1865
1866 /*************************************************
1867 *           Check for POSIX class syntax         *
1868 *************************************************/
1869
1870 /* This function is called when the sequence "[:" or "[." or "[=" is
1871 encountered in a character class. It checks whether this is followed by an
1872 optional ^ and then a sequence of letters, terminated by a matching ":]" or
1873 ".]" or "=]".
1874
1875 Argument:
1876   ptr      pointer to the initial [
1877   endptr   where to return the end pointer
1878   cd       pointer to compile data
1879
1880 Returns:   TRUE or FALSE
1881 */
1882
1883 static BOOL
1884 check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
1885 {
1886 int terminator;          /* Don't combine these lines; the Solaris cc */
1887 terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
1888 if (*(++ptr) == '^') ptr++;
1889 while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
1890 if (*ptr == terminator && ptr[1] == ']')
1891   {
1892   *endptr = ptr;
1893   return TRUE;
1894   }
1895 return FALSE;
1896 }
1897
1898
1899
1900
1901 /*************************************************
1902 *          Check POSIX class name                *
1903 *************************************************/
1904
1905 /* This function is called to check the name given in a POSIX-style class entry
1906 such as [:alnum:].
1907
1908 Arguments:
1909   ptr        points to the first letter
1910   len        the length of the name
1911
1912 Returns:     a value representing the name, or -1 if unknown
1913 */
1914
1915 static int
1916 check_posix_name(const uschar *ptr, int len)
1917 {
1918 register int yield = 0;
1919 while (posix_name_lengths[yield] != 0)
1920   {
1921   if (len == posix_name_lengths[yield] &&
1922     strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
1923   yield++;
1924   }
1925 return -1;
1926 }
1927
1928
1929 /*************************************************
1930 *    Adjust OP_RECURSE items in repeated group   *
1931 *************************************************/
1932
1933 /* OP_RECURSE items contain an offset from the start of the regex to the group
1934 that is referenced. This means that groups can be replicated for fixed
1935 repetition simply by copying (because the recursion is allowed to refer to
1936 earlier groups that are outside the current group). However, when a group is
1937 optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before
1938 it, after it has been compiled. This means that any OP_RECURSE items within it
1939 that refer to the group itself or any contained groups have to have their
1940 offsets adjusted. That is the job of this function. Before it is called, the
1941 partially compiled regex must be temporarily terminated with OP_END.
1942
1943 Arguments:
1944   group      points to the start of the group
1945   adjust     the amount by which the group is to be moved
1946   utf8       TRUE in UTF-8 mode
1947   cd         contains pointers to tables etc.
1948
1949 Returns:     nothing
1950 */
1951
1952 static void
1953 adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd)
1954 {
1955 uschar *ptr = group;
1956 while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
1957   {
1958   int offset = GET(ptr, 1);
1959   if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
1960   ptr += 1 + LINK_SIZE;
1961   }
1962 }
1963
1964
1965
1966 /*************************************************
1967 *        Insert an automatic callout point       *
1968 *************************************************/
1969
1970 /* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
1971 callout points before each pattern item.
1972
1973 Arguments:
1974   code           current code pointer
1975   ptr            current pattern pointer
1976   cd             pointers to tables etc
1977
1978 Returns:         new code pointer
1979 */
1980
1981 static uschar *
1982 auto_callout(uschar *code, const uschar *ptr, compile_data *cd)
1983 {
1984 *code++ = OP_CALLOUT;
1985 *code++ = 255;
1986 PUT(code, 0, ptr - cd->start_pattern);  /* Pattern offset */
1987 PUT(code, LINK_SIZE, 0);                /* Default length */
1988 return code + 2*LINK_SIZE;
1989 }
1990
1991
1992
1993 /*************************************************
1994 *         Complete a callout item                *
1995 *************************************************/
1996
1997 /* A callout item contains the length of the next item in the pattern, which
1998 we can't fill in till after we have reached the relevant point. This is used
1999 for both automatic and manual callouts.
2000
2001 Arguments:
2002   previous_callout   points to previous callout item
2003   ptr                current pattern pointer
2004   cd                 pointers to tables etc
2005
2006 Returns:             nothing
2007 */
2008
2009 static void
2010 complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd)
2011 {
2012 int length = ptr - cd->start_pattern - GET(previous_callout, 2);
2013 PUT(previous_callout, 2 + LINK_SIZE, length);
2014 }
2015
2016
2017
2018 #ifdef SUPPORT_UCP
2019 /*************************************************
2020 *           Get othercase range                  *
2021 *************************************************/
2022
2023 /* This function is passed the start and end of a class range, in UTF-8 mode
2024 with UCP support. It searches up the characters, looking for internal ranges of
2025 characters in the "other" case. Each call returns the next one, updating the
2026 start address.
2027
2028 Arguments:
2029   cptr        points to starting character value; updated
2030   d           end value
2031   ocptr       where to put start of othercase range
2032   odptr       where to put end of othercase range
2033
2034 Yield:        TRUE when range returned; FALSE when no more
2035 */
2036
2037 static BOOL
2038 get_othercase_range(int *cptr, int d, int *ocptr, int *odptr)
2039 {
2040 int c, chartype, othercase, next;
2041
2042 for (c = *cptr; c <= d; c++)
2043   {
2044   if (ucp_findchar(c, &chartype, &othercase) == ucp_L && othercase != 0) break;
2045   }
2046
2047 if (c > d) return FALSE;
2048
2049 *ocptr = othercase;
2050 next = othercase + 1;
2051
2052 for (++c; c <= d; c++)
2053   {
2054   if (ucp_findchar(c, &chartype, &othercase) != ucp_L || othercase != next)
2055     break;
2056   next++;
2057   }
2058
2059 *odptr = next - 1;
2060 *cptr = c;
2061
2062 return TRUE;
2063 }
2064 #endif  /* SUPPORT_UCP */
2065
2066
2067 /*************************************************
2068 *           Compile one branch                   *
2069 *************************************************/
2070
2071 /* Scan the pattern, compiling it into the code vector. If the options are
2072 changed during the branch, the pointer is used to change the external options
2073 bits.
2074
2075 Arguments:
2076   optionsptr     pointer to the option bits
2077   brackets       points to number of extracting brackets used
2078   codeptr        points to the pointer to the current code point
2079   ptrptr         points to the current pattern pointer
2080   errorptr       points to pointer to error message
2081   firstbyteptr   set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
2082   reqbyteptr     set to the last literal character required, else < 0
2083   bcptr          points to current branch chain
2084   cd             contains pointers to tables etc.
2085
2086 Returns:         TRUE on success
2087                  FALSE, with *errorptr set on error
2088 */
2089
2090 static BOOL
2091 compile_branch(int *optionsptr, int *brackets, uschar **codeptr,
2092   const uschar **ptrptr, const char **errorptr, int *firstbyteptr,
2093   int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
2094 {
2095 int repeat_type, op_type;
2096 int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
2097 int bravalue = 0;
2098 int greedy_default, greedy_non_default;
2099 int firstbyte, reqbyte;
2100 int zeroreqbyte, zerofirstbyte;
2101 int req_caseopt, reqvary, tempreqvary;
2102 int condcount = 0;
2103 int options = *optionsptr;
2104 int after_manual_callout = 0;
2105 register int c;
2106 register uschar *code = *codeptr;
2107 uschar *tempcode;
2108 BOOL inescq = FALSE;
2109 BOOL groupsetfirstbyte = FALSE;
2110 const uschar *ptr = *ptrptr;
2111 const uschar *tempptr;
2112 uschar *previous = NULL;
2113 uschar *previous_callout = NULL;
2114 uschar classbits[32];
2115
2116 #ifdef SUPPORT_UTF8
2117 BOOL class_utf8;
2118 BOOL utf8 = (options & PCRE_UTF8) != 0;
2119 uschar *class_utf8data;
2120 uschar utf8_char[6];
2121 #else
2122 BOOL utf8 = FALSE;
2123 #endif
2124
2125 /* Set up the default and non-default settings for greediness */
2126
2127 greedy_default = ((options & PCRE_UNGREEDY) != 0);
2128 greedy_non_default = greedy_default ^ 1;
2129
2130 /* Initialize no first byte, no required byte. REQ_UNSET means "no char
2131 matching encountered yet". It gets changed to REQ_NONE if we hit something that
2132 matches a non-fixed char first char; reqbyte just remains unset if we never
2133 find one.
2134
2135 When we hit a repeat whose minimum is zero, we may have to adjust these values
2136 to take the zero repeat into account. This is implemented by setting them to
2137 zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual
2138 item types that can be repeated set these backoff variables appropriately. */
2139
2140 firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
2141
2142 /* The variable req_caseopt contains either the REQ_CASELESS value or zero,
2143 according to the current setting of the caseless flag. REQ_CASELESS is a bit
2144 value > 255. It is added into the firstbyte or reqbyte variables to record the
2145 case status of the value. This is used only for ASCII characters. */
2146
2147 req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
2148
2149 /* Switch on next character until the end of the branch */
2150
2151 for (;; ptr++)
2152   {
2153   BOOL negate_class;
2154   BOOL possessive_quantifier;
2155   BOOL is_quantifier;
2156   int class_charcount;
2157   int class_lastchar;
2158   int newoptions;
2159   int recno;
2160   int skipbytes;
2161   int subreqbyte;
2162   int subfirstbyte;
2163   int mclength;
2164   uschar mcbuffer[8];
2165
2166   /* Next byte in the pattern */
2167
2168   c = *ptr;
2169
2170   /* If in \Q...\E, check for the end; if not, we have a literal */
2171
2172   if (inescq && c != 0)
2173     {
2174     if (c == '\\' && ptr[1] == 'E')
2175       {
2176       inescq = FALSE;
2177       ptr++;
2178       continue;
2179       }
2180     else
2181       {
2182       if (previous_callout != NULL)
2183         {
2184         complete_callout(previous_callout, ptr, cd);
2185         previous_callout = NULL;
2186         }
2187       if ((options & PCRE_AUTO_CALLOUT) != 0)
2188         {
2189         previous_callout = code;
2190         code = auto_callout(code, ptr, cd);
2191         }
2192       goto NORMAL_CHAR;
2193       }
2194     }
2195
2196   /* Fill in length of a previous callout, except when the next thing is
2197   a quantifier. */
2198
2199   is_quantifier = c == '*' || c == '+' || c == '?' ||
2200     (c == '{' && is_counted_repeat(ptr+1));
2201
2202   if (!is_quantifier && previous_callout != NULL &&
2203        after_manual_callout-- <= 0)
2204     {
2205     complete_callout(previous_callout, ptr, cd);
2206     previous_callout = NULL;
2207     }
2208
2209   /* In extended mode, skip white space and comments */
2210
2211   if ((options & PCRE_EXTENDED) != 0)
2212     {
2213     if ((cd->ctypes[c] & ctype_space) != 0) continue;
2214     if (c == '#')
2215       {
2216       /* The space before the ; is to avoid a warning on a silly compiler
2217       on the Macintosh. */
2218       while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
2219       if (c != 0) continue;   /* Else fall through to handle end of string */
2220       }
2221     }
2222
2223   /* No auto callout for quantifiers. */
2224
2225   if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier)
2226     {
2227     previous_callout = code;
2228     code = auto_callout(code, ptr, cd);
2229     }
2230
2231   switch(c)
2232     {
2233     /* The branch terminates at end of string, |, or ). */
2234
2235     case 0:
2236     case '|':
2237     case ')':
2238     *firstbyteptr = firstbyte;
2239     *reqbyteptr = reqbyte;
2240     *codeptr = code;
2241     *ptrptr = ptr;
2242     return TRUE;
2243
2244     /* Handle single-character metacharacters. In multiline mode, ^ disables
2245     the setting of any following char as a first character. */
2246
2247     case '^':
2248     if ((options & PCRE_MULTILINE) != 0)
2249       {
2250       if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
2251       }
2252     previous = NULL;
2253     *code++ = OP_CIRC;
2254     break;
2255
2256     case '$':
2257     previous = NULL;
2258     *code++ = OP_DOLL;
2259     break;
2260
2261     /* There can never be a first char if '.' is first, whatever happens about
2262     repeats. The value of reqbyte doesn't change either. */
2263
2264     case '.':
2265     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
2266     zerofirstbyte = firstbyte;
2267     zeroreqbyte = reqbyte;
2268     previous = code;
2269     *code++ = OP_ANY;
2270     break;
2271
2272     /* Character classes. If the included characters are all < 255 in value, we
2273     build a 32-byte bitmap of the permitted characters, except in the special
2274     case where there is only one such character. For negated classes, we build
2275     the map as usual, then invert it at the end. However, we use a different
2276     opcode so that data characters > 255 can be handled correctly.
2277
2278     If the class contains characters outside the 0-255 range, a different
2279     opcode is compiled. It may optionally have a bit map for characters < 256,
2280     but those above are are explicitly listed afterwards. A flag byte tells
2281     whether the bitmap is present, and whether this is a negated class or not.
2282     */
2283
2284     case '[':
2285     previous = code;
2286
2287     /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
2288     they are encountered at the top level, so we'll do that too. */
2289
2290     if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
2291         check_posix_syntax(ptr, &tempptr, cd))
2292       {
2293       *errorptr = (ptr[1] == ':')? ERR13 : ERR31;
2294       goto FAILED;
2295       }
2296
2297     /* If the first character is '^', set the negation flag and skip it. */
2298
2299     if ((c = *(++ptr)) == '^')
2300       {
2301       negate_class = TRUE;
2302       c = *(++ptr);
2303       }
2304     else
2305       {
2306       negate_class = FALSE;
2307       }
2308
2309     /* Keep a count of chars with values < 256 so that we can optimize the case
2310     of just a single character (as long as it's < 256). For higher valued UTF-8
2311     characters, we don't yet do any optimization. */
2312
2313     class_charcount = 0;
2314     class_lastchar = -1;
2315
2316 #ifdef SUPPORT_UTF8
2317     class_utf8 = FALSE;                       /* No chars >= 256 */
2318     class_utf8data = code + LINK_SIZE + 34;   /* For UTF-8 items */
2319 #endif
2320
2321     /* Initialize the 32-char bit map to all zeros. We have to build the
2322     map in a temporary bit of store, in case the class contains only 1
2323     character (< 256), because in that case the compiled code doesn't use the
2324     bit map. */
2325
2326     memset(classbits, 0, 32 * sizeof(uschar));
2327
2328     /* Process characters until ] is reached. By writing this as a "do" it
2329     means that an initial ] is taken as a data character. The first pass
2330     through the regex checked the overall syntax, so we don't need to be very
2331     strict here. At the start of the loop, c contains the first byte of the
2332     character. */
2333
2334     do
2335       {
2336 #ifdef SUPPORT_UTF8
2337       if (utf8 && c > 127)
2338         {                           /* Braces are required because the */
2339         GETCHARLEN(c, ptr, ptr);    /* macro generates multiple statements */
2340         }
2341 #endif
2342
2343       /* Inside \Q...\E everything is literal except \E */
2344
2345       if (inescq)
2346         {
2347         if (c == '\\' && ptr[1] == 'E')
2348           {
2349           inescq = FALSE;
2350           ptr++;
2351           continue;
2352           }
2353         else goto LONE_SINGLE_CHARACTER;
2354         }
2355
2356       /* Handle POSIX class names. Perl allows a negation extension of the
2357       form [:^name:]. A square bracket that doesn't match the syntax is
2358       treated as a literal. We also recognize the POSIX constructions
2359       [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
2360       5.6 and 5.8 do. */
2361
2362       if (c == '[' &&
2363           (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
2364           check_posix_syntax(ptr, &tempptr, cd))
2365         {
2366         BOOL local_negate = FALSE;
2367         int posix_class, i;
2368         register const uschar *cbits = cd->cbits;
2369
2370         if (ptr[1] != ':')
2371           {
2372           *errorptr = ERR31;
2373           goto FAILED;
2374           }
2375
2376         ptr += 2;
2377         if (*ptr == '^')
2378           {
2379           local_negate = TRUE;
2380           ptr++;
2381           }
2382
2383         posix_class = check_posix_name(ptr, tempptr - ptr);
2384         if (posix_class < 0)
2385           {
2386           *errorptr = ERR30;
2387           goto FAILED;
2388           }
2389
2390         /* If matching is caseless, upper and lower are converted to
2391         alpha. This relies on the fact that the class table starts with
2392         alpha, lower, upper as the first 3 entries. */
2393
2394         if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
2395           posix_class = 0;
2396
2397         /* Or into the map we are building up to 3 of the static class
2398         tables, or their negations. The [:blank:] class sets up the same
2399         chars as the [:space:] class (all white space). We remove the vertical
2400         white space chars afterwards. */
2401
2402         posix_class *= 3;
2403         for (i = 0; i < 3; i++)
2404           {
2405           BOOL blankclass = strncmp((char *)ptr, "blank", 5) == 0;
2406           int taboffset = posix_class_maps[posix_class + i];
2407           if (taboffset < 0) break;
2408           if (local_negate)
2409             {
2410             if (i == 0)
2411               for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+taboffset];
2412             else
2413               for (c = 0; c < 32; c++) classbits[c] &= ~cbits[c+taboffset];
2414             if (blankclass) classbits[1] |= 0x3c;
2415             }
2416           else
2417             {
2418             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+taboffset];
2419             if (blankclass) classbits[1] &= ~0x3c;
2420             }
2421           }
2422
2423         ptr = tempptr + 1;
2424         class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
2425         continue;    /* End of POSIX syntax handling */
2426         }
2427
2428       /* Backslash may introduce a single character, or it may introduce one
2429       of the specials, which just set a flag. Escaped items are checked for
2430       validity in the pre-compiling pass. The sequence \b is a special case.
2431       Inside a class (and only there) it is treated as backspace. Elsewhere
2432       it marks a word boundary. Other escapes have preset maps ready to
2433       or into the one we are building. We assume they have more than one
2434       character in them, so set class_charcount bigger than one. */
2435
2436       if (c == '\\')
2437         {
2438         c = check_escape(&ptr, errorptr, *brackets, options, TRUE);
2439
2440         if (-c == ESC_b) c = '\b';       /* \b is backslash in a class */
2441         else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
2442         else if (-c == ESC_Q)            /* Handle start of quoted string */
2443           {
2444           if (ptr[1] == '\\' && ptr[2] == 'E')
2445             {
2446             ptr += 2; /* avoid empty string */
2447             }
2448           else inescq = TRUE;
2449           continue;
2450           }
2451
2452         if (c < 0)
2453           {
2454           register const uschar *cbits = cd->cbits;
2455           class_charcount += 2;     /* Greater than 1 is what matters */
2456           switch (-c)
2457             {
2458             case ESC_d:
2459             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
2460             continue;
2461
2462             case ESC_D:
2463             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
2464             continue;
2465
2466             case ESC_w:
2467             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
2468             continue;
2469
2470             case ESC_W:
2471             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
2472             continue;
2473
2474             case ESC_s:
2475             for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
2476             classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
2477             continue;
2478
2479             case ESC_S:
2480             for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
2481             classbits[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
2482             continue;
2483
2484 #ifdef SUPPORT_UCP
2485             case ESC_p:
2486             case ESC_P:
2487               {
2488               BOOL negated;
2489               int property = get_ucp(&ptr, &negated, errorptr);
2490               if (property < 0) goto FAILED;
2491               class_utf8 = TRUE;
2492               *class_utf8data++ = ((-c == ESC_p) != negated)?
2493                 XCL_PROP : XCL_NOTPROP;
2494               *class_utf8data++ = property;
2495               class_charcount -= 2;   /* Not a < 256 character */
2496               }
2497             continue;
2498 #endif
2499
2500             /* Unrecognized escapes are faulted if PCRE is running in its
2501             strict mode. By default, for compatibility with Perl, they are
2502             treated as literals. */
2503
2504             default:
2505             if ((options & PCRE_EXTRA) != 0)
2506               {
2507               *errorptr = ERR7;
2508               goto FAILED;
2509               }
2510             c = *ptr;              /* The final character */
2511             class_charcount -= 2;  /* Undo the default count from above */
2512             }
2513           }
2514
2515         /* Fall through if we have a single character (c >= 0). This may be
2516         > 256 in UTF-8 mode. */
2517
2518         }   /* End of backslash handling */
2519
2520       /* A single character may be followed by '-' to form a range. However,
2521       Perl does not permit ']' to be the end of the range. A '-' character
2522       here is treated as a literal. */
2523
2524       if (ptr[1] == '-' && ptr[2] != ']')
2525         {
2526         int d;
2527         ptr += 2;
2528
2529 #ifdef SUPPORT_UTF8
2530         if (utf8)
2531           {                           /* Braces are required because the */
2532           GETCHARLEN(d, ptr, ptr);    /* macro generates multiple statements */
2533           }
2534         else
2535 #endif
2536         d = *ptr;  /* Not UTF-8 mode */
2537
2538         /* The second part of a range can be a single-character escape, but
2539         not any of the other escapes. Perl 5.6 treats a hyphen as a literal
2540         in such circumstances. */
2541
2542         if (d == '\\')
2543           {
2544           const uschar *oldptr = ptr;
2545           d = check_escape(&ptr, errorptr, *brackets, options, TRUE);
2546
2547           /* \b is backslash; \X is literal X; any other special means the '-'
2548           was literal */
2549
2550           if (d < 0)
2551             {
2552             if (d == -ESC_b) d = '\b';
2553             else if (d == -ESC_X) d = 'X'; else
2554               {
2555               ptr = oldptr - 2;
2556               goto LONE_SINGLE_CHARACTER;  /* A few lines below */
2557               }
2558             }
2559           }
2560
2561         /* The check that the two values are in the correct order happens in
2562         the pre-pass. Optimize one-character ranges */
2563
2564         if (d == c) goto LONE_SINGLE_CHARACTER;  /* A few lines below */
2565
2566         /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
2567         matching, we have to use an XCLASS with extra data items. Caseless
2568         matching for characters > 127 is available only if UCP support is
2569         available. */
2570
2571 #ifdef SUPPORT_UTF8
2572         if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
2573           {
2574           class_utf8 = TRUE;
2575
2576           /* With UCP support, we can find the other case equivalents of
2577           the relevant characters. There may be several ranges. Optimize how
2578           they fit with the basic range. */
2579
2580 #ifdef SUPPORT_UCP
2581           if ((options & PCRE_CASELESS) != 0)
2582             {
2583             int occ, ocd;
2584             int cc = c;
2585             int origd = d;
2586             while (get_othercase_range(&cc, origd, &occ, &ocd))
2587               {
2588               if (occ >= c && ocd <= d) continue;  /* Skip embedded ranges */
2589
2590               if (occ < c  && ocd >= c - 1)        /* Extend the basic range */
2591                 {                                  /* if there is overlap,   */
2592                 c = occ;                           /* noting that if occ < c */
2593                 continue;                          /* we can't have ocd > d  */
2594                 }                                  /* because a subrange is  */
2595               if (ocd > d && occ <= d + 1)         /* always shorter than    */
2596                 {                                  /* the basic range.       */
2597                 d = ocd;
2598                 continue;
2599                 }
2600
2601               if (occ == ocd)
2602                 {
2603                 *class_utf8data++ = XCL_SINGLE;
2604                 }
2605               else
2606                 {
2607                 *class_utf8data++ = XCL_RANGE;
2608                 class_utf8data += ord2utf8(occ, class_utf8data);
2609                 }
2610               class_utf8data += ord2utf8(ocd, class_utf8data);
2611               }
2612             }
2613 #endif  /* SUPPORT_UCP */
2614
2615           /* Now record the original range, possibly modified for UCP caseless
2616           overlapping ranges. */
2617
2618           *class_utf8data++ = XCL_RANGE;
2619           class_utf8data += ord2utf8(c, class_utf8data);
2620           class_utf8data += ord2utf8(d, class_utf8data);
2621
2622           /* With UCP support, we are done. Without UCP support, there is no
2623           caseless matching for UTF-8 characters > 127; we can use the bit map
2624           for the smaller ones. */
2625
2626 #ifdef SUPPORT_UCP
2627           continue;    /* With next character in the class */
2628 #else
2629           if ((options & PCRE_CASELESS) == 0 || c > 127) continue;
2630
2631           /* Adjust upper limit and fall through to set up the map */
2632
2633           d = 127;
2634
2635 #endif  /* SUPPORT_UCP */
2636           }
2637 #endif  /* SUPPORT_UTF8 */
2638
2639         /* We use the bit map for all cases when not in UTF-8 mode; else
2640         ranges that lie entirely within 0-127 when there is UCP support; else
2641         for partial ranges without UCP support. */
2642
2643         for (; c <= d; c++)
2644           {
2645           classbits[c/8] |= (1 << (c&7));
2646           if ((options & PCRE_CASELESS) != 0)
2647             {
2648             int uc = cd->fcc[c];           /* flip case */
2649             classbits[uc/8] |= (1 << (uc&7));
2650             }
2651           class_charcount++;                /* in case a one-char range */
2652           class_lastchar = c;
2653           }
2654
2655         continue;   /* Go get the next char in the class */
2656         }
2657
2658       /* Handle a lone single character - we can get here for a normal
2659       non-escape char, or after \ that introduces a single character or for an
2660       apparent range that isn't. */
2661
2662       LONE_SINGLE_CHARACTER:
2663
2664       /* Handle a character that cannot go in the bit map */
2665
2666 #ifdef SUPPORT_UTF8
2667       if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
2668         {
2669         class_utf8 = TRUE;
2670         *class_utf8data++ = XCL_SINGLE;
2671         class_utf8data += ord2utf8(c, class_utf8data);
2672
2673 #ifdef SUPPORT_UCP
2674         if ((options & PCRE_CASELESS) != 0)
2675           {
2676           int chartype;
2677           int othercase;
2678           if (ucp_findchar(c, &chartype, &othercase) >= 0 && othercase > 0)
2679             {
2680             *class_utf8data++ = XCL_SINGLE;
2681             class_utf8data += ord2utf8(othercase, class_utf8data);
2682             }
2683           }
2684 #endif  /* SUPPORT_UCP */
2685
2686         }
2687       else
2688 #endif  /* SUPPORT_UTF8 */
2689
2690       /* Handle a single-byte character */
2691         {
2692         classbits[c/8] |= (1 << (c&7));
2693         if ((options & PCRE_CASELESS) != 0)
2694           {
2695           c = cd->fcc[c];   /* flip case */
2696           classbits[c/8] |= (1 << (c&7));
2697           }
2698         class_charcount++;
2699         class_lastchar = c;
2700         }
2701       }
2702
2703     /* Loop until ']' reached; the check for end of string happens inside the
2704     loop. This "while" is the end of the "do" above. */
2705
2706     while ((c = *(++ptr)) != ']' || inescq);
2707
2708     /* If class_charcount is 1, we saw precisely one character whose value is
2709     less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we
2710     can optimize the negative case only if there were no characters >= 128
2711     because OP_NOT and the related opcodes like OP_NOTSTAR operate on
2712     single-bytes only. This is an historical hangover. Maybe one day we can
2713     tidy these opcodes to handle multi-byte characters.
2714
2715     The optimization throws away the bit map. We turn the item into a
2716     1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
2717     that OP_NOT does not support multibyte characters. In the positive case, it
2718     can cause firstbyte to be set. Otherwise, there can be no first char if
2719     this item is first, whatever repeat count may follow. In the case of
2720     reqbyte, save the previous value for reinstating. */
2721
2722 #ifdef SUPPORT_UTF8
2723     if (class_charcount == 1 &&
2724           (!utf8 ||
2725           (!class_utf8 && (!negate_class || class_lastchar < 128))))
2726
2727 #else
2728     if (class_charcount == 1)
2729 #endif
2730       {
2731       zeroreqbyte = reqbyte;
2732
2733       /* The OP_NOT opcode works on one-byte characters only. */
2734
2735       if (negate_class)
2736         {
2737         if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
2738         zerofirstbyte = firstbyte;
2739         *code++ = OP_NOT;
2740         *code++ = class_lastchar;
2741         break;
2742         }
2743
2744       /* For a single, positive character, get the value into mcbuffer, and
2745       then we can handle this with the normal one-character code. */
2746
2747 #ifdef SUPPORT_UTF8
2748       if (utf8 && class_lastchar > 127)
2749         mclength = ord2utf8(class_lastchar, mcbuffer);
2750       else
2751 #endif
2752         {
2753         mcbuffer[0] = class_lastchar;
2754         mclength = 1;
2755         }
2756       goto ONE_CHAR;
2757       }       /* End of 1-char optimization */
2758
2759     /* The general case - not the one-char optimization. If this is the first
2760     thing in the branch, there can be no first char setting, whatever the
2761     repeat count. Any reqbyte setting must remain unchanged after any kind of
2762     repeat. */
2763
2764     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
2765     zerofirstbyte = firstbyte;
2766     zeroreqbyte = reqbyte;
2767
2768     /* If there are characters with values > 255, we have to compile an
2769     extended class, with its own opcode. If there are no characters < 256,
2770     we can omit the bitmap. */
2771
2772 #ifdef SUPPORT_UTF8
2773     if (class_utf8)
2774       {
2775       *class_utf8data++ = XCL_END;    /* Marks the end of extra data */
2776       *code++ = OP_XCLASS;
2777       code += LINK_SIZE;
2778       *code = negate_class? XCL_NOT : 0;
2779
2780       /* If the map is required, install it, and move on to the end of
2781       the extra data */
2782
2783       if (class_charcount > 0)
2784         {
2785         *code++ |= XCL_MAP;
2786         memcpy(code, classbits, 32);
2787         code = class_utf8data;
2788         }
2789
2790       /* If the map is not required, slide down the extra data. */
2791
2792       else
2793         {
2794         int len = class_utf8data - (code + 33);
2795         memmove(code + 1, code + 33, len);
2796         code += len + 1;
2797         }
2798
2799       /* Now fill in the complete length of the item */
2800
2801       PUT(previous, 1, code - previous);
2802       break;   /* End of class handling */
2803       }
2804 #endif
2805
2806     /* If there are no characters > 255, negate the 32-byte map if necessary,
2807     and copy it into the code vector. If this is the first thing in the branch,
2808     there can be no first char setting, whatever the repeat count. Any reqbyte
2809     setting must remain unchanged after any kind of repeat. */
2810
2811     if (negate_class)
2812       {
2813       *code++ = OP_NCLASS;
2814       for (c = 0; c < 32; c++) code[c] = ~classbits[c];
2815       }
2816     else
2817       {
2818       *code++ = OP_CLASS;
2819       memcpy(code, classbits, 32);
2820       }
2821     code += 32;
2822     break;
2823
2824     /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
2825     has been tested above. */
2826
2827     case '{':
2828     if (!is_quantifier) goto NORMAL_CHAR;
2829     ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr);
2830     if (*errorptr != NULL) goto FAILED;
2831     goto REPEAT;
2832
2833     case '*':
2834     repeat_min = 0;
2835     repeat_max = -1;
2836     goto REPEAT;
2837
2838     case '+':
2839     repeat_min = 1;
2840     repeat_max = -1;
2841     goto REPEAT;
2842
2843     case '?':
2844     repeat_min = 0;
2845     repeat_max = 1;
2846
2847     REPEAT:
2848     if (previous == NULL)
2849       {
2850       *errorptr = ERR9;
2851       goto FAILED;
2852       }
2853
2854     if (repeat_min == 0)
2855       {
2856       firstbyte = zerofirstbyte;    /* Adjust for zero repeat */
2857       reqbyte = zeroreqbyte;        /* Ditto */
2858       }
2859
2860     /* Remember whether this is a variable length repeat */
2861
2862     reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
2863
2864     op_type = 0;                    /* Default single-char op codes */
2865     possessive_quantifier = FALSE;  /* Default not possessive quantifier */
2866
2867     /* Save start of previous item, in case we have to move it up to make space
2868     for an inserted OP_ONCE for the additional '+' extension. */
2869
2870     tempcode = previous;
2871
2872     /* If the next character is '+', we have a possessive quantifier. This
2873     implies greediness, whatever the setting of the PCRE_UNGREEDY option.
2874     If the next character is '?' this is a minimizing repeat, by default,
2875     but if PCRE_UNGREEDY is set, it works the other way round. We change the
2876     repeat type to the non-default. */
2877
2878     if (ptr[1] == '+')
2879       {
2880       repeat_type = 0;                  /* Force greedy */
2881       possessive_quantifier = TRUE;
2882       ptr++;
2883       }
2884     else if (ptr[1] == '?')
2885       {
2886       repeat_type = greedy_non_default;
2887       ptr++;
2888       }
2889     else repeat_type = greedy_default;
2890
2891     /* If previous was a recursion, we need to wrap it inside brackets so that
2892     it can be replicated if necessary. */
2893
2894     if (*previous == OP_RECURSE)
2895       {
2896       memmove(previous + 1 + LINK_SIZE, previous, 1 + LINK_SIZE);
2897       code += 1 + LINK_SIZE;
2898       *previous = OP_BRA;
2899       PUT(previous, 1, code - previous);
2900       *code = OP_KET;
2901       PUT(code, 1, code - previous);
2902       code += 1 + LINK_SIZE;
2903       }
2904
2905     /* If previous was a character match, abolish the item and generate a
2906     repeat item instead. If a char item has a minumum of more than one, ensure
2907     that it is set in reqbyte - it might not be if a sequence such as x{3} is
2908     the first thing in a branch because the x will have gone into firstbyte
2909     instead.  */
2910
2911     if (*previous == OP_CHAR || *previous == OP_CHARNC)
2912       {
2913       /* Deal with UTF-8 characters that take up more than one byte. It's
2914       easier to write this out separately than try to macrify it. Use c to
2915       hold the length of the character in bytes, plus 0x80 to flag that it's a
2916       length rather than a small character. */
2917
2918 #ifdef SUPPORT_UTF8
2919       if (utf8 && (code[-1] & 0x80) != 0)
2920         {
2921         uschar *lastchar = code - 1;
2922         while((*lastchar & 0xc0) == 0x80) lastchar--;
2923         c = code - lastchar;            /* Length of UTF-8 character */
2924         memcpy(utf8_char, lastchar, c); /* Save the char */
2925         c |= 0x80;                      /* Flag c as a length */
2926         }
2927       else
2928 #endif
2929
2930       /* Handle the case of a single byte - either with no UTF8 support, or
2931       with UTF-8 disabled, or for a UTF-8 character < 128. */
2932
2933         {
2934         c = code[-1];
2935         if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
2936         }
2937
2938       goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
2939       }
2940
2941     /* If previous was a single negated character ([^a] or similar), we use
2942     one of the special opcodes, replacing it. The code is shared with single-
2943     character repeats by setting opt_type to add a suitable offset into
2944     repeat_type. OP_NOT is currently used only for single-byte chars. */
2945
2946     else if (*previous == OP_NOT)
2947       {
2948       op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
2949       c = previous[1];
2950       goto OUTPUT_SINGLE_REPEAT;
2951       }
2952
2953     /* If previous was a character type match (\d or similar), abolish it and
2954     create a suitable repeat item. The code is shared with single-character
2955     repeats by setting op_type to add a suitable offset into repeat_type. Note
2956     the the Unicode property types will be present only when SUPPORT_UCP is
2957     defined, but we don't wrap the little bits of code here because it just
2958     makes it horribly messy. */
2959
2960     else if (*previous < OP_EODN)
2961       {
2962       uschar *oldcode;
2963       int prop_type;
2964       op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
2965       c = *previous;
2966
2967       OUTPUT_SINGLE_REPEAT:
2968       prop_type = (*previous == OP_PROP || *previous == OP_NOTPROP)?
2969         previous[1] : -1;
2970
2971       oldcode = code;
2972       code = previous;                  /* Usually overwrite previous item */
2973
2974       /* If the maximum is zero then the minimum must also be zero; Perl allows
2975       this case, so we do too - by simply omitting the item altogether. */
2976
2977       if (repeat_max == 0) goto END_REPEAT;
2978
2979       /* All real repeats make it impossible to handle partial matching (maybe
2980       one day we will be able to remove this restriction). */
2981
2982       if (repeat_max != 1) cd->nopartial = TRUE;
2983
2984       /* Combine the op_type with the repeat_type */
2985
2986       repeat_type += op_type;
2987
2988       /* A minimum of zero is handled either as the special case * or ?, or as
2989       an UPTO, with the maximum given. */
2990
2991       if (repeat_min == 0)
2992         {
2993         if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
2994           else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
2995         else
2996           {
2997           *code++ = OP_UPTO + repeat_type;
2998           PUT2INC(code, 0, repeat_max);
2999           }
3000         }
3001
3002       /* A repeat minimum of 1 is optimized into some special cases. If the
3003       maximum is unlimited, we use OP_PLUS. Otherwise, the original item it
3004       left in place and, if the maximum is greater than 1, we use OP_UPTO with
3005       one less than the maximum. */
3006
3007       else if (repeat_min == 1)
3008         {
3009         if (repeat_max == -1)
3010           *code++ = OP_PLUS + repeat_type;
3011         else
3012           {
3013           code = oldcode;                 /* leave previous item in place */
3014           if (repeat_max == 1) goto END_REPEAT;
3015           *code++ = OP_UPTO + repeat_type;
3016           PUT2INC(code, 0, repeat_max - 1);
3017           }
3018         }
3019
3020       /* The case {n,n} is just an EXACT, while the general case {n,m} is
3021       handled as an EXACT followed by an UPTO. */
3022
3023       else
3024         {
3025         *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
3026         PUT2INC(code, 0, repeat_min);
3027
3028         /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
3029         we have to insert the character for the previous code. For a repeated
3030         Unicode property match, there is an extra byte that defines the
3031         required property. In UTF-8 mode, long characters have their length in
3032         c, with the 0x80 bit as a flag. */
3033
3034         if (repeat_max < 0)
3035           {
3036 #ifdef SUPPORT_UTF8
3037           if (utf8 && c >= 128)
3038             {
3039             memcpy(code, utf8_char, c & 7);
3040             code += c & 7;
3041             }
3042           else
3043 #endif
3044             {
3045             *code++ = c;
3046             if (prop_type >= 0) *code++ = prop_type;
3047             }
3048           *code++ = OP_STAR + repeat_type;
3049           }
3050
3051         /* Else insert an UPTO if the max is greater than the min, again
3052         preceded by the character, for the previously inserted code. */
3053
3054         else if (repeat_max != repeat_min)
3055           {
3056 #ifdef SUPPORT_UTF8
3057           if (utf8 && c >= 128)
3058             {
3059             memcpy(code, utf8_char, c & 7);
3060             code += c & 7;
3061             }
3062           else
3063 #endif
3064           *code++ = c;
3065           if (prop_type >= 0) *code++ = prop_type;
3066           repeat_max -= repeat_min;
3067           *code++ = OP_UPTO + repeat_type;
3068           PUT2INC(code, 0, repeat_max);
3069           }
3070         }
3071
3072       /* The character or character type itself comes last in all cases. */
3073
3074 #ifdef SUPPORT_UTF8
3075       if (utf8 && c >= 128)
3076         {
3077         memcpy(code, utf8_char, c & 7);
3078         code += c & 7;
3079         }
3080       else
3081 #endif
3082       *code++ = c;
3083
3084       /* For a repeated Unicode property match, there is an extra byte that
3085       defines the required property. */
3086
3087 #ifdef SUPPORT_UCP
3088       if (prop_type >= 0) *code++ = prop_type;
3089 #endif
3090       }
3091
3092     /* If previous was a character class or a back reference, we put the repeat
3093     stuff after it, but just skip the item if the repeat was {0,0}. */
3094
3095     else if (*previous == OP_CLASS ||
3096              *previous == OP_NCLASS ||
3097 #ifdef SUPPORT_UTF8
3098              *previous == OP_XCLASS ||
3099 #endif
3100              *previous == OP_REF)
3101       {
3102       if (repeat_max == 0)
3103         {
3104         code = previous;
3105         goto END_REPEAT;
3106         }
3107
3108       /* All real repeats make it impossible to handle partial matching (maybe
3109       one day we will be able to remove this restriction). */
3110
3111       if (repeat_max != 1) cd->nopartial = TRUE;
3112
3113       if (repeat_min == 0 && repeat_max == -1)
3114         *code++ = OP_CRSTAR + repeat_type;
3115       else if (repeat_min == 1 && repeat_max == -1)
3116         *code++ = OP_CRPLUS + repeat_type;
3117       else if (repeat_min == 0 && repeat_max == 1)
3118         *code++ = OP_CRQUERY + repeat_type;
3119       else
3120         {
3121         *code++ = OP_CRRANGE + repeat_type;
3122         PUT2INC(code, 0, repeat_min);
3123         if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
3124         PUT2INC(code, 0, repeat_max);
3125         }
3126       }
3127
3128     /* If previous was a bracket group, we may have to replicate it in certain
3129     cases. */
3130
3131     else if (*previous >= OP_BRA || *previous == OP_ONCE ||
3132              *previous == OP_COND)
3133       {
3134       register int i;
3135       int ketoffset = 0;
3136       int len = code - previous;
3137       uschar *bralink = NULL;
3138
3139       /* If the maximum repeat count is unlimited, find the end of the bracket
3140       by scanning through from the start, and compute the offset back to it
3141       from the current code pointer. There may be an OP_OPT setting following
3142       the final KET, so we can't find the end just by going back from the code
3143       pointer. */
3144
3145       if (repeat_max == -1)
3146         {
3147         register uschar *ket = previous;
3148         do ket += GET(ket, 1); while (*ket != OP_KET);
3149         ketoffset = code - ket;
3150         }
3151
3152       /* The case of a zero minimum is special because of the need to stick
3153       OP_BRAZERO in front of it, and because the group appears once in the
3154       data, whereas in other cases it appears the minimum number of times. For
3155       this reason, it is simplest to treat this case separately, as otherwise
3156       the code gets far too messy. There are several special subcases when the
3157       minimum is zero. */
3158
3159       if (repeat_min == 0)
3160         {
3161         /* If the maximum is also zero, we just omit the group from the output
3162         altogether. */
3163
3164         if (repeat_max == 0)
3165           {
3166           code = previous;
3167           goto END_REPEAT;
3168           }
3169
3170         /* If the maximum is 1 or unlimited, we just have to stick in the
3171         BRAZERO and do no more at this point. However, we do need to adjust
3172         any OP_RECURSE calls inside the group that refer to the group itself or
3173         any internal group, because the offset is from the start of the whole
3174         regex. Temporarily terminate the pattern while doing this. */
3175
3176         if (repeat_max <= 1)
3177           {
3178           *code = OP_END;
3179           adjust_recurse(previous, 1, utf8, cd);
3180           memmove(previous+1, previous, len);
3181           code++;
3182           *previous++ = OP_BRAZERO + repeat_type;
3183           }
3184
3185         /* If the maximum is greater than 1 and limited, we have to replicate
3186         in a nested fashion, sticking OP_BRAZERO before each set of brackets.
3187         The first one has to be handled carefully because it's the original
3188         copy, which has to be moved up. The remainder can be handled by code
3189         that is common with the non-zero minimum case below. We have to
3190         adjust the value or repeat_max, since one less copy is required. Once
3191         again, we may have to adjust any OP_RECURSE calls inside the group. */
3192
3193         else
3194           {
3195           int offset;
3196           *code = OP_END;
3197           adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd);
3198           memmove(previous + 2 + LINK_SIZE, previous, len);
3199           code += 2 + LINK_SIZE;
3200           *previous++ = OP_BRAZERO + repeat_type;
3201           *previous++ = OP_BRA;
3202
3203           /* We chain together the bracket offset fields that have to be
3204           filled in later when the ends of the brackets are reached. */
3205
3206           offset = (bralink == NULL)? 0 : previous - bralink;
3207           bralink = previous;
3208           PUTINC(previous, 0, offset);
3209           }
3210
3211         repeat_max--;
3212         }
3213
3214       /* If the minimum is greater than zero, replicate the group as many
3215       times as necessary, and adjust the maximum to the number of subsequent
3216       copies that we need. If we set a first char from the group, and didn't
3217       set a required char, copy the latter from the former. */
3218
3219       else
3220         {
3221         if (repeat_min > 1)
3222           {
3223           if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte;
3224           for (i = 1; i < repeat_min; i++)
3225             {
3226             memcpy(code, previous, len);
3227             code += len;
3228             }
3229           }
3230         if (repeat_max > 0) repeat_max -= repeat_min;
3231         }
3232
3233       /* This code is common to both the zero and non-zero minimum cases. If
3234       the maximum is limited, it replicates the group in a nested fashion,
3235       remembering the bracket starts on a stack. In the case of a zero minimum,
3236       the first one was set up above. In all cases the repeat_max now specifies
3237       the number of additional copies needed. */
3238
3239       if (repeat_max >= 0)
3240         {
3241         for (i = repeat_max - 1; i >= 0; i--)
3242           {
3243           *code++ = OP_BRAZERO + repeat_type;
3244
3245           /* All but the final copy start a new nesting, maintaining the
3246           chain of brackets outstanding. */
3247
3248           if (i != 0)
3249             {
3250             int offset;
3251             *code++ = OP_BRA;
3252             offset = (bralink == NULL)? 0 : code - bralink;
3253             bralink = code;
3254             PUTINC(code, 0, offset);
3255             }
3256
3257           memcpy(code, previous, len);
3258           code += len;
3259           }
3260
3261         /* Now chain through the pending brackets, and fill in their length
3262         fields (which are holding the chain links pro tem). */
3263
3264         while (bralink != NULL)
3265           {
3266           int oldlinkoffset;
3267           int offset = code - bralink + 1;
3268           uschar *bra = code - offset;
3269           oldlinkoffset = GET(bra, 1);
3270           bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
3271           *code++ = OP_KET;
3272           PUTINC(code, 0, offset);
3273           PUT(bra, 1, offset);
3274           }
3275         }
3276
3277       /* If the maximum is unlimited, set a repeater in the final copy. We
3278       can't just offset backwards from the current code point, because we
3279       don't know if there's been an options resetting after the ket. The
3280       correct offset was computed above. */
3281
3282       else code[-ketoffset] = OP_KETRMAX + repeat_type;
3283       }
3284
3285     /* Else there's some kind of shambles */
3286
3287     else
3288       {
3289       *errorptr = ERR11;
3290       goto FAILED;
3291       }
3292
3293     /* If the character following a repeat is '+', we wrap the entire repeated
3294     item inside OP_ONCE brackets. This is just syntactic sugar, taken from
3295     Sun's Java package. The repeated item starts at tempcode, not at previous,
3296     which might be the first part of a string whose (former) last char we
3297     repeated. However, we don't support '+' after a greediness '?'. */
3298
3299     if (possessive_quantifier)
3300       {
3301       int len = code - tempcode;
3302       memmove(tempcode + 1+LINK_SIZE, tempcode, len);
3303       code += 1 + LINK_SIZE;
3304       len += 1 + LINK_SIZE;
3305       tempcode[0] = OP_ONCE;
3306       *code++ = OP_KET;
3307       PUTINC(code, 0, len);
3308       PUT(tempcode, 1, len);
3309       }
3310
3311     /* In all case we no longer have a previous item. We also set the
3312     "follows varying string" flag for subsequently encountered reqbytes if
3313     it isn't already set and we have just passed a varying length item. */
3314
3315     END_REPEAT:
3316     previous = NULL;
3317     cd->req_varyopt |= reqvary;
3318     break;
3319
3320
3321     /* Start of nested bracket sub-expression, or comment or lookahead or
3322     lookbehind or option setting or condition. First deal with special things
3323     that can come after a bracket; all are introduced by ?, and the appearance
3324     of any of them means that this is not a referencing group. They were
3325     checked for validity in the first pass over the string, so we don't have to
3326     check for syntax errors here.  */
3327
3328     case '(':
3329     newoptions = options;
3330     skipbytes = 0;
3331
3332     if (*(++ptr) == '?')
3333       {
3334       int set, unset;
3335       int *optset;
3336
3337       switch (*(++ptr))
3338         {
3339         case '#':                 /* Comment; skip to ket */
3340         ptr++;
3341         while (*ptr != ')') ptr++;
3342         continue;
3343
3344         case ':':                 /* Non-extracting bracket */
3345         bravalue = OP_BRA;
3346         ptr++;
3347         break;
3348
3349         case '(':
3350         bravalue = OP_COND;       /* Conditional group */
3351
3352         /* Condition to test for recursion */
3353
3354         if (ptr[1] == 'R')
3355           {
3356           code[1+LINK_SIZE] = OP_CREF;
3357           PUT2(code, 2+LINK_SIZE, CREF_RECURSE);
3358           skipbytes = 3;
3359           ptr += 3;
3360           }
3361
3362         /* Condition to test for a numbered subpattern match. We know that
3363         if a digit follows ( then there will just be digits until ) because
3364         the syntax was checked in the first pass. */
3365
3366         else if ((digitab[ptr[1]] && ctype_digit) != 0)
3367           {
3368           int condref;                 /* Don't amalgamate; some compilers */
3369           condref = *(++ptr) - '0';    /* grumble at autoincrement in declaration */
3370           while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
3371           if (condref == 0)
3372             {
3373             *errorptr = ERR35;
3374             goto FAILED;
3375             }
3376           ptr++;
3377           code[1+LINK_SIZE] = OP_CREF;
3378           PUT2(code, 2+LINK_SIZE, condref);
3379           skipbytes = 3;
3380           }
3381         /* For conditions that are assertions, we just fall through, having
3382         set bravalue above. */
3383         break;
3384
3385         case '=':                 /* Positive lookahead */
3386         bravalue = OP_ASSERT;
3387         ptr++;
3388         break;
3389
3390         case '!':                 /* Negative lookahead */
3391         bravalue = OP_ASSERT_NOT;
3392         ptr++;
3393         break;
3394
3395         case '<':                 /* Lookbehinds */
3396         switch (*(++ptr))
3397           {
3398           case '=':               /* Positive lookbehind */
3399           bravalue = OP_ASSERTBACK;
3400           ptr++;
3401           break;
3402
3403           case '!':               /* Negative lookbehind */
3404           bravalue = OP_ASSERTBACK_NOT;
3405           ptr++;
3406           break;
3407           }
3408         break;
3409
3410         case '>':                 /* One-time brackets */
3411         bravalue = OP_ONCE;
3412         ptr++;
3413         break;
3414
3415         case 'C':                 /* Callout - may be followed by digits; */
3416         previous_callout = code;  /* Save for later completion */
3417         after_manual_callout = 1; /* Skip one item before completing */
3418         *code++ = OP_CALLOUT;     /* Already checked that the terminating */
3419           {                       /* closing parenthesis is present. */
3420           int n = 0;
3421           while ((digitab[*(++ptr)] & ctype_digit) != 0)
3422             n = n * 10 + *ptr - '0';
3423           if (n > 255)
3424             {
3425             *errorptr = ERR38;
3426             goto FAILED;
3427             }
3428           *code++ = n;
3429           PUT(code, 0, ptr - cd->start_pattern + 1);  /* Pattern offset */
3430           PUT(code, LINK_SIZE, 0);                    /* Default length */
3431           code += 2 * LINK_SIZE;
3432           }
3433         previous = NULL;
3434         continue;
3435
3436         case 'P':                 /* Named subpattern handling */
3437         if (*(++ptr) == '<')      /* Definition */
3438           {
3439           int i, namelen;
3440           uschar *slot = cd->name_table;
3441           const uschar *name;     /* Don't amalgamate; some compilers */
3442           name = ++ptr;           /* grumble at autoincrement in declaration */
3443
3444           while (*ptr++ != '>');
3445           namelen = ptr - name - 1;
3446
3447           for (i = 0; i < cd->names_found; i++)
3448             {
3449             int crc = memcmp(name, slot+2, namelen);
3450             if (crc == 0)
3451               {
3452               if (slot[2+namelen] == 0)
3453                 {
3454                 *errorptr = ERR43;
3455                 goto FAILED;
3456                 }
3457               crc = -1;             /* Current name is substring */
3458               }
3459             if (crc < 0)
3460               {
3461               memmove(slot + cd->name_entry_size, slot,
3462                 (cd->names_found - i) * cd->name_entry_size);
3463               break;
3464               }
3465             slot += cd->name_entry_size;
3466             }
3467
3468           PUT2(slot, 0, *brackets + 1);
3469           memcpy(slot + 2, name, namelen);
3470           slot[2+namelen] = 0;
3471           cd->names_found++;
3472           goto NUMBERED_GROUP;
3473           }
3474
3475         if (*ptr == '=' || *ptr == '>')  /* Reference or recursion */
3476           {
3477           int i, namelen;
3478           int type = *ptr++;
3479           const uschar *name = ptr;
3480           uschar *slot = cd->name_table;
3481
3482           while (*ptr != ')') ptr++;
3483           namelen = ptr - name;
3484
3485           for (i = 0; i < cd->names_found; i++)
3486             {
3487             if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
3488             slot += cd->name_entry_size;
3489             }
3490           if (i >= cd->names_found)
3491             {
3492             *errorptr = ERR15;
3493             goto FAILED;
3494             }
3495
3496           recno = GET2(slot, 0);
3497
3498           if (type == '>') goto HANDLE_RECURSION;  /* A few lines below */
3499
3500           /* Back reference */
3501
3502           previous = code;
3503           *code++ = OP_REF;
3504           PUT2INC(code, 0, recno);
3505           cd->backref_map |= (recno < 32)? (1 << recno) : 1;
3506           if (recno > cd->top_backref) cd->top_backref = recno;
3507           continue;
3508           }
3509
3510         /* Should never happen */
3511         break;
3512
3513         case 'R':                 /* Pattern recursion */
3514         ptr++;                    /* Same as (?0)      */
3515         /* Fall through */
3516
3517         /* Recursion or "subroutine" call */
3518
3519         case '0': case '1': case '2': case '3': case '4':
3520         case '5': case '6': case '7': case '8': case '9':
3521           {
3522           const uschar *called;
3523           recno = 0;
3524           while((digitab[*ptr] & ctype_digit) != 0)
3525             recno = recno * 10 + *ptr++ - '0';
3526
3527           /* Come here from code above that handles a named recursion */
3528
3529           HANDLE_RECURSION:
3530
3531           previous = code;
3532
3533           /* Find the bracket that is being referenced. Temporarily end the
3534           regex in case it doesn't exist. */
3535
3536           *code = OP_END;
3537           called = (recno == 0)?
3538             cd->start_code : find_bracket(cd->start_code, utf8, recno);
3539
3540           if (called == NULL)
3541             {
3542             *errorptr = ERR15;
3543             goto FAILED;
3544             }
3545
3546           /* If the subpattern is still open, this is a recursive call. We
3547           check to see if this is a left recursion that could loop for ever,
3548           and diagnose that case. */
3549
3550           if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8))
3551             {
3552             *errorptr = ERR40;
3553             goto FAILED;
3554             }
3555
3556           /* Insert the recursion/subroutine item */
3557
3558           *code = OP_RECURSE;
3559           PUT(code, 1, called - cd->start_code);
3560           code += 1 + LINK_SIZE;
3561           }
3562         continue;
3563
3564         /* Character after (? not specially recognized */
3565
3566         default:                  /* Option setting */
3567         set = unset = 0;
3568         optset = &set;
3569
3570         while (*ptr != ')' && *ptr != ':')
3571           {
3572           switch (*ptr++)
3573             {
3574             case '-': optset = &unset; break;
3575
3576             case 'i': *optset |= PCRE_CASELESS; break;
3577             case 'm': *optset |= PCRE_MULTILINE; break;
3578             case 's': *optset |= PCRE_DOTALL; break;
3579             case 'x': *optset |= PCRE_EXTENDED; break;
3580             case 'U': *optset |= PCRE_UNGREEDY; break;
3581             case 'X': *optset |= PCRE_EXTRA; break;
3582             }
3583           }
3584
3585         /* Set up the changed option bits, but don't change anything yet. */
3586
3587         newoptions = (options | set) & (~unset);
3588
3589         /* If the options ended with ')' this is not the start of a nested
3590         group with option changes, so the options change at this level. Compile
3591         code to change the ims options if this setting actually changes any of
3592         them. We also pass the new setting back so that it can be put at the
3593         start of any following branches, and when this group ends (if we are in
3594         a group), a resetting item can be compiled.
3595
3596         Note that if this item is right at the start of the pattern, the
3597         options will have been abstracted and made global, so there will be no
3598         change to compile. */
3599
3600         if (*ptr == ')')
3601           {
3602           if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
3603             {
3604             *code++ = OP_OPT;
3605             *code++ = newoptions & PCRE_IMS;
3606             }
3607
3608           /* Change options at this level, and pass them back for use
3609           in subsequent branches. Reset the greedy defaults and the case
3610           value for firstbyte and reqbyte. */
3611
3612           *optionsptr = options = newoptions;
3613           greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
3614           greedy_non_default = greedy_default ^ 1;
3615           req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
3616
3617           previous = NULL;       /* This item can't be repeated */
3618           continue;              /* It is complete */
3619           }
3620
3621         /* If the options ended with ':' we are heading into a nested group
3622         with possible change of options. Such groups are non-capturing and are
3623         not assertions of any kind. All we need to do is skip over the ':';
3624         the newoptions value is handled below. */
3625
3626         bravalue = OP_BRA;
3627         ptr++;
3628         }
3629       }
3630
3631     /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become
3632     non-capturing and behave like (?:...) brackets */
3633
3634     else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
3635       {
3636       bravalue = OP_BRA;
3637       }
3638
3639     /* Else we have a referencing group; adjust the opcode. If the bracket
3640     number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
3641     arrange for the true number to follow later, in an OP_BRANUMBER item. */
3642
3643     else
3644       {
3645       NUMBERED_GROUP:
3646       if (++(*brackets) > EXTRACT_BASIC_MAX)
3647         {
3648         bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
3649         code[1+LINK_SIZE] = OP_BRANUMBER;
3650         PUT2(code, 2+LINK_SIZE, *brackets);
3651         skipbytes = 3;
3652         }
3653       else bravalue = OP_BRA + *brackets;
3654       }
3655
3656     /* Process nested bracketed re. Assertions may not be repeated, but other
3657     kinds can be. We copy code into a non-register variable in order to be able
3658     to pass its address because some compilers complain otherwise. Pass in a
3659     new setting for the ims options if they have changed. */
3660
3661     previous = (bravalue >= OP_ONCE)? code : NULL;
3662     *code = bravalue;
3663     tempcode = code;
3664     tempreqvary = cd->req_varyopt;     /* Save value before bracket */
3665
3666     if (!compile_regex(
3667          newoptions,                   /* The complete new option state */
3668          options & PCRE_IMS,           /* The previous ims option state */
3669          brackets,                     /* Extracting bracket count */
3670          &tempcode,                    /* Where to put code (updated) */
3671          &ptr,                         /* Input pointer (updated) */
3672          errorptr,                     /* Where to put an error message */
3673          (bravalue == OP_ASSERTBACK ||
3674           bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
3675          skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
3676          &subfirstbyte,                /* For possible first char */
3677          &subreqbyte,                  /* For possible last char */
3678          bcptr,                        /* Current branch chain */
3679          cd))                          /* Tables block */
3680       goto FAILED;
3681
3682     /* At the end of compiling, code is still pointing to the start of the
3683     group, while tempcode has been updated to point past the end of the group
3684     and any option resetting that may follow it. The pattern pointer (ptr)
3685     is on the bracket. */
3686
3687     /* If this is a conditional bracket, check that there are no more than
3688     two branches in the group. */
3689
3690     else if (bravalue == OP_COND)
3691       {
3692       uschar *tc = code;
3693       condcount = 0;
3694
3695       do {
3696          condcount++;
3697          tc += GET(tc,1);
3698          }
3699       while (*tc != OP_KET);
3700
3701       if (condcount > 2)
3702         {
3703         *errorptr = ERR27;
3704         goto FAILED;
3705         }
3706
3707       /* If there is just one branch, we must not make use of its firstbyte or
3708       reqbyte, because this is equivalent to an empty second branch. */
3709
3710       if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE;
3711       }
3712
3713     /* Handle updating of the required and first characters. Update for normal
3714     brackets of all kinds, and conditions with two branches (see code above).
3715     If the bracket is followed by a quantifier with zero repeat, we have to
3716     back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the
3717     main loop so that they can be accessed for the back off. */
3718
3719     zeroreqbyte = reqbyte;
3720     zerofirstbyte = firstbyte;
3721     groupsetfirstbyte = FALSE;
3722
3723     if (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_COND)
3724       {
3725       /* If we have not yet set a firstbyte in this branch, take it from the
3726       subpattern, remembering that it was set here so that a repeat of more
3727       than one can replicate it as reqbyte if necessary. If the subpattern has
3728       no firstbyte, set "none" for the whole branch. In both cases, a zero
3729       repeat forces firstbyte to "none". */
3730
3731       if (firstbyte == REQ_UNSET)
3732         {
3733         if (subfirstbyte >= 0)
3734           {
3735           firstbyte = subfirstbyte;
3736           groupsetfirstbyte = TRUE;
3737           }
3738         else firstbyte = REQ_NONE;
3739         zerofirstbyte = REQ_NONE;
3740         }
3741
3742       /* If firstbyte was previously set, convert the subpattern's firstbyte
3743       into reqbyte if there wasn't one, using the vary flag that was in
3744       existence beforehand. */
3745
3746       else if (subfirstbyte >= 0 && subreqbyte < 0)
3747         subreqbyte = subfirstbyte | tempreqvary;
3748
3749       /* If the subpattern set a required byte (or set a first byte that isn't
3750       really the first byte - see above), set it. */
3751
3752       if (subreqbyte >= 0) reqbyte = subreqbyte;
3753       }
3754
3755     /* For a forward assertion, we take the reqbyte, if set. This can be
3756     helpful if the pattern that follows the assertion doesn't set a different
3757     char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte
3758     for an assertion, however because it leads to incorrect effect for patterns
3759     such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead
3760     of a firstbyte. This is overcome by a scan at the end if there's no
3761     firstbyte, looking for an asserted first char. */
3762
3763     else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte;
3764
3765     /* Now update the main code pointer to the end of the group. */
3766
3767     code = tempcode;
3768
3769     /* Error if hit end of pattern */
3770
3771     if (*ptr != ')')
3772       {
3773       *errorptr = ERR14;
3774       goto FAILED;
3775       }
3776     break;
3777
3778     /* Check \ for being a real metacharacter; if not, fall through and handle
3779     it as a data character at the start of a string. Escape items are checked
3780     for validity in the pre-compiling pass. */
3781
3782     case '\\':
3783     tempptr = ptr;
3784     c = check_escape(&ptr, errorptr, *brackets, options, FALSE);
3785
3786     /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
3787     are arranged to be the negation of the corresponding OP_values. For the
3788     back references, the values are ESC_REF plus the reference number. Only
3789     back references and those types that consume a character may be repeated.
3790     We can test for values between ESC_b and ESC_Z for the latter; this may
3791     have to change if any new ones are ever created. */
3792
3793     if (c < 0)
3794       {
3795       if (-c == ESC_Q)            /* Handle start of quoted string */
3796         {
3797         if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
3798           else inescq = TRUE;
3799         continue;
3800         }
3801
3802       /* For metasequences that actually match a character, we disable the
3803       setting of a first character if it hasn't already been set. */
3804
3805       if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z)
3806         firstbyte = REQ_NONE;
3807
3808       /* Set values to reset to if this is followed by a zero repeat. */
3809
3810       zerofirstbyte = firstbyte;
3811       zeroreqbyte = reqbyte;
3812
3813       /* Back references are handled specially */
3814
3815       if (-c >= ESC_REF)
3816         {
3817         int number = -c - ESC_REF;
3818         previous = code;
3819         *code++ = OP_REF;
3820         PUT2INC(code, 0, number);
3821         }
3822
3823       /* So are Unicode property matches, if supported. We know that get_ucp
3824       won't fail because it was tested in the pre-pass. */
3825
3826 #ifdef SUPPORT_UCP
3827       else if (-c == ESC_P || -c == ESC_p)
3828         {
3829         BOOL negated;
3830         int value = get_ucp(&ptr, &negated, errorptr);
3831         previous = code;
3832         *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
3833         *code++ = value;
3834         }
3835 #endif
3836
3837       /* For the rest, we can obtain the OP value by negating the escape
3838       value */
3839
3840       else
3841         {
3842         previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
3843         *code++ = -c;
3844         }
3845       continue;
3846       }
3847
3848     /* We have a data character whose value is in c. In UTF-8 mode it may have
3849     a value > 127. We set its representation in the length/buffer, and then
3850     handle it as a data character. */
3851
3852 #ifdef SUPPORT_UTF8
3853     if (utf8 && c > 127)
3854       mclength = ord2utf8(c, mcbuffer);
3855     else
3856 #endif
3857
3858      {
3859      mcbuffer[0] = c;
3860      mclength = 1;
3861      }
3862
3863     goto ONE_CHAR;
3864
3865     /* Handle a literal character. It is guaranteed not to be whitespace or #
3866     when the extended flag is set. If we are in UTF-8 mode, it may be a
3867     multi-byte literal character. */
3868
3869     default:
3870     NORMAL_CHAR:
3871     mclength = 1;
3872     mcbuffer[0] = c;
3873
3874 #ifdef SUPPORT_UTF8
3875     if (utf8 && (c & 0xc0) == 0xc0)
3876       {
3877       while ((ptr[1] & 0xc0) == 0x80)
3878         mcbuffer[mclength++] = *(++ptr);
3879       }
3880 #endif
3881
3882     /* At this point we have the character's bytes in mcbuffer, and the length
3883     in mclength. When not in UTF-8 mode, the length is always 1. */
3884
3885     ONE_CHAR:
3886     previous = code;
3887     *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR;
3888     for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
3889
3890     /* Set the first and required bytes appropriately. If no previous first
3891     byte, set it from this character, but revert to none on a zero repeat.
3892     Otherwise, leave the firstbyte value alone, and don't change it on a zero
3893     repeat. */
3894
3895     if (firstbyte == REQ_UNSET)
3896       {
3897       zerofirstbyte = REQ_NONE;
3898       zeroreqbyte = reqbyte;
3899
3900       /* If the character is more than one byte long, we can set firstbyte
3901       only if it is not to be matched caselessly. */
3902
3903       if (mclength == 1 || req_caseopt == 0)
3904         {
3905         firstbyte = mcbuffer[0] | req_caseopt;
3906         if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt;
3907         }
3908       else firstbyte = reqbyte = REQ_NONE;
3909       }
3910
3911     /* firstbyte was previously set; we can set reqbyte only the length is
3912     1 or the matching is caseful. */
3913
3914     else
3915       {
3916       zerofirstbyte = firstbyte;
3917       zeroreqbyte = reqbyte;
3918       if (mclength == 1 || req_caseopt == 0)
3919         reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
3920       }
3921
3922     break;            /* End of literal character handling */
3923     }
3924   }                   /* end of big loop */
3925
3926 /* Control never reaches here by falling through, only by a goto for all the
3927 error states. Pass back the position in the pattern so that it can be displayed
3928 to the user for diagnosing the error. */
3929
3930 FAILED:
3931 *ptrptr = ptr;
3932 return FALSE;
3933 }
3934
3935
3936
3937
3938 /*************************************************
3939 *     Compile sequence of alternatives           *
3940 *************************************************/
3941
3942 /* On entry, ptr is pointing past the bracket character, but on return
3943 it points to the closing bracket, or vertical bar, or end of string.
3944 The code variable is pointing at the byte into which the BRA operator has been
3945 stored. If the ims options are changed at the start (for a (?ims: group) or
3946 during any branch, we need to insert an OP_OPT item at the start of every
3947 following branch to ensure they get set correctly at run time, and also pass
3948 the new options into every subsequent branch compile.
3949
3950 Argument:
3951   options        option bits, including any changes for this subpattern
3952   oldims         previous settings of ims option bits
3953   brackets       -> int containing the number of extracting brackets used
3954   codeptr        -> the address of the current code pointer
3955   ptrptr         -> the address of the current pattern pointer
3956   errorptr       -> pointer to error message
3957   lookbehind     TRUE if this is a lookbehind assertion
3958   skipbytes      skip this many bytes at start (for OP_COND, OP_BRANUMBER)
3959   firstbyteptr   place to put the first required character, or a negative number
3960   reqbyteptr     place to put the last required character, or a negative number
3961   bcptr          pointer to the chain of currently open branches
3962   cd             points to the data block with tables pointers etc.
3963
3964 Returns:      TRUE on success
3965 */
3966
3967 static BOOL
3968 compile_regex(int options, int oldims, int *brackets, uschar **codeptr,
3969   const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
3970   int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
3971 {
3972 const uschar *ptr = *ptrptr;
3973 uschar *code = *codeptr;
3974 uschar *last_branch = code;
3975 uschar *start_bracket = code;
3976 uschar *reverse_count = NULL;
3977 int firstbyte, reqbyte;
3978 int branchfirstbyte, branchreqbyte;
3979 branch_chain bc;
3980
3981 bc.outer = bcptr;
3982 bc.current = code;
3983
3984 firstbyte = reqbyte = REQ_UNSET;
3985
3986 /* Offset is set zero to mark that this bracket is still open */
3987
3988 PUT(code, 1, 0);
3989 code += 1 + LINK_SIZE + skipbytes;
3990
3991 /* Loop for each alternative branch */
3992
3993 for (;;)
3994   {
3995   /* Handle a change of ims options at the start of the branch */
3996
3997   if ((options & PCRE_IMS) != oldims)
3998     {
3999     *code++ = OP_OPT;
4000     *code++ = options & PCRE_IMS;
4001     }
4002
4003   /* Set up dummy OP_REVERSE if lookbehind assertion */
4004
4005   if (lookbehind)
4006     {
4007     *code++ = OP_REVERSE;
4008     reverse_count = code;
4009     PUTINC(code, 0, 0);
4010     }
4011
4012   /* Now compile the branch */
4013
4014   if (!compile_branch(&options, brackets, &code, &ptr, errorptr,
4015         &branchfirstbyte, &branchreqbyte, &bc, cd))
4016     {
4017     *ptrptr = ptr;
4018     return FALSE;
4019     }
4020
4021   /* If this is the first branch, the firstbyte and reqbyte values for the
4022   branch become the values for the regex. */
4023
4024   if (*last_branch != OP_ALT)
4025     {
4026     firstbyte = branchfirstbyte;
4027     reqbyte = branchreqbyte;
4028     }
4029
4030   /* If this is not the first branch, the first char and reqbyte have to
4031   match the values from all the previous branches, except that if the previous
4032   value for reqbyte didn't have REQ_VARY set, it can still match, and we set
4033   REQ_VARY for the regex. */
4034
4035   else
4036     {
4037     /* If we previously had a firstbyte, but it doesn't match the new branch,
4038     we have to abandon the firstbyte for the regex, but if there was previously
4039     no reqbyte, it takes on the value of the old firstbyte. */
4040
4041     if (firstbyte >= 0 && firstbyte != branchfirstbyte)
4042       {
4043       if (reqbyte < 0) reqbyte = firstbyte;
4044       firstbyte = REQ_NONE;
4045       }
4046
4047     /* If we (now or from before) have no firstbyte, a firstbyte from the
4048     branch becomes a reqbyte if there isn't a branch reqbyte. */
4049
4050     if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0)
4051         branchreqbyte = branchfirstbyte;
4052
4053     /* Now ensure that the reqbytes match */
4054
4055     if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY))
4056       reqbyte = REQ_NONE;
4057     else reqbyte |= branchreqbyte;   /* To "or" REQ_VARY */
4058     }
4059
4060   /* If lookbehind, check that this branch matches a fixed-length string,
4061   and put the length into the OP_REVERSE item. Temporarily mark the end of
4062   the branch with OP_END. */
4063
4064   if (lookbehind)
4065     {
4066     int length;
4067     *code = OP_END;
4068     length = find_fixedlength(last_branch, options);
4069     DPRINTF(("fixed length = %d\n", length));
4070     if (length < 0)
4071       {
4072       *errorptr = (length == -2)? ERR36 : ERR25;
4073       *ptrptr = ptr;
4074       return FALSE;
4075       }
4076     PUT(reverse_count, 0, length);
4077     }
4078
4079   /* Reached end of expression, either ')' or end of pattern. Go back through
4080   the alternative branches and reverse the chain of offsets, with the field in
4081   the BRA item now becoming an offset to the first alternative. If there are
4082   no alternatives, it points to the end of the group. The length in the
4083   terminating ket is always the length of the whole bracketed item. If any of
4084   the ims options were changed inside the group, compile a resetting op-code
4085   following, except at the very end of the pattern. Return leaving the pointer
4086   at the terminating char. */
4087
4088   if (*ptr != '|')
4089     {
4090     int length = code - last_branch;
4091     do
4092       {
4093       int prev_length = GET(last_branch, 1);
4094       PUT(last_branch, 1, length);
4095       length = prev_length;
4096       last_branch -= length;
4097       }
4098     while (length > 0);
4099
4100     /* Fill in the ket */
4101
4102     *code = OP_KET;
4103     PUT(code, 1, code - start_bracket);
4104     code += 1 + LINK_SIZE;
4105
4106     /* Resetting option if needed */
4107
4108     if ((options & PCRE_IMS) != oldims && *ptr == ')')
4109       {
4110       *code++ = OP_OPT;
4111       *code++ = oldims;
4112       }
4113
4114     /* Set values to pass back */
4115
4116     *codeptr = code;
4117     *ptrptr = ptr;
4118     *firstbyteptr = firstbyte;
4119     *reqbyteptr = reqbyte;
4120     return TRUE;
4121     }
4122
4123   /* Another branch follows; insert an "or" node. Its length field points back
4124   to the previous branch while the bracket remains open. At the end the chain
4125   is reversed. It's done like this so that the start of the bracket has a
4126   zero offset until it is closed, making it possible to detect recursion. */
4127
4128   *code = OP_ALT;
4129   PUT(code, 1, code - last_branch);
4130   bc.current = last_branch = code;
4131   code += 1 + LINK_SIZE;
4132   ptr++;
4133   }
4134 /* Control never reaches here */
4135 }
4136
4137
4138
4139
4140 /*************************************************
4141 *          Check for anchored expression         *
4142 *************************************************/
4143
4144 /* Try to find out if this is an anchored regular expression. Consider each
4145 alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
4146 all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
4147 it's anchored. However, if this is a multiline pattern, then only OP_SOD
4148 counts, since OP_CIRC can match in the middle.
4149
4150 We can also consider a regex to be anchored if OP_SOM starts all its branches.
4151 This is the code for \G, which means "match at start of match position, taking
4152 into account the match offset".
4153
4154 A branch is also implicitly anchored if it starts with .* and DOTALL is set,
4155 because that will try the rest of the pattern at all possible matching points,
4156 so there is no point trying again.... er ....
4157
4158 .... except when the .* appears inside capturing parentheses, and there is a
4159 subsequent back reference to those parentheses. We haven't enough information
4160 to catch that case precisely.
4161
4162 At first, the best we could do was to detect when .* was in capturing brackets
4163 and the highest back reference was greater than or equal to that level.
4164 However, by keeping a bitmap of the first 31 back references, we can catch some
4165 of the more common cases more precisely.
4166
4167 Arguments:
4168   code           points to start of expression (the bracket)
4169   options        points to the options setting
4170   bracket_map    a bitmap of which brackets we are inside while testing; this
4171                   handles up to substring 31; after that we just have to take
4172                   the less precise approach
4173   backref_map    the back reference bitmap
4174
4175 Returns:     TRUE or FALSE
4176 */
4177
4178 static BOOL
4179 is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
4180   unsigned int backref_map)
4181 {
4182 do {
4183    const uschar *scode =
4184      first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE, FALSE);
4185    register int op = *scode;
4186
4187    /* Capturing brackets */
4188
4189    if (op > OP_BRA)
4190      {
4191      int new_map;
4192      op -= OP_BRA;
4193      if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
4194      new_map = bracket_map | ((op < 32)? (1 << op) : 1);
4195      if (!is_anchored(scode, options, new_map, backref_map)) return FALSE;
4196      }
4197
4198    /* Other brackets */
4199
4200    else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
4201      {
4202      if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
4203      }
4204
4205    /* .* is not anchored unless DOTALL is set and it isn't in brackets that
4206    are or may be referenced. */
4207
4208    else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
4209             (*options & PCRE_DOTALL) != 0)
4210      {
4211      if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
4212      }
4213
4214    /* Check for explicit anchoring */
4215
4216    else if (op != OP_SOD && op != OP_SOM &&
4217            ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
4218      return FALSE;
4219    code += GET(code, 1);
4220    }
4221 while (*code == OP_ALT);   /* Loop for each alternative */
4222 return TRUE;
4223 }
4224
4225
4226
4227 /*************************************************
4228 *         Check for starting with ^ or .*        *
4229 *************************************************/
4230
4231 /* This is called to find out if every branch starts with ^ or .* so that
4232 "first char" processing can be done to speed things up in multiline
4233 matching and for non-DOTALL patterns that start with .* (which must start at
4234 the beginning or after \n). As in the case of is_anchored() (see above), we
4235 have to take account of back references to capturing brackets that contain .*
4236 because in that case we can't make the assumption.
4237
4238 Arguments:
4239   code           points to start of expression (the bracket)
4240   bracket_map    a bitmap of which brackets we are inside while testing; this
4241                   handles up to substring 31; after that we just have to take
4242                   the less precise approach
4243   backref_map    the back reference bitmap
4244
4245 Returns:         TRUE or FALSE
4246 */
4247
4248 static BOOL
4249 is_startline(const uschar *code, unsigned int bracket_map,
4250   unsigned int backref_map)
4251 {
4252 do {
4253    const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0,
4254      FALSE);
4255    register int op = *scode;
4256
4257    /* Capturing brackets */
4258
4259    if (op > OP_BRA)
4260      {
4261      int new_map;
4262      op -= OP_BRA;
4263      if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
4264      new_map = bracket_map | ((op < 32)? (1 << op) : 1);
4265      if (!is_startline(scode, new_map, backref_map)) return FALSE;
4266      }
4267
4268    /* Other brackets */
4269
4270    else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
4271      { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
4272
4273    /* .* means "start at start or after \n" if it isn't in brackets that
4274    may be referenced. */
4275
4276    else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
4277      {
4278      if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
4279      }
4280
4281    /* Check for explicit circumflex */
4282
4283    else if (op != OP_CIRC) return FALSE;
4284
4285    /* Move on to the next alternative */
4286
4287    code += GET(code, 1);
4288    }
4289 while (*code == OP_ALT);  /* Loop for each alternative */
4290 return TRUE;
4291 }
4292
4293
4294
4295 /*************************************************
4296 *       Check for asserted fixed first char      *
4297 *************************************************/
4298
4299 /* During compilation, the "first char" settings from forward assertions are
4300 discarded, because they can cause conflicts with actual literals that follow.
4301 However, if we end up without a first char setting for an unanchored pattern,
4302 it is worth scanning the regex to see if there is an initial asserted first
4303 char. If all branches start with the same asserted char, or with a bracket all
4304 of whose alternatives start with the same asserted char (recurse ad lib), then
4305 we return that char, otherwise -1.
4306
4307 Arguments:
4308   code       points to start of expression (the bracket)
4309   options    pointer to the options (used to check casing changes)
4310   inassert   TRUE if in an assertion
4311
4312 Returns:     -1 or the fixed first char
4313 */
4314
4315 static int
4316 find_firstassertedchar(const uschar *code, int *options, BOOL inassert)
4317 {
4318 register int c = -1;
4319 do {
4320    int d;
4321    const uschar *scode =
4322      first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE);
4323    register int op = *scode;
4324
4325    if (op >= OP_BRA) op = OP_BRA;
4326
4327    switch(op)
4328      {
4329      default:
4330      return -1;
4331
4332      case OP_BRA:
4333      case OP_ASSERT:
4334      case OP_ONCE:
4335      case OP_COND:
4336      if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0)
4337        return -1;
4338      if (c < 0) c = d; else if (c != d) return -1;
4339      break;
4340
4341      case OP_EXACT:       /* Fall through */
4342      scode += 2;
4343
4344      case OP_CHAR:
4345      case OP_CHARNC:
4346      case OP_PLUS:
4347      case OP_MINPLUS:
4348      if (!inassert) return -1;
4349      if (c < 0)
4350        {
4351        c = scode[1];
4352        if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS;
4353        }
4354      else if (c != scode[1]) return -1;
4355      break;
4356      }
4357
4358    code += GET(code, 1);
4359    }
4360 while (*code == OP_ALT);
4361 return c;
4362 }
4363
4364
4365
4366
4367 #ifdef SUPPORT_UTF8
4368 /*************************************************
4369 *         Validate a UTF-8 string                *
4370 *************************************************/
4371
4372 /* This function is called (optionally) at the start of compile or match, to
4373 validate that a supposed UTF-8 string is actually valid. The early check means
4374 that subsequent code can assume it is dealing with a valid string. The check
4375 can be turned off for maximum performance, but then consequences of supplying
4376 an invalid string are then undefined.
4377
4378 Arguments:
4379   string       points to the string
4380   length       length of string, or -1 if the string is zero-terminated
4381
4382 Returns:       < 0    if the string is a valid UTF-8 string
4383                >= 0   otherwise; the value is the offset of the bad byte
4384 */
4385
4386 static int
4387 valid_utf8(const uschar *string, int length)
4388 {
4389 register const uschar *p;
4390
4391 if (length < 0)
4392   {
4393   for (p = string; *p != 0; p++);
4394   length = p - string;
4395   }
4396
4397 for (p = string; length-- > 0; p++)
4398   {
4399   register int ab;
4400   register int c = *p;
4401   if (c < 128) continue;
4402   if ((c & 0xc0) != 0xc0) return p - string;
4403   ab = utf8_table4[c & 0x3f];  /* Number of additional bytes */
4404   if (length < ab) return p - string;
4405   length -= ab;
4406
4407   /* Check top bits in the second byte */
4408   if ((*(++p) & 0xc0) != 0x80) return p - string;
4409
4410   /* Check for overlong sequences for each different length */
4411   switch (ab)
4412     {
4413     /* Check for xx00 000x */
4414     case 1:
4415     if ((c & 0x3e) == 0) return p - string;
4416     continue;   /* We know there aren't any more bytes to check */
4417
4418     /* Check for 1110 0000, xx0x xxxx */
4419     case 2:
4420     if (c == 0xe0 && (*p & 0x20) == 0) return p - string;
4421     break;
4422
4423     /* Check for 1111 0000, xx00 xxxx */
4424     case 3:
4425     if (c == 0xf0 && (*p & 0x30) == 0) return p - string;
4426     break;
4427
4428     /* Check for 1111 1000, xx00 0xxx */
4429     case 4:
4430     if (c == 0xf8 && (*p & 0x38) == 0) return p - string;
4431     break;
4432
4433     /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */
4434     case 5:
4435     if (c == 0xfe || c == 0xff ||
4436        (c == 0xfc && (*p & 0x3c) == 0)) return p - string;
4437     break;
4438     }
4439
4440   /* Check for valid bytes after the 2nd, if any; all must start 10 */
4441   while (--ab > 0)
4442     {
4443     if ((*(++p) & 0xc0) != 0x80) return p - string;
4444     }
4445   }
4446
4447 return -1;
4448 }
4449 #endif
4450
4451
4452
4453 /*************************************************
4454 *        Compile a Regular Expression            *
4455 *************************************************/
4456
4457 /* This function takes a string and returns a pointer to a block of store
4458 holding a compiled version of the expression.
4459
4460 Arguments:
4461   pattern      the regular expression
4462   options      various option bits
4463   errorptr     pointer to pointer to error text
4464   erroroffset  ptr offset in pattern where error was detected
4465   tables       pointer to character tables or NULL
4466
4467 Returns:       pointer to compiled data block, or NULL on error,
4468                with errorptr and erroroffset set
4469 */
4470
4471 EXPORT pcre *
4472 pcre_compile(const char *pattern, int options, const char **errorptr,
4473   int *erroroffset, const unsigned char *tables)
4474 {
4475 real_pcre *re;
4476 int length = 1 + LINK_SIZE;      /* For initial BRA plus length */
4477 int c, firstbyte, reqbyte;
4478 int bracount = 0;
4479 int branch_extra = 0;
4480 int branch_newextra;
4481 int item_count = -1;
4482 int name_count = 0;
4483 int max_name_size = 0;
4484 int lastitemlength = 0;
4485 #ifdef SUPPORT_UTF8
4486 BOOL utf8;
4487 BOOL class_utf8;
4488 #endif
4489 BOOL inescq = FALSE;
4490 unsigned int brastackptr = 0;
4491 size_t size;
4492 uschar *code;
4493 const uschar *codestart;
4494 const uschar *ptr;
4495 compile_data compile_block;
4496 int brastack[BRASTACK_SIZE];
4497 uschar bralenstack[BRASTACK_SIZE];
4498
4499 /* We can't pass back an error message if errorptr is NULL; I guess the best we
4500 can do is just return NULL. */
4501
4502 if (errorptr == NULL) return NULL;
4503 *errorptr = NULL;
4504
4505 /* However, we can give a message for this error */
4506
4507 if (erroroffset == NULL)
4508   {
4509   *errorptr = ERR16;
4510   return NULL;
4511   }
4512 *erroroffset = 0;
4513
4514 /* Can't support UTF8 unless PCRE has been compiled to include the code. */
4515
4516 #ifdef SUPPORT_UTF8
4517 utf8 = (options & PCRE_UTF8) != 0;
4518 if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
4519      (*erroroffset = valid_utf8((uschar *)pattern, -1)) >= 0)
4520   {
4521   *errorptr = ERR44;
4522   return NULL;
4523   }
4524 #else
4525 if ((options & PCRE_UTF8) != 0)
4526   {
4527   *errorptr = ERR32;
4528   return NULL;
4529   }
4530 #endif
4531
4532 if ((options & ~PUBLIC_OPTIONS) != 0)
4533   {
4534   *errorptr = ERR17;
4535   return NULL;
4536   }
4537
4538 /* Set up pointers to the individual character tables */
4539
4540 if (tables == NULL) tables = pcre_default_tables;
4541 compile_block.lcc = tables + lcc_offset;
4542 compile_block.fcc = tables + fcc_offset;
4543 compile_block.cbits = tables + cbits_offset;
4544 compile_block.ctypes = tables + ctypes_offset;
4545
4546 /* Maximum back reference and backref bitmap. This is updated for numeric
4547 references during the first pass, but for named references during the actual
4548 compile pass. The bitmap records up to 31 back references to help in deciding
4549 whether (.*) can be treated as anchored or not. */
4550
4551 compile_block.top_backref = 0;
4552 compile_block.backref_map = 0;
4553
4554 /* Reflect pattern for debugging output */
4555
4556 DPRINTF(("------------------------------------------------------------------\n"));
4557 DPRINTF(("%s\n", pattern));
4558
4559 /* The first thing to do is to make a pass over the pattern to compute the
4560 amount of store required to hold the compiled code. This does not have to be
4561 perfect as long as errors are overestimates. At the same time we can detect any
4562 flag settings right at the start, and extract them. Make an attempt to correct
4563 for any counted white space if an "extended" flag setting appears late in the
4564 pattern. We can't be so clever for #-comments. */
4565
4566 ptr = (const uschar *)(pattern - 1);
4567 while ((c = *(++ptr)) != 0)
4568   {
4569   int min, max;
4570   int class_optcount;
4571   int bracket_length;
4572   int duplength;
4573
4574   /* If we are inside a \Q...\E sequence, all chars are literal */
4575
4576   if (inescq)
4577     {
4578     if ((options & PCRE_AUTO_CALLOUT) != 0) length += 2 + 2*LINK_SIZE;
4579     goto NORMAL_CHAR;
4580     }
4581
4582   /* Otherwise, first check for ignored whitespace and comments */
4583
4584   if ((options & PCRE_EXTENDED) != 0)
4585     {
4586     if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
4587     if (c == '#')
4588       {
4589       /* The space before the ; is to avoid a warning on a silly compiler
4590       on the Macintosh. */
4591       while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
4592       if (c == 0) break;
4593       continue;
4594       }
4595     }
4596
4597   item_count++;    /* Is zero for the first non-comment item */
4598
4599   /* Allow space for auto callout before every item except quantifiers. */
4600
4601   if ((options & PCRE_AUTO_CALLOUT) != 0 &&
4602        c != '*' && c != '+' && c != '?' &&
4603        (c != '{' || !is_counted_repeat(ptr + 1)))
4604     length += 2 + 2*LINK_SIZE;
4605
4606   switch(c)
4607     {
4608     /* A backslashed item may be an escaped data character or it may be a
4609     character type. */
4610
4611     case '\\':
4612     c = check_escape(&ptr, errorptr, bracount, options, FALSE);
4613     if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
4614
4615     lastitemlength = 1;     /* Default length of last item for repeats */
4616
4617     if (c >= 0)             /* Data character */
4618       {
4619       length += 2;          /* For a one-byte character */
4620
4621 #ifdef SUPPORT_UTF8
4622       if (utf8 && c > 127)
4623         {
4624         int i;
4625         for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
4626           if (c <= utf8_table1[i]) break;
4627         length += i;
4628         lastitemlength += i;
4629         }
4630 #endif
4631
4632       continue;
4633       }
4634
4635     /* If \Q, enter "literal" mode */
4636
4637     if (-c == ESC_Q)
4638       {
4639       inescq = TRUE;
4640       continue;
4641       }
4642
4643     /* \X is supported only if Unicode property support is compiled */
4644
4645 #ifndef SUPPORT_UCP
4646     if (-c == ESC_X)
4647       {
4648       *errorptr = ERR45;
4649       goto PCRE_ERROR_RETURN;
4650       }
4651 #endif
4652
4653     /* \P and \p are for Unicode properties, but only when the support has
4654     been compiled. Each item needs 2 bytes. */
4655
4656     else if (-c == ESC_P || -c == ESC_p)
4657       {
4658 #ifdef SUPPORT_UCP
4659       BOOL negated;
4660       length += 2;
4661       lastitemlength = 2;
4662       if (get_ucp(&ptr, &negated, errorptr) < 0) goto PCRE_ERROR_RETURN;
4663       continue;
4664 #else
4665       *errorptr = ERR45;
4666       goto PCRE_ERROR_RETURN;
4667 #endif
4668       }
4669
4670     /* Other escapes need one byte */
4671
4672     length++;
4673
4674     /* A back reference needs an additional 2 bytes, plus either one or 5
4675     bytes for a repeat. We also need to keep the value of the highest
4676     back reference. */
4677
4678     if (c <= -ESC_REF)
4679       {
4680       int refnum = -c - ESC_REF;
4681       compile_block.backref_map |= (refnum < 32)? (1 << refnum) : 1;
4682       if (refnum > compile_block.top_backref)
4683         compile_block.top_backref = refnum;
4684       length += 2;   /* For single back reference */
4685       if (ptr[1] == '{' && is_counted_repeat(ptr+2))
4686         {
4687         ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
4688         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
4689         if ((min == 0 && (max == 1 || max == -1)) ||
4690           (min == 1 && max == -1))
4691             length++;
4692         else length += 5;
4693         if (ptr[1] == '?') ptr++;
4694         }
4695       }
4696     continue;
4697
4698     case '^':     /* Single-byte metacharacters */
4699     case '.':
4700     case '$':
4701     length++;
4702     lastitemlength = 1;
4703     continue;
4704
4705     case '*':            /* These repeats won't be after brackets; */
4706     case '+':            /* those are handled separately */
4707     case '?':
4708     length++;
4709     goto POSESSIVE;      /* A few lines below */
4710
4711     /* This covers the cases of braced repeats after a single char, metachar,
4712     class, or back reference. */
4713
4714     case '{':
4715     if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
4716     ptr = read_repeat_counts(ptr+1, &min, &max, errorptr);
4717     if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
4718
4719     /* These special cases just insert one extra opcode */
4720
4721     if ((min == 0 && (max == 1 || max == -1)) ||
4722       (min == 1 && max == -1))
4723         length++;
4724
4725     /* These cases might insert additional copies of a preceding character. */
4726
4727     else
4728       {
4729       if (min != 1)
4730         {
4731         length -= lastitemlength;   /* Uncount the original char or metachar */
4732         if (min > 0) length += 3 + lastitemlength;
4733         }
4734       length += lastitemlength + ((max > 0)? 3 : 1);
4735       }
4736
4737     if (ptr[1] == '?') ptr++;      /* Needs no extra length */
4738
4739     POSESSIVE:                     /* Test for possessive quantifier */
4740     if (ptr[1] == '+')
4741       {
4742       ptr++;
4743       length += 2 + 2*LINK_SIZE;   /* Allow for atomic brackets */
4744       }
4745     continue;
4746
4747     /* An alternation contains an offset to the next branch or ket. If any ims
4748     options changed in the previous branch(es), and/or if we are in a
4749     lookbehind assertion, extra space will be needed at the start of the
4750     branch. This is handled by branch_extra. */
4751
4752     case '|':
4753     length += 1 + LINK_SIZE + branch_extra;
4754     continue;
4755
4756     /* A character class uses 33 characters provided that all the character
4757     values are less than 256. Otherwise, it uses a bit map for low valued
4758     characters, and individual items for others. Don't worry about character
4759     types that aren't allowed in classes - they'll get picked up during the
4760     compile. A character class that contains only one single-byte character
4761     uses 2 or 3 bytes, depending on whether it is negated or not. Notice this
4762     where we can. (In UTF-8 mode we can do this only for chars < 128.) */
4763
4764     case '[':
4765     if (*(++ptr) == '^')
4766       {
4767       class_optcount = 10;  /* Greater than one */
4768       ptr++;
4769       }
4770     else class_optcount = 0;
4771
4772 #ifdef SUPPORT_UTF8
4773     class_utf8 = FALSE;
4774 #endif
4775
4776     /* Written as a "do" so that an initial ']' is taken as data */
4777
4778     if (*ptr != 0) do
4779       {
4780       /* Inside \Q...\E everything is literal except \E */
4781
4782       if (inescq)
4783         {
4784         if (*ptr != '\\' || ptr[1] != 'E') goto GET_ONE_CHARACTER;
4785         inescq = FALSE;
4786         ptr += 1;
4787         continue;
4788         }
4789
4790       /* Outside \Q...\E, check for escapes */
4791
4792       if (*ptr == '\\')
4793         {
4794         c = check_escape(&ptr, errorptr, bracount, options, TRUE);
4795         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
4796
4797         /* \b is backspace inside a class; \X is literal */
4798
4799         if (-c == ESC_b) c = '\b';
4800         else if (-c == ESC_X) c = 'X';
4801
4802         /* \Q enters quoting mode */
4803
4804         else if (-c == ESC_Q)
4805           {
4806           inescq = TRUE;
4807           continue;
4808           }
4809
4810         /* Handle escapes that turn into characters */
4811
4812         if (c >= 0) goto NON_SPECIAL_CHARACTER;
4813
4814         /* Escapes that are meta-things. The normal ones just affect the
4815         bit map, but Unicode properties require an XCLASS extended item. */
4816
4817         else
4818           {
4819           class_optcount = 10;         /* \d, \s etc; make sure > 1 */
4820 #ifdef SUPPORT_UTF8
4821           if (-c == ESC_p || -c == ESC_P)
4822             {
4823             if (!class_utf8)
4824               {
4825               class_utf8 = TRUE;
4826               length += LINK_SIZE + 2;
4827               }
4828             length += 2;
4829             }
4830 #endif
4831           }
4832         }
4833
4834       /* Check the syntax for POSIX stuff. The bits we actually handle are
4835       checked during the real compile phase. */
4836
4837       else if (*ptr == '[' && check_posix_syntax(ptr, &ptr, &compile_block))
4838         {
4839         ptr++;
4840         class_optcount = 10;    /* Make sure > 1 */
4841         }
4842
4843       /* Anything else increments the possible optimization count. We have to
4844       detect ranges here so that we can compute the number of extra ranges for
4845       caseless wide characters when UCP support is available. If there are wide
4846       characters, we are going to have to use an XCLASS, even for single
4847       characters. */
4848
4849       else
4850         {
4851         int d;
4852
4853         GET_ONE_CHARACTER:
4854
4855 #ifdef SUPPORT_UTF8
4856         if (utf8)
4857           {
4858           int extra = 0;
4859           GETCHARLEN(c, ptr, extra);
4860           ptr += extra;
4861           }
4862         else c = *ptr;
4863 #else
4864         c = *ptr;
4865 #endif
4866
4867         /* Come here from handling \ above when it escapes to a char value */
4868
4869         NON_SPECIAL_CHARACTER:
4870         class_optcount++;
4871
4872         d = -1;
4873         if (ptr[1] == '-')
4874           {
4875           uschar const *hyptr = ptr++;
4876           if (ptr[1] == '\\')
4877             {
4878             ptr++;
4879             d = check_escape(&ptr, errorptr, bracount, options, TRUE);
4880             if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
4881             if (-d == ESC_b) d = '\b';        /* backspace */
4882             else if (-d == ESC_X) d = 'X';    /* literal X in a class */
4883             }
4884           else if (ptr[1] != 0 && ptr[1] != ']')
4885             {
4886             ptr++;
4887 #ifdef SUPPORT_UTF8
4888             if (utf8)
4889               {
4890               int extra = 0;
4891               GETCHARLEN(d, ptr, extra);
4892               ptr += extra;
4893               }
4894             else
4895 #endif
4896             d = *ptr;
4897             }
4898           if (d < 0) ptr = hyptr;      /* go back to hyphen as data */
4899           }
4900
4901         /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or >
4902         127 for caseless matching, we will need to use an XCLASS. */
4903
4904         if (d >= 0)
4905           {
4906           class_optcount = 10;     /* Ensure > 1 */
4907           if (d < c)
4908             {
4909             *errorptr = ERR8;
4910             goto PCRE_ERROR_RETURN;
4911             }
4912
4913 #ifdef SUPPORT_UTF8
4914           if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
4915             {
4916             uschar buffer[6];
4917             if (!class_utf8)         /* Allow for XCLASS overhead */
4918               {
4919               class_utf8 = TRUE;
4920               length += LINK_SIZE + 2;
4921               }
4922
4923 #ifdef SUPPORT_UCP
4924             /* If we have UCP support, find out how many extra ranges are
4925             needed to map the other case of characters within this range. We
4926             have to mimic the range optimization here, because extending the
4927             range upwards might push d over a boundary that makes is use
4928             another byte in the UTF-8 representation. */
4929
4930             if ((options & PCRE_CASELESS) != 0)
4931               {
4932               int occ, ocd;
4933               int cc = c;
4934               int origd = d;
4935               while (get_othercase_range(&cc, origd, &occ, &ocd))
4936                 {
4937                 if (occ >= c && ocd <= d) continue;   /* Skip embedded */
4938
4939                 if (occ < c  && ocd >= c - 1)  /* Extend the basic range */
4940                   {                            /* if there is overlap,   */
4941                   c = occ;                     /* noting that if occ < c */
4942                   continue;                    /* we can't have ocd > d  */
4943                   }                            /* because a subrange is  */
4944                 if (ocd > d && occ <= d + 1)   /* always shorter than    */
4945                   {                            /* the basic range.       */
4946                   d = ocd;
4947                   continue;
4948                   }
4949
4950                 /* An extra item is needed */
4951
4952                 length += 1 + ord2utf8(occ, buffer) +
4953                   ((occ == ocd)? 0 : ord2utf8(ocd, buffer));
4954                 }
4955               }
4956 #endif  /* SUPPORT_UCP */
4957
4958             /* The length of the (possibly extended) range */
4959
4960             length += 1 + ord2utf8(c, buffer) + ord2utf8(d, buffer);
4961             }
4962 #endif  /* SUPPORT_UTF8 */
4963
4964           }
4965
4966         /* We have a single character. There is nothing to be done unless we
4967         are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must
4968         allow for an XCL_SINGLE item, doubled for caselessness if there is UCP
4969         support. */
4970
4971         else
4972           {
4973 #ifdef SUPPORT_UTF8
4974           if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
4975             {
4976             uschar buffer[6];
4977             class_optcount = 10;     /* Ensure > 1 */
4978             if (!class_utf8)         /* Allow for XCLASS overhead */
4979               {
4980               class_utf8 = TRUE;
4981               length += LINK_SIZE + 2;
4982               }
4983 #ifdef SUPPORT_UCP
4984             length += (((options & PCRE_CASELESS) != 0)? 2 : 1) *
4985               (1 + ord2utf8(c, buffer));
4986 #else   /* SUPPORT_UCP */
4987             length += 1 + ord2utf8(c, buffer);
4988 #endif  /* SUPPORT_UCP */
4989             }
4990 #endif  /* SUPPORT_UTF8 */
4991           }
4992         }
4993       }
4994     while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */
4995
4996     if (*ptr == 0)                          /* Missing terminating ']' */
4997       {
4998       *errorptr = ERR6;
4999       goto PCRE_ERROR_RETURN;
5000       }
5001
5002     /* We can optimize when there was only one optimizable character. Repeats
5003     for positive and negated single one-byte chars are handled by the general
5004     code. Here, we handle repeats for the class opcodes. */
5005
5006     if (class_optcount == 1) length += 3; else
5007       {
5008       length += 33;
5009
5010       /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier,
5011       we also need extra for wrapping the whole thing in a sub-pattern. */
5012
5013       if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2))
5014         {
5015         ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
5016         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
5017         if ((min == 0 && (max == 1 || max == -1)) ||
5018           (min == 1 && max == -1))
5019             length++;
5020         else length += 5;
5021         if (ptr[1] == '+')
5022           {
5023           ptr++;
5024           length += 2 + 2*LINK_SIZE;
5025           }
5026         else if (ptr[1] == '?') ptr++;
5027         }
5028       }
5029     continue;
5030
5031     /* Brackets may be genuine groups or special things */
5032
5033     case '(':
5034     branch_newextra = 0;
5035     bracket_length = 1 + LINK_SIZE;
5036
5037     /* Handle special forms of bracket, which all start (? */
5038
5039     if (ptr[1] == '?')
5040       {
5041       int set, unset;
5042       int *optset;
5043
5044       switch (c = ptr[2])
5045         {
5046         /* Skip over comments entirely */
5047         case '#':
5048         ptr += 3;
5049         while (*ptr != 0 && *ptr != ')') ptr++;
5050         if (*ptr == 0)
5051           {
5052           *errorptr = ERR18;
5053           goto PCRE_ERROR_RETURN;
5054           }
5055         continue;
5056
5057         /* Non-referencing groups and lookaheads just move the pointer on, and
5058         then behave like a non-special bracket, except that they don't increment
5059         the count of extracting brackets. Ditto for the "once only" bracket,
5060         which is in Perl from version 5.005. */
5061
5062         case ':':
5063         case '=':
5064         case '!':
5065         case '>':
5066         ptr += 2;
5067         break;
5068
5069         /* (?R) specifies a recursive call to the regex, which is an extension
5070         to provide the facility which can be obtained by (?p{perl-code}) in
5071         Perl 5.6. In Perl 5.8 this has become (??{perl-code}).
5072
5073         From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to
5074         the appropriate numbered brackets. This includes both recursive and
5075         non-recursive calls. (?R) is now synonymous with (?0). */
5076
5077         case 'R':
5078         ptr++;
5079
5080         case '0': case '1': case '2': case '3': case '4':
5081         case '5': case '6': case '7': case '8': case '9':
5082         ptr += 2;
5083         if (c != 'R')
5084           while ((digitab[*(++ptr)] & ctype_digit) != 0);
5085         if (*ptr != ')')
5086           {
5087           *errorptr = ERR29;
5088           goto PCRE_ERROR_RETURN;
5089           }
5090         length += 1 + LINK_SIZE;
5091
5092         /* If this item is quantified, it will get wrapped inside brackets so
5093         as to use the code for quantified brackets. We jump down and use the
5094         code that handles this for real brackets. */
5095
5096         if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' || ptr[1] == '{')
5097           {
5098           length += 2 + 2 * LINK_SIZE;       /* to make bracketed */
5099           duplength = 5 + 3 * LINK_SIZE;
5100           goto HANDLE_QUANTIFIED_BRACKETS;
5101           }
5102         continue;
5103
5104         /* (?C) is an extension which provides "callout" - to provide a bit of
5105         the functionality of the Perl (?{...}) feature. An optional number may
5106         follow (default is zero). */
5107
5108         case 'C':
5109         ptr += 2;
5110         while ((digitab[*(++ptr)] & ctype_digit) != 0);
5111         if (*ptr != ')')
5112           {
5113           *errorptr = ERR39;
5114           goto PCRE_ERROR_RETURN;
5115           }
5116         length += 2 + 2*LINK_SIZE;
5117         continue;
5118
5119         /* Named subpatterns are an extension copied from Python */
5120
5121         case 'P':
5122         ptr += 3;
5123         if (*ptr == '<')
5124           {
5125           const uschar *p;    /* Don't amalgamate; some compilers */
5126           p = ++ptr;          /* grumble at autoincrement in declaration */
5127           while ((compile_block.ctypes[*ptr] & ctype_word) != 0) ptr++;
5128           if (*ptr != '>')
5129             {
5130             *errorptr = ERR42;
5131             goto PCRE_ERROR_RETURN;
5132             }
5133           name_count++;
5134           if (ptr - p > max_name_size) max_name_size = (ptr - p);
5135           break;
5136           }
5137
5138         if (*ptr == '=' || *ptr == '>')
5139           {
5140           while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0);
5141           if (*ptr != ')')
5142             {
5143             *errorptr = ERR42;
5144             goto PCRE_ERROR_RETURN;
5145             }
5146           break;
5147           }
5148
5149         /* Unknown character after (?P */
5150
5151         *errorptr = ERR41;
5152         goto PCRE_ERROR_RETURN;
5153
5154         /* Lookbehinds are in Perl from version 5.005 */
5155
5156         case '<':
5157         ptr += 3;
5158         if (*ptr == '=' || *ptr == '!')
5159           {
5160           branch_newextra = 1 + LINK_SIZE;
5161           length += 1 + LINK_SIZE;         /* For the first branch */
5162           break;
5163           }
5164         *errorptr = ERR24;
5165         goto PCRE_ERROR_RETURN;
5166
5167         /* Conditionals are in Perl from version 5.005. The bracket must either
5168         be followed by a number (for bracket reference) or by an assertion
5169         group, or (a PCRE extension) by 'R' for a recursion test. */
5170
5171         case '(':
5172         if (ptr[3] == 'R' && ptr[4] == ')')
5173           {
5174           ptr += 4;
5175           length += 3;
5176           }
5177         else if ((digitab[ptr[3]] & ctype_digit) != 0)
5178           {
5179           ptr += 4;
5180           length += 3;
5181           while ((digitab[*ptr] & ctype_digit) != 0) ptr++;
5182           if (*ptr != ')')
5183             {
5184             *errorptr = ERR26;
5185             goto PCRE_ERROR_RETURN;
5186             }
5187           }
5188         else   /* An assertion must follow */
5189           {
5190           ptr++;   /* Can treat like ':' as far as spacing is concerned */
5191           if (ptr[2] != '?' ||
5192              (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
5193             {
5194             ptr += 2;    /* To get right offset in message */
5195             *errorptr = ERR28;
5196             goto PCRE_ERROR_RETURN;
5197             }
5198           }
5199         break;
5200
5201         /* Else loop checking valid options until ) is met. Anything else is an
5202         error. If we are without any brackets, i.e. at top level, the settings
5203         act as if specified in the options, so massage the options immediately.
5204         This is for backward compatibility with Perl 5.004. */
5205
5206         default:
5207         set = unset = 0;
5208         optset = &set;
5209         ptr += 2;
5210
5211         for (;; ptr++)
5212           {
5213           c = *ptr;
5214           switch (c)
5215             {
5216             case 'i':
5217             *optset |= PCRE_CASELESS;
5218             continue;
5219
5220             case 'm':
5221             *optset |= PCRE_MULTILINE;
5222             continue;
5223
5224             case 's':
5225             *optset |= PCRE_DOTALL;
5226             continue;
5227
5228             case 'x':
5229             *optset |= PCRE_EXTENDED;
5230             continue;
5231
5232             case 'X':
5233             *optset |= PCRE_EXTRA;
5234             continue;
5235
5236             case 'U':
5237             *optset |= PCRE_UNGREEDY;
5238             continue;
5239
5240             case '-':
5241             optset = &unset;
5242             continue;
5243
5244             /* A termination by ')' indicates an options-setting-only item; if
5245             this is at the very start of the pattern (indicated by item_count
5246             being zero), we use it to set the global options. This is helpful
5247             when analyzing the pattern for first characters, etc. Otherwise
5248             nothing is done here and it is handled during the compiling
5249             process.
5250
5251             [Historical note: Up to Perl 5.8, options settings at top level
5252             were always global settings, wherever they appeared in the pattern.
5253             That is, they were equivalent to an external setting. From 5.8
5254             onwards, they apply only to what follows (which is what you might
5255             expect).] */
5256
5257             case ')':
5258             if (item_count == 0)
5259               {
5260               options = (options | set) & (~unset);
5261               set = unset = 0;     /* To save length */
5262               item_count--;        /* To allow for several */
5263               }
5264
5265             /* Fall through */
5266
5267             /* A termination by ':' indicates the start of a nested group with
5268             the given options set. This is again handled at compile time, but
5269             we must allow for compiled space if any of the ims options are
5270             set. We also have to allow for resetting space at the end of
5271             the group, which is why 4 is added to the length and not just 2.
5272             If there are several changes of options within the same group, this
5273             will lead to an over-estimate on the length, but this shouldn't
5274             matter very much. We also have to allow for resetting options at
5275             the start of any alternations, which we do by setting
5276             branch_newextra to 2. Finally, we record whether the case-dependent
5277             flag ever changes within the regex. This is used by the "required
5278             character" code. */
5279
5280             case ':':
5281             if (((set|unset) & PCRE_IMS) != 0)
5282               {
5283               length += 4;
5284               branch_newextra = 2;
5285               if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
5286               }
5287             goto END_OPTIONS;
5288
5289             /* Unrecognized option character */
5290
5291             default:
5292             *errorptr = ERR12;
5293             goto PCRE_ERROR_RETURN;
5294             }
5295           }
5296
5297         /* If we hit a closing bracket, that's it - this is a freestanding
5298         option-setting. We need to ensure that branch_extra is updated if
5299         necessary. The only values branch_newextra can have here are 0 or 2.
5300         If the value is 2, then branch_extra must either be 2 or 5, depending
5301         on whether this is a lookbehind group or not. */
5302
5303         END_OPTIONS:
5304         if (c == ')')
5305           {
5306           if (branch_newextra == 2 &&
5307               (branch_extra == 0 || branch_extra == 1+LINK_SIZE))
5308             branch_extra += branch_newextra;
5309           continue;
5310           }
5311
5312         /* If options were terminated by ':' control comes here. Fall through
5313         to handle the group below. */
5314         }
5315       }
5316
5317     /* Extracting brackets must be counted so we can process escapes in a
5318     Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
5319     need an additional 3 bytes of store per extracting bracket. However, if
5320     PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we
5321     must leave the count alone (it will aways be zero). */
5322
5323     else if ((options & PCRE_NO_AUTO_CAPTURE) == 0)
5324       {
5325       bracount++;
5326       if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
5327       }
5328
5329     /* Save length for computing whole length at end if there's a repeat that
5330     requires duplication of the group. Also save the current value of
5331     branch_extra, and start the new group with the new value. If non-zero, this
5332     will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
5333
5334     if (brastackptr >= sizeof(brastack)/sizeof(int))
5335       {
5336       *errorptr = ERR19;
5337       goto PCRE_ERROR_RETURN;
5338       }
5339
5340     bralenstack[brastackptr] = branch_extra;
5341     branch_extra = branch_newextra;
5342
5343     brastack[brastackptr++] = length;
5344     length += bracket_length;
5345     continue;
5346
5347     /* Handle ket. Look for subsequent max/min; for certain sets of values we
5348     have to replicate this bracket up to that many times. If brastackptr is
5349     0 this is an unmatched bracket which will generate an error, but take care
5350     not to try to access brastack[-1] when computing the length and restoring
5351     the branch_extra value. */
5352
5353     case ')':
5354     length += 1 + LINK_SIZE;
5355     if (brastackptr > 0)
5356       {
5357       duplength = length - brastack[--brastackptr];
5358       branch_extra = bralenstack[brastackptr];
5359       }
5360     else duplength = 0;
5361
5362     /* The following code is also used when a recursion such as (?3) is
5363     followed by a quantifier, because in that case, it has to be wrapped inside
5364     brackets so that the quantifier works. The value of duplength must be
5365     set before arrival. */
5366
5367     HANDLE_QUANTIFIED_BRACKETS:
5368
5369     /* Leave ptr at the final char; for read_repeat_counts this happens
5370     automatically; for the others we need an increment. */
5371
5372     if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2))
5373       {
5374       ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
5375       if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
5376       }
5377     else if (c == '*') { min = 0; max = -1; ptr++; }
5378     else if (c == '+') { min = 1; max = -1; ptr++; }
5379     else if (c == '?') { min = 0; max = 1;  ptr++; }
5380     else { min = 1; max = 1; }
5381
5382     /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
5383     group, and if the maximum is greater than zero, we have to replicate
5384     maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
5385     bracket set. */
5386
5387     if (min == 0)
5388       {
5389       length++;
5390       if (max > 0) length += (max - 1) * (duplength + 3 + 2*LINK_SIZE);
5391       }
5392
5393     /* When the minimum is greater than zero, we have to replicate up to
5394     minval-1 times, with no additions required in the copies. Then, if there
5395     is a limited maximum we have to replicate up to maxval-1 times allowing
5396     for a BRAZERO item before each optional copy and nesting brackets for all
5397     but one of the optional copies. */
5398
5399     else
5400       {
5401       length += (min - 1) * duplength;
5402       if (max > min)   /* Need this test as max=-1 means no limit */
5403         length += (max - min) * (duplength + 3 + 2*LINK_SIZE)
5404           - (2 + 2*LINK_SIZE);
5405       }
5406
5407     /* Allow space for once brackets for "possessive quantifier" */
5408
5409     if (ptr[1] == '+')
5410       {
5411       ptr++;
5412       length += 2 + 2*LINK_SIZE;
5413       }
5414     continue;
5415
5416     /* Non-special character. It won't be space or # in extended mode, so it is
5417     always a genuine character. If we are in a \Q...\E sequence, check for the
5418     end; if not, we have a literal. */
5419
5420     default:
5421     NORMAL_CHAR:
5422
5423     if (inescq && c == '\\' && ptr[1] == 'E')
5424       {
5425       inescq = FALSE;
5426       ptr++;
5427       continue;
5428       }
5429
5430     length += 2;          /* For a one-byte character */
5431     lastitemlength = 1;   /* Default length of last item for repeats */
5432
5433     /* In UTF-8 mode, check for additional bytes. */
5434
5435 #ifdef SUPPORT_UTF8
5436     if (utf8 && (c & 0xc0) == 0xc0)
5437       {
5438       while ((ptr[1] & 0xc0) == 0x80)         /* Can't flow over the end */
5439         {                                     /* because the end is marked */
5440         lastitemlength++;                     /* by a zero byte. */
5441         length++;
5442         ptr++;
5443         }
5444       }
5445 #endif
5446
5447     continue;
5448     }
5449   }
5450
5451 length += 2 + LINK_SIZE;    /* For final KET and END */
5452
5453 if ((options & PCRE_AUTO_CALLOUT) != 0)
5454   length += 2 + 2*LINK_SIZE;  /* For final callout */
5455
5456 if (length > MAX_PATTERN_SIZE)
5457   {
5458   *errorptr = ERR20;
5459   return NULL;
5460   }
5461
5462 /* Compute the size of data block needed and get it, either from malloc or
5463 externally provided function. */
5464
5465 size = length + sizeof(real_pcre) + name_count * (max_name_size + 3);
5466 re = (real_pcre *)(pcre_malloc)(size);
5467
5468 if (re == NULL)
5469   {
5470   *errorptr = ERR21;
5471   return NULL;
5472   }
5473
5474 /* Put in the magic number, and save the sizes, options, and character table
5475 pointer. NULL is used for the default character tables. The nullpad field is at
5476 the end; it's there to help in the case when a regex compiled on a system with
5477 4-byte pointers is run on another with 8-byte pointers. */
5478
5479 re->magic_number = MAGIC_NUMBER;
5480 re->size = size;
5481 re->options = options;
5482 re->dummy1 = re->dummy2 = 0;
5483 re->name_table_offset = sizeof(real_pcre);
5484 re->name_entry_size = max_name_size + 3;
5485 re->name_count = name_count;
5486 re->tables = (tables == pcre_default_tables)? NULL : tables;
5487 re->nullpad = NULL;
5488
5489 /* The starting points of the name/number translation table and of the code are
5490 passed around in the compile data block. */
5491
5492 compile_block.names_found = 0;
5493 compile_block.name_entry_size = max_name_size + 3;
5494 compile_block.name_table = (uschar *)re + re->name_table_offset;
5495 codestart = compile_block.name_table + re->name_entry_size * re->name_count;
5496 compile_block.start_code = codestart;
5497 compile_block.start_pattern = (const uschar *)pattern;
5498 compile_block.req_varyopt = 0;
5499 compile_block.nopartial = FALSE;
5500
5501 /* Set up a starting, non-extracting bracket, then compile the expression. On
5502 error, *errorptr will be set non-NULL, so we don't need to look at the result
5503 of the function here. */
5504
5505 ptr = (const uschar *)pattern;
5506 code = (uschar *)codestart;
5507 *code = OP_BRA;
5508 bracount = 0;
5509 (void)compile_regex(options, options & PCRE_IMS, &bracount, &code, &ptr,
5510   errorptr, FALSE, 0, &firstbyte, &reqbyte, NULL, &compile_block);
5511 re->top_bracket = bracount;
5512 re->top_backref = compile_block.top_backref;
5513
5514 if (compile_block.nopartial) re->options |= PCRE_NOPARTIAL;
5515
5516 /* If not reached end of pattern on success, there's an excess bracket. */
5517
5518 if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
5519
5520 /* Fill in the terminating state and check for disastrous overflow, but
5521 if debugging, leave the test till after things are printed out. */
5522
5523 *code++ = OP_END;
5524
5525 #ifndef DEBUG
5526 if (code - codestart > length) *errorptr = ERR23;
5527 #endif
5528
5529 /* Give an error if there's back reference to a non-existent capturing
5530 subpattern. */
5531
5532 if (re->top_backref > re->top_bracket) *errorptr = ERR15;
5533
5534 /* Failed to compile, or error while post-processing */
5535
5536 if (*errorptr != NULL)
5537   {
5538   (pcre_free)(re);
5539   PCRE_ERROR_RETURN:
5540   *erroroffset = ptr - (const uschar *)pattern;
5541   return NULL;
5542   }
5543
5544 /* If the anchored option was not passed, set the flag if we can determine that
5545 the pattern is anchored by virtue of ^ characters or \A or anything else (such
5546 as starting with .* when DOTALL is set).
5547
5548 Otherwise, if we know what the first character has to be, save it, because that
5549 speeds up unanchored matches no end. If not, see if we can set the
5550 PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
5551 start with ^. and also when all branches start with .* for non-DOTALL matches.
5552 */
5553
5554 if ((options & PCRE_ANCHORED) == 0)
5555   {
5556   int temp_options = options;
5557   if (is_anchored(codestart, &temp_options, 0, compile_block.backref_map))
5558     re->options |= PCRE_ANCHORED;
5559   else
5560     {
5561     if (firstbyte < 0)
5562       firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE);
5563     if (firstbyte >= 0)   /* Remove caseless flag for non-caseable chars */
5564       {
5565       int ch = firstbyte & 255;
5566       re->first_byte = ((firstbyte & REQ_CASELESS) != 0 &&
5567          compile_block.fcc[ch] == ch)? ch : firstbyte;
5568       re->options |= PCRE_FIRSTSET;
5569       }
5570     else if (is_startline(codestart, 0, compile_block.backref_map))
5571       re->options |= PCRE_STARTLINE;
5572     }
5573   }
5574
5575 /* For an anchored pattern, we use the "required byte" only if it follows a
5576 variable length item in the regex. Remove the caseless flag for non-caseable
5577 bytes. */
5578
5579 if (reqbyte >= 0 &&
5580      ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
5581   {
5582   int ch = reqbyte & 255;
5583   re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
5584     compile_block.fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte;
5585   re->options |= PCRE_REQCHSET;
5586   }
5587
5588 /* Print out the compiled data for debugging */
5589
5590 #ifdef DEBUG
5591
5592 printf("Length = %d top_bracket = %d top_backref = %d\n",
5593   length, re->top_bracket, re->top_backref);
5594
5595 if (re->options != 0)
5596   {
5597   printf("%s%s%s%s%s%s%s%s%s%s\n",
5598     ((re->options & PCRE_NOPARTIAL) != 0)? "nopartial " : "",
5599     ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
5600     ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
5601     ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
5602     ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
5603     ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
5604     ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
5605     ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
5606     ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
5607     ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
5608   }
5609
5610 if ((re->options & PCRE_FIRSTSET) != 0)
5611   {
5612   int ch = re->first_byte & 255;
5613   const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
5614   if (isprint(ch)) printf("First char = %c%s\n", ch, caseless);
5615     else printf("First char = \\x%02x%s\n", ch, caseless);
5616   }
5617
5618 if ((re->options & PCRE_REQCHSET) != 0)
5619   {
5620   int ch = re->req_byte & 255;
5621   const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
5622   if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless);
5623     else printf("Req char = \\x%02x%s\n", ch, caseless);
5624   }
5625
5626 print_internals(re, stdout);
5627
5628 /* This check is done here in the debugging case so that the code that
5629 was compiled can be seen. */
5630
5631 if (code - codestart > length)
5632   {
5633   *errorptr = ERR23;
5634   (pcre_free)(re);
5635   *erroroffset = ptr - (uschar *)pattern;
5636   return NULL;
5637   }
5638 #endif
5639
5640 return (pcre *)re;
5641 }
5642
5643
5644
5645 /*************************************************
5646 *          Match a back-reference                *
5647 *************************************************/
5648
5649 /* If a back reference hasn't been set, the length that is passed is greater
5650 than the number of characters left in the string, so the match fails.
5651
5652 Arguments:
5653   offset      index into the offset vector
5654   eptr        points into the subject
5655   length      length to be matched
5656   md          points to match data block
5657   ims         the ims flags
5658
5659 Returns:      TRUE if matched
5660 */
5661
5662 static BOOL
5663 match_ref(int offset, register const uschar *eptr, int length, match_data *md,
5664   unsigned long int ims)
5665 {
5666 const uschar *p = md->start_subject + md->offset_vector[offset];
5667
5668 #ifdef DEBUG
5669 if (eptr >= md->end_subject)
5670   printf("matching subject <null>");
5671 else
5672   {
5673   printf("matching subject ");
5674   pchars(eptr, length, TRUE, md);
5675   }
5676 printf(" against backref ");
5677 pchars(p, length, FALSE, md);
5678 printf("\n");
5679 #endif
5680
5681 /* Always fail if not enough characters left */
5682
5683 if (length > md->end_subject - eptr) return FALSE;
5684
5685 /* Separate the caselesss case for speed */
5686
5687 if ((ims & PCRE_CASELESS) != 0)
5688   {
5689   while (length-- > 0)
5690     if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
5691   }
5692 else
5693   { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
5694
5695 return TRUE;
5696 }
5697
5698
5699 #ifdef SUPPORT_UTF8
5700 /*************************************************
5701 *       Match character against an XCLASS        *
5702 *************************************************/
5703
5704 /* This function is called from within the XCLASS code below, to match a
5705 character against an extended class which might match values > 255.
5706
5707 Arguments:
5708   c           the character
5709   data        points to the flag byte of the XCLASS data
5710
5711 Returns:      TRUE if character matches, else FALSE
5712 */
5713
5714 static BOOL
5715 match_xclass(int c, const uschar *data)
5716 {
5717 int t;
5718 BOOL negated = (*data & XCL_NOT) != 0;
5719
5720 /* Character values < 256 are matched against a bitmap, if one is present. If
5721 not, we still carry on, because there may be ranges that start below 256 in the
5722 additional data. */
5723
5724 if (c < 256)
5725   {
5726   if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
5727     return !negated;   /* char found */
5728   }
5729
5730 /* First skip the bit map if present. Then match against the list of Unicode
5731 properties or large chars or ranges that end with a large char. We won't ever
5732 encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
5733
5734 if ((*data++ & XCL_MAP) != 0) data += 32;
5735
5736 while ((t = *data++) != XCL_END)
5737   {
5738   int x, y;
5739   if (t == XCL_SINGLE)
5740     {
5741     GETCHARINC(x, data);
5742     if (c == x) return !negated;
5743     }
5744   else if (t == XCL_RANGE)
5745     {
5746     GETCHARINC(x, data);
5747     GETCHARINC(y, data);
5748     if (c >= x && c <= y) return !negated;
5749     }
5750
5751 #ifdef SUPPORT_UCP
5752   else  /* XCL_PROP & XCL_NOTPROP */
5753     {
5754     int chartype, othercase;
5755     int rqdtype = *data++;
5756     int category = ucp_findchar(c, &chartype, &othercase);
5757     if (rqdtype >= 128)
5758       {
5759       if ((rqdtype - 128 == category) == (t == XCL_PROP)) return !negated;
5760       }
5761     else
5762       {
5763       if ((rqdtype == chartype) == (t == XCL_PROP)) return !negated;
5764       }
5765     }
5766 #endif  /* SUPPORT_UCP */
5767   }
5768
5769 return negated;   /* char did not match */
5770 }
5771 #endif
5772
5773
5774 /***************************************************************************
5775 ****************************************************************************
5776                    RECURSION IN THE match() FUNCTION
5777
5778 The match() function is highly recursive. Some regular expressions can cause
5779 it to recurse thousands of times. I was writing for Unix, so I just let it
5780 call itself recursively. This uses the stack for saving everything that has
5781 to be saved for a recursive call. On Unix, the stack can be large, and this
5782 works fine.
5783
5784 It turns out that on non-Unix systems there are problems with programs that
5785 use a lot of stack. (This despite the fact that every last chip has oodles
5786 of memory these days, and techniques for extending the stack have been known
5787 for decades.) So....
5788
5789 There is a fudge, triggered by defining NO_RECURSE, which avoids recursive
5790 calls by keeping local variables that need to be preserved in blocks of memory
5791 obtained from malloc instead instead of on the stack. Macros are used to
5792 achieve this so that the actual code doesn't look very different to what it
5793 always used to.
5794 ****************************************************************************
5795 ***************************************************************************/
5796
5797
5798 /* These versions of the macros use the stack, as normal */
5799
5800 #ifndef NO_RECURSE
5801 #define REGISTER register
5802 #define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg)
5803 #define RRETURN(ra) return ra
5804 #else
5805
5806
5807 /* These versions of the macros manage a private stack on the heap. Note
5808 that the rd argument of RMATCH isn't actually used. It's the md argument of
5809 match(), which never changes. */
5810
5811 #define REGISTER
5812
5813 #define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\
5814   {\
5815   heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
5816   if (setjmp(frame->Xwhere) == 0)\
5817     {\
5818     newframe->Xeptr = ra;\
5819     newframe->Xecode = rb;\
5820     newframe->Xoffset_top = rc;\
5821     newframe->Xims = re;\
5822     newframe->Xeptrb = rf;\
5823     newframe->Xflags = rg;\
5824     newframe->Xprevframe = frame;\
5825     frame = newframe;\
5826     DPRINTF(("restarting from line %d\n", __LINE__));\
5827     goto HEAP_RECURSE;\
5828     }\
5829   else\
5830     {\
5831     DPRINTF(("longjumped back to line %d\n", __LINE__));\
5832     frame = md->thisframe;\
5833     rx = frame->Xresult;\
5834     }\
5835   }
5836
5837 #define RRETURN(ra)\
5838   {\
5839   heapframe *newframe = frame;\
5840   frame = newframe->Xprevframe;\
5841   (pcre_stack_free)(newframe);\
5842   if (frame != NULL)\
5843     {\
5844     frame->Xresult = ra;\
5845     md->thisframe = frame;\
5846     longjmp(frame->Xwhere, 1);\
5847     }\
5848   return ra;\
5849   }
5850
5851
5852 /* Structure for remembering the local variables in a private frame */
5853
5854 typedef struct heapframe {
5855   struct heapframe *Xprevframe;
5856
5857   /* Function arguments that may change */
5858
5859   const uschar *Xeptr;
5860   const uschar *Xecode;
5861   int Xoffset_top;
5862   long int Xims;
5863   eptrblock *Xeptrb;
5864   int Xflags;
5865
5866   /* Function local variables */
5867
5868   const uschar *Xcallpat;
5869   const uschar *Xcharptr;
5870   const uschar *Xdata;
5871   const uschar *Xnext;
5872   const uschar *Xpp;
5873   const uschar *Xprev;
5874   const uschar *Xsaved_eptr;
5875
5876   recursion_info Xnew_recursive;
5877
5878   BOOL Xcur_is_word;
5879   BOOL Xcondition;
5880   BOOL Xminimize;
5881   BOOL Xprev_is_word;
5882
5883   unsigned long int Xoriginal_ims;
5884
5885 #ifdef SUPPORT_UCP
5886   int Xprop_type;
5887   int Xprop_fail_result;
5888   int Xprop_category;
5889   int Xprop_chartype;
5890   int Xprop_othercase;
5891   int Xprop_test_against;
5892   int *Xprop_test_variable;
5893 #endif
5894
5895   int Xctype;
5896   int Xfc;
5897   int Xfi;
5898   int Xlength;
5899   int Xmax;
5900   int Xmin;
5901   int Xnumber;
5902   int Xoffset;
5903   int Xop;
5904   int Xsave_capture_last;
5905   int Xsave_offset1, Xsave_offset2, Xsave_offset3;
5906   int Xstacksave[REC_STACK_SAVE_MAX];
5907
5908   eptrblock Xnewptrb;
5909
5910   /* Place to pass back result, and where to jump back to */
5911
5912   int  Xresult;
5913   jmp_buf Xwhere;
5914
5915 } heapframe;
5916
5917 #endif
5918
5919
5920 /***************************************************************************
5921 ***************************************************************************/
5922
5923
5924
5925 /*************************************************
5926 *         Match from current position            *
5927 *************************************************/
5928
5929 /* On entry ecode points to the first opcode, and eptr to the first character
5930 in the subject string, while eptrb holds the value of eptr at the start of the
5931 last bracketed group - used for breaking infinite loops matching zero-length
5932 strings. This function is called recursively in many circumstances. Whenever it
5933 returns a negative (error) response, the outer incarnation must also return the
5934 same response.
5935
5936 Performance note: It might be tempting to extract commonly used fields from the
5937 md structure (e.g. utf8, end_subject) into individual variables to improve
5938 performance. Tests using gcc on a SPARC disproved this; in the first case, it
5939 made performance worse.
5940
5941 Arguments:
5942    eptr        pointer in subject
5943    ecode       position in code
5944    offset_top  current top pointer
5945    md          pointer to "static" info for the match
5946    ims         current /i, /m, and /s options
5947    eptrb       pointer to chain of blocks containing eptr at start of
5948                  brackets - for testing for empty matches
5949    flags       can contain
5950                  match_condassert - this is an assertion condition
5951                  match_isgroup - this is the start of a bracketed group
5952
5953 Returns:       MATCH_MATCH if matched            )  these values are >= 0
5954                MATCH_NOMATCH if failed to match  )
5955                a negative PCRE_ERROR_xxx value if aborted by an error condition
5956                  (e.g. stopped by recursion limit)
5957 */
5958
5959 static int
5960 match(REGISTER const uschar *eptr, REGISTER const uschar *ecode,
5961   int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
5962   int flags)
5963 {
5964 /* These variables do not need to be preserved over recursion in this function,
5965 so they can be ordinary variables in all cases. Mark them with "register"
5966 because they are used a lot in loops. */
5967
5968 register int rrc;    /* Returns from recursive calls */
5969 register int i;      /* Used for loops not involving calls to RMATCH() */
5970 register int c;      /* Character values not kept over RMATCH() calls */
5971
5972 /* When recursion is not being used, all "local" variables that have to be
5973 preserved over calls to RMATCH() are part of a "frame" which is obtained from
5974 heap storage. Set up the top-level frame here; others are obtained from the
5975 heap whenever RMATCH() does a "recursion". See the macro definitions above. */
5976
5977 #ifdef NO_RECURSE
5978 heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
5979 frame->Xprevframe = NULL;            /* Marks the top level */
5980
5981 /* Copy in the original argument variables */
5982
5983 frame->Xeptr = eptr;
5984 frame->Xecode = ecode;
5985 frame->Xoffset_top = offset_top;
5986 frame->Xims = ims;
5987 frame->Xeptrb = eptrb;
5988 frame->Xflags = flags;
5989
5990 /* This is where control jumps back to to effect "recursion" */
5991
5992 HEAP_RECURSE:
5993
5994 /* Macros make the argument variables come from the current frame */
5995
5996 #define eptr               frame->Xeptr
5997 #define ecode              frame->Xecode
5998 #define offset_top         frame->Xoffset_top
5999 #define ims                frame->Xims
6000 #define eptrb              frame->Xeptrb
6001 #define flags              frame->Xflags
6002
6003 /* Ditto for the local variables */
6004
6005 #ifdef SUPPORT_UTF8
6006 #define charptr            frame->Xcharptr
6007 #endif
6008 #define callpat            frame->Xcallpat
6009 #define data               frame->Xdata
6010 #define next               frame->Xnext
6011 #define pp                 frame->Xpp
6012 #define prev               frame->Xprev
6013 #define saved_eptr         frame->Xsaved_eptr
6014
6015 #define new_recursive      frame->Xnew_recursive
6016
6017 #define cur_is_word        frame->Xcur_is_word
6018 #define condition          frame->Xcondition
6019 #define minimize           frame->Xminimize
6020 #define prev_is_word       frame->Xprev_is_word
6021
6022 #define original_ims       frame->Xoriginal_ims
6023
6024 #ifdef SUPPORT_UCP
6025 #define prop_type          frame->Xprop_type
6026 #define prop_fail_result   frame->Xprop_fail_result
6027 #define prop_category      frame->Xprop_category
6028 #define prop_chartype      frame->Xprop_chartype
6029 #define prop_othercase     frame->Xprop_othercase
6030 #define prop_test_against  frame->Xprop_test_against
6031 #define prop_test_variable frame->Xprop_test_variable
6032 #endif
6033
6034 #define ctype              frame->Xctype
6035 #define fc                 frame->Xfc
6036 #define fi                 frame->Xfi
6037 #define length             frame->Xlength
6038 #define max                frame->Xmax
6039 #define min                frame->Xmin
6040 #define number             frame->Xnumber
6041 #define offset             frame->Xoffset
6042 #define op                 frame->Xop
6043 #define save_capture_last  frame->Xsave_capture_last
6044 #define save_offset1       frame->Xsave_offset1
6045 #define save_offset2       frame->Xsave_offset2
6046 #define save_offset3       frame->Xsave_offset3
6047 #define stacksave          frame->Xstacksave
6048
6049 #define newptrb            frame->Xnewptrb
6050
6051 /* When recursion is being used, local variables are allocated on the stack and
6052 get preserved during recursion in the normal way. In this environment, fi and
6053 i, and fc and c, can be the same variables. */
6054
6055 #else
6056 #define fi i
6057 #define fc c
6058
6059
6060 #ifdef SUPPORT_UTF8                /* Many of these variables are used ony */
6061 const uschar *charptr;             /* small blocks of the code. My normal  */
6062 #endif                             /* style of coding would have declared  */
6063 const uschar *callpat;             /* them within each of those blocks.    */
6064 const uschar *data;                /* However, in order to accommodate the */
6065 const uschar *next;                /* version of this code that uses an    */
6066 const uschar *pp;                  /* external "stack" implemented on the  */
6067 const uschar *prev;                /* heap, it is easier to declare them   */
6068 const uschar *saved_eptr;          /* all here, so the declarations can    */
6069                                    /* be cut out in a block. The only      */
6070 recursion_info new_recursive;      /* declarations within blocks below are */
6071                                    /* for variables that do not have to    */
6072 BOOL cur_is_word;                  /* be preserved over a recursive call   */
6073 BOOL condition;                    /* to RMATCH().                         */
6074 BOOL minimize;
6075 BOOL prev_is_word;
6076
6077 unsigned long int original_ims;
6078
6079 #ifdef SUPPORT_UCP
6080 int prop_type;
6081 int prop_fail_result;
6082 int prop_category;
6083 int prop_chartype;
6084 int prop_othercase;
6085 int prop_test_against;
6086 int *prop_test_variable;
6087 #endif
6088
6089 int ctype;
6090 int length;
6091 int max;
6092 int min;
6093 int number;
6094 int offset;
6095 int op;
6096 int save_capture_last;
6097 int save_offset1, save_offset2, save_offset3;
6098 int stacksave[REC_STACK_SAVE_MAX];
6099
6100 eptrblock newptrb;
6101 #endif
6102
6103 /* These statements are here to stop the compiler complaining about unitialized
6104 variables. */
6105
6106 #ifdef SUPPORT_UCP
6107 prop_fail_result = 0;
6108 prop_test_against = 0;
6109 prop_test_variable = NULL;
6110 #endif
6111
6112 /* OK, now we can get on with the real code of the function. Recursion is
6113 specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined,
6114 these just turn into a recursive call to match() and a "return", respectively.
6115 However, RMATCH isn't like a function call because it's quite a complicated
6116 macro. It has to be used in one particular way. This shouldn't, however, impact
6117 performance when true recursion is being used. */
6118
6119 if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT);
6120
6121 original_ims = ims;    /* Save for resetting on ')' */
6122
6123 /* At the start of a bracketed group, add the current subject pointer to the
6124 stack of such pointers, to be re-instated at the end of the group when we hit
6125 the closing ket. When match() is called in other circumstances, we don't add to
6126 this stack. */
6127
6128 if ((flags & match_isgroup) != 0)
6129   {
6130   newptrb.epb_prev = eptrb;
6131   newptrb.epb_saved_eptr = eptr;
6132   eptrb = &newptrb;
6133   }
6134
6135 /* Now start processing the operations. */
6136
6137 for (;;)
6138   {
6139   op = *ecode;
6140   minimize = FALSE;
6141
6142   /* For partial matching, remember if we ever hit the end of the subject after
6143   matching at least one subject character. */
6144
6145   if (md->partial &&
6146       eptr >= md->end_subject &&
6147       eptr > md->start_match)
6148     md->hitend = TRUE;
6149
6150   /* Opening capturing bracket. If there is space in the offset vector, save
6151   the current subject position in the working slot at the top of the vector. We
6152   mustn't change the current values of the data slot, because they may be set
6153   from a previous iteration of this group, and be referred to by a reference
6154   inside the group.
6155
6156   If the bracket fails to match, we need to restore this value and also the
6157   values of the final offsets, in case they were set by a previous iteration of
6158   the same bracket.
6159
6160   If there isn't enough space in the offset vector, treat this as if it were a
6161   non-capturing bracket. Don't worry about setting the flag for the error case
6162   here; that is handled in the code for KET. */
6163
6164   if (op > OP_BRA)
6165     {
6166     number = op - OP_BRA;
6167
6168     /* For extended extraction brackets (large number), we have to fish out the
6169     number from a dummy opcode at the start. */
6170
6171     if (number > EXTRACT_BASIC_MAX)
6172       number = GET2(ecode, 2+LINK_SIZE);
6173     offset = number << 1;
6174
6175 #ifdef DEBUG
6176     printf("start bracket %d subject=", number);
6177     pchars(eptr, 16, TRUE, md);
6178     printf("\n");
6179 #endif
6180
6181     if (offset < md->offset_max)
6182       {
6183       save_offset1 = md->offset_vector[offset];
6184       save_offset2 = md->offset_vector[offset+1];
6185       save_offset3 = md->offset_vector[md->offset_end - number];
6186       save_capture_last = md->capture_last;
6187
6188       DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
6189       md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
6190
6191       do
6192         {
6193         RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
6194           match_isgroup);
6195         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6196         md->capture_last = save_capture_last;
6197         ecode += GET(ecode, 1);
6198         }
6199       while (*ecode == OP_ALT);
6200
6201       DPRINTF(("bracket %d failed\n", number));
6202
6203       md->offset_vector[offset] = save_offset1;
6204       md->offset_vector[offset+1] = save_offset2;
6205       md->offset_vector[md->offset_end - number] = save_offset3;
6206
6207       RRETURN(MATCH_NOMATCH);
6208       }
6209
6210     /* Insufficient room for saving captured contents */
6211
6212     else op = OP_BRA;
6213     }
6214
6215   /* Other types of node can be handled by a switch */
6216
6217   switch(op)
6218     {
6219     case OP_BRA:     /* Non-capturing bracket: optimized */
6220     DPRINTF(("start bracket 0\n"));
6221     do
6222       {
6223       RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
6224         match_isgroup);
6225       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6226       ecode += GET(ecode, 1);
6227       }
6228     while (*ecode == OP_ALT);
6229     DPRINTF(("bracket 0 failed\n"));
6230     RRETURN(MATCH_NOMATCH);
6231
6232     /* Conditional group: compilation checked that there are no more than
6233     two branches. If the condition is false, skipping the first branch takes us
6234     past the end if there is only one branch, but that's OK because that is
6235     exactly what going to the ket would do. */
6236
6237     case OP_COND:
6238     if (ecode[LINK_SIZE+1] == OP_CREF) /* Condition extract or recurse test */
6239       {
6240       offset = GET2(ecode, LINK_SIZE+2) << 1;  /* Doubled ref number */
6241       condition = (offset == CREF_RECURSE * 2)?
6242         (md->recursive != NULL) :
6243         (offset < offset_top && md->offset_vector[offset] >= 0);
6244       RMATCH(rrc, eptr, ecode + (condition?
6245         (LINK_SIZE + 4) : (LINK_SIZE + 1 + GET(ecode, 1))),
6246         offset_top, md, ims, eptrb, match_isgroup);
6247       RRETURN(rrc);
6248       }
6249
6250     /* The condition is an assertion. Call match() to evaluate it - setting
6251     the final argument TRUE causes it to stop at the end of an assertion. */
6252
6253     else
6254       {
6255       RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
6256           match_condassert | match_isgroup);
6257       if (rrc == MATCH_MATCH)
6258         {
6259         ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE+2);
6260         while (*ecode == OP_ALT) ecode += GET(ecode, 1);
6261         }
6262       else if (rrc != MATCH_NOMATCH)
6263         {
6264         RRETURN(rrc);         /* Need braces because of following else */
6265         }
6266       else ecode += GET(ecode, 1);
6267       RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
6268         match_isgroup);
6269       RRETURN(rrc);
6270       }
6271     /* Control never reaches here */
6272
6273     /* Skip over conditional reference or large extraction number data if
6274     encountered. */
6275
6276     case OP_CREF:
6277     case OP_BRANUMBER:
6278     ecode += 3;
6279     break;
6280
6281     /* End of the pattern. If we are in a recursion, we should restore the
6282     offsets appropriately and continue from after the call. */
6283
6284     case OP_END:
6285     if (md->recursive != NULL && md->recursive->group_num == 0)
6286       {
6287       recursion_info *rec = md->recursive;
6288       DPRINTF(("Hit the end in a (?0) recursion\n"));
6289       md->recursive = rec->prevrec;
6290       memmove(md->offset_vector, rec->offset_save,
6291         rec->saved_max * sizeof(int));
6292       md->start_match = rec->save_start;
6293       ims = original_ims;
6294       ecode = rec->after_call;
6295       break;
6296       }
6297
6298     /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty
6299     string - backtracking will then try other alternatives, if any. */
6300
6301     if (md->notempty && eptr == md->start_match) RRETURN(MATCH_NOMATCH);
6302     md->end_match_ptr = eptr;          /* Record where we ended */
6303     md->end_offset_top = offset_top;   /* and how many extracts were taken */
6304     RRETURN(MATCH_MATCH);
6305
6306     /* Change option settings */
6307
6308     case OP_OPT:
6309     ims = ecode[1];
6310     ecode += 2;
6311     DPRINTF(("ims set to %02lx\n", ims));
6312     break;
6313
6314     /* Assertion brackets. Check the alternative branches in turn - the
6315     matching won't pass the KET for an assertion. If any one branch matches,
6316     the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
6317     start of each branch to move the current point backwards, so the code at
6318     this level is identical to the lookahead case. */
6319
6320     case OP_ASSERT:
6321     case OP_ASSERTBACK:
6322     do
6323       {
6324       RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
6325         match_isgroup);
6326       if (rrc == MATCH_MATCH) break;
6327       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6328       ecode += GET(ecode, 1);
6329       }
6330     while (*ecode == OP_ALT);
6331     if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH);
6332
6333     /* If checking an assertion for a condition, return MATCH_MATCH. */
6334
6335     if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
6336
6337     /* Continue from after the assertion, updating the offsets high water
6338     mark, since extracts may have been taken during the assertion. */
6339
6340     do ecode += GET(ecode,1); while (*ecode == OP_ALT);
6341     ecode += 1 + LINK_SIZE;
6342     offset_top = md->end_offset_top;
6343     continue;
6344
6345     /* Negative assertion: all branches must fail to match */
6346
6347     case OP_ASSERT_NOT:
6348     case OP_ASSERTBACK_NOT:
6349     do
6350       {
6351       RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
6352         match_isgroup);
6353       if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);
6354       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6355       ecode += GET(ecode,1);
6356       }
6357     while (*ecode == OP_ALT);
6358
6359     if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
6360
6361     ecode += 1 + LINK_SIZE;
6362     continue;
6363
6364     /* Move the subject pointer back. This occurs only at the start of
6365     each branch of a lookbehind assertion. If we are too close to the start to
6366     move back, this match function fails. When working with UTF-8 we move
6367     back a number of characters, not bytes. */
6368
6369     case OP_REVERSE:
6370 #ifdef SUPPORT_UTF8
6371     if (md->utf8)
6372       {
6373       c = GET(ecode,1);
6374       for (i = 0; i < c; i++)
6375         {
6376         eptr--;
6377         if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
6378         BACKCHAR(eptr)
6379         }
6380       }
6381     else
6382 #endif
6383
6384     /* No UTF-8 support, or not in UTF-8 mode: count is byte count */
6385
6386       {
6387       eptr -= GET(ecode,1);
6388       if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
6389       }
6390
6391     /* Skip to next op code */
6392
6393     ecode += 1 + LINK_SIZE;
6394     break;
6395
6396     /* The callout item calls an external function, if one is provided, passing
6397     details of the match so far. This is mainly for debugging, though the
6398     function is able to force a failure. */
6399
6400     case OP_CALLOUT:
6401     if (pcre_callout != NULL)
6402       {
6403       pcre_callout_block cb;
6404       cb.version          = 1;   /* Version 1 of the callout block */
6405       cb.callout_number   = ecode[1];
6406       cb.offset_vector    = md->offset_vector;
6407       cb.subject          = (const char *)md->start_subject;
6408       cb.subject_length   = md->end_subject - md->start_subject;
6409       cb.start_match      = md->start_match - md->start_subject;
6410       cb.current_position = eptr - md->start_subject;
6411       cb.pattern_position = GET(ecode, 2);
6412       cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
6413       cb.capture_top      = offset_top/2;
6414       cb.capture_last     = md->capture_last;
6415       cb.callout_data     = md->callout_data;
6416       if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
6417       if (rrc < 0) RRETURN(rrc);
6418       }
6419     ecode += 2 + 2*LINK_SIZE;
6420     break;
6421
6422     /* Recursion either matches the current regex, or some subexpression. The
6423     offset data is the offset to the starting bracket from the start of the
6424     whole pattern. (This is so that it works from duplicated subpatterns.)
6425
6426     If there are any capturing brackets started but not finished, we have to
6427     save their starting points and reinstate them after the recursion. However,
6428     we don't know how many such there are (offset_top records the completed
6429     total) so we just have to save all the potential data. There may be up to
6430     65535 such values, which is too large to put on the stack, but using malloc
6431     for small numbers seems expensive. As a compromise, the stack is used when
6432     there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc
6433     is used. A problem is what to do if the malloc fails ... there is no way of
6434     returning to the top level with an error. Save the top REC_STACK_SAVE_MAX
6435     values on the stack, and accept that the rest may be wrong.
6436
6437     There are also other values that have to be saved. We use a chained
6438     sequence of blocks that actually live on the stack. Thanks to Robin Houston
6439     for the original version of this logic. */
6440
6441     case OP_RECURSE:
6442       {
6443       callpat = md->start_code + GET(ecode, 1);
6444       new_recursive.group_num = *callpat - OP_BRA;
6445
6446       /* For extended extraction brackets (large number), we have to fish out
6447       the number from a dummy opcode at the start. */
6448
6449       if (new_recursive.group_num > EXTRACT_BASIC_MAX)
6450         new_recursive.group_num = GET2(callpat, 2+LINK_SIZE);
6451
6452       /* Add to "recursing stack" */
6453
6454       new_recursive.prevrec = md->recursive;
6455       md->recursive = &new_recursive;
6456
6457       /* Find where to continue from afterwards */
6458
6459       ecode += 1 + LINK_SIZE;
6460       new_recursive.after_call = ecode;
6461
6462       /* Now save the offset data. */
6463
6464       new_recursive.saved_max = md->offset_end;
6465       if (new_recursive.saved_max <= REC_STACK_SAVE_MAX)
6466         new_recursive.offset_save = stacksave;
6467       else
6468         {
6469         new_recursive.offset_save =
6470           (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int));
6471         if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
6472         }
6473
6474       memcpy(new_recursive.offset_save, md->offset_vector,
6475             new_recursive.saved_max * sizeof(int));
6476       new_recursive.save_start = md->start_match;
6477       md->start_match = eptr;
6478
6479       /* OK, now we can do the recursion. For each top-level alternative we
6480       restore the offset and recursion data. */
6481
6482       DPRINTF(("Recursing into group %d\n", new_recursive.group_num));
6483       do
6484         {
6485         RMATCH(rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, md, ims,
6486             eptrb, match_isgroup);
6487         if (rrc == MATCH_MATCH)
6488           {
6489           md->recursive = new_recursive.prevrec;
6490           if (new_recursive.offset_save != stacksave)
6491             (pcre_free)(new_recursive.offset_save);
6492           RRETURN(MATCH_MATCH);
6493           }
6494         else if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6495
6496         md->recursive = &new_recursive;
6497         memcpy(md->offset_vector, new_recursive.offset_save,
6498             new_recursive.saved_max * sizeof(int));
6499         callpat += GET(callpat, 1);
6500         }
6501       while (*callpat == OP_ALT);
6502
6503       DPRINTF(("Recursion didn't match\n"));
6504       md->recursive = new_recursive.prevrec;
6505       if (new_recursive.offset_save != stacksave)
6506         (pcre_free)(new_recursive.offset_save);
6507       RRETURN(MATCH_NOMATCH);
6508       }
6509     /* Control never reaches here */
6510
6511     /* "Once" brackets are like assertion brackets except that after a match,
6512     the point in the subject string is not moved back. Thus there can never be
6513     a move back into the brackets. Friedl calls these "atomic" subpatterns.
6514     Check the alternative branches in turn - the matching won't pass the KET
6515     for this kind of subpattern. If any one branch matches, we carry on as at
6516     the end of a normal bracket, leaving the subject pointer. */
6517
6518     case OP_ONCE:
6519       {
6520       prev = ecode;
6521       saved_eptr = eptr;
6522
6523       do
6524         {
6525         RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims,
6526           eptrb, match_isgroup);
6527         if (rrc == MATCH_MATCH) break;
6528         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6529         ecode += GET(ecode,1);
6530         }
6531       while (*ecode == OP_ALT);
6532
6533       /* If hit the end of the group (which could be repeated), fail */
6534
6535       if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH);
6536
6537       /* Continue as from after the assertion, updating the offsets high water
6538       mark, since extracts may have been taken. */
6539
6540       do ecode += GET(ecode,1); while (*ecode == OP_ALT);
6541
6542       offset_top = md->end_offset_top;
6543       eptr = md->end_match_ptr;
6544
6545       /* For a non-repeating ket, just continue at this level. This also
6546       happens for a repeating ket if no characters were matched in the group.
6547       This is the forcible breaking of infinite loops as implemented in Perl
6548       5.005. If there is an options reset, it will get obeyed in the normal
6549       course of events. */
6550
6551       if (*ecode == OP_KET || eptr == saved_eptr)
6552         {
6553         ecode += 1+LINK_SIZE;
6554         break;
6555         }
6556
6557       /* The repeating kets try the rest of the pattern or restart from the
6558       preceding bracket, in the appropriate order. We need to reset any options
6559       that changed within the bracket before re-running it, so check the next
6560       opcode. */
6561
6562       if (ecode[1+LINK_SIZE] == OP_OPT)
6563         {
6564         ims = (ims & ~PCRE_IMS) | ecode[4];
6565         DPRINTF(("ims set to %02lx at group repeat\n", ims));
6566         }
6567
6568       if (*ecode == OP_KETRMIN)
6569         {
6570         RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0);
6571         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6572         RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
6573         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6574         }
6575       else  /* OP_KETRMAX */
6576         {
6577         RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
6578         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6579         RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
6580         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6581         }
6582       }
6583     RRETURN(MATCH_NOMATCH);
6584
6585     /* An alternation is the end of a branch; scan along to find the end of the
6586     bracketed group and go to there. */
6587
6588     case OP_ALT:
6589     do ecode += GET(ecode,1); while (*ecode == OP_ALT);
6590     break;
6591
6592     /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
6593     that it may occur zero times. It may repeat infinitely, or not at all -
6594     i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
6595     repeat limits are compiled as a number of copies, with the optional ones
6596     preceded by BRAZERO or BRAMINZERO. */
6597
6598     case OP_BRAZERO:
6599       {
6600       next = ecode+1;
6601       RMATCH(rrc, eptr, next, offset_top, md, ims, eptrb, match_isgroup);
6602       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6603       do next += GET(next,1); while (*next == OP_ALT);
6604       ecode = next + 1+LINK_SIZE;
6605       }
6606     break;
6607
6608     case OP_BRAMINZERO:
6609       {
6610       next = ecode+1;
6611       do next += GET(next,1); while (*next == OP_ALT);
6612       RMATCH(rrc, eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb,
6613         match_isgroup);
6614       if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6615       ecode++;
6616       }
6617     break;
6618
6619     /* End of a group, repeated or non-repeating. If we are at the end of
6620     an assertion "group", stop matching and return MATCH_MATCH, but record the
6621     current high water mark for use by positive assertions. Do this also
6622     for the "once" (not-backup up) groups. */
6623
6624     case OP_KET:
6625     case OP_KETRMIN:
6626     case OP_KETRMAX:
6627       {
6628       prev = ecode - GET(ecode, 1);
6629       saved_eptr = eptrb->epb_saved_eptr;
6630
6631       /* Back up the stack of bracket start pointers. */
6632
6633       eptrb = eptrb->epb_prev;
6634
6635       if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
6636           *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
6637           *prev == OP_ONCE)
6638         {
6639         md->end_match_ptr = eptr;      /* For ONCE */
6640         md->end_offset_top = offset_top;
6641         RRETURN(MATCH_MATCH);
6642         }
6643
6644       /* In all other cases except a conditional group we have to check the
6645       group number back at the start and if necessary complete handling an
6646       extraction by setting the offsets and bumping the high water mark. */
6647
6648       if (*prev != OP_COND)
6649         {
6650         number = *prev - OP_BRA;
6651
6652         /* For extended extraction brackets (large number), we have to fish out
6653         the number from a dummy opcode at the start. */
6654
6655         if (number > EXTRACT_BASIC_MAX) number = GET2(prev, 2+LINK_SIZE);
6656         offset = number << 1;
6657
6658 #ifdef DEBUG
6659         printf("end bracket %d", number);
6660         printf("\n");
6661 #endif
6662
6663         /* Test for a numbered group. This includes groups called as a result
6664         of recursion. Note that whole-pattern recursion is coded as a recurse
6665         into group 0, so it won't be picked up here. Instead, we catch it when
6666         the OP_END is reached. */
6667
6668         if (number > 0)
6669           {
6670           md->capture_last = number;
6671           if (offset >= md->offset_max) md->offset_overflow = TRUE; else
6672             {
6673             md->offset_vector[offset] =
6674               md->offset_vector[md->offset_end - number];
6675             md->offset_vector[offset+1] = eptr - md->start_subject;
6676             if (offset_top <= offset) offset_top = offset + 2;
6677             }
6678
6679           /* Handle a recursively called group. Restore the offsets
6680           appropriately and continue from after the call. */
6681
6682           if (md->recursive != NULL && md->recursive->group_num == number)
6683             {
6684             recursion_info *rec = md->recursive;
6685             DPRINTF(("Recursion (%d) succeeded - continuing\n", number));
6686             md->recursive = rec->prevrec;
6687             md->start_match = rec->save_start;
6688             memcpy(md->offset_vector, rec->offset_save,
6689               rec->saved_max * sizeof(int));
6690             ecode = rec->after_call;
6691             ims = original_ims;
6692             break;
6693             }
6694           }
6695         }
6696
6697       /* Reset the value of the ims flags, in case they got changed during
6698       the group. */
6699
6700       ims = original_ims;
6701       DPRINTF(("ims reset to %02lx\n", ims));
6702
6703       /* For a non-repeating ket, just continue at this level. This also
6704       happens for a repeating ket if no characters were matched in the group.
6705       This is the forcible breaking of infinite loops as implemented in Perl
6706       5.005. If there is an options reset, it will get obeyed in the normal
6707       course of events. */
6708
6709       if (*ecode == OP_KET || eptr == saved_eptr)
6710         {
6711         ecode += 1 + LINK_SIZE;
6712         break;
6713         }
6714
6715       /* The repeating kets try the rest of the pattern or restart from the
6716       preceding bracket, in the appropriate order. */
6717
6718       if (*ecode == OP_KETRMIN)
6719         {
6720         RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
6721         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6722         RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
6723         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6724         }
6725       else  /* OP_KETRMAX */
6726         {
6727         RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
6728         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6729         RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
6730         if (rrc != MATCH_NOMATCH) RRETURN(rrc);
6731         }
6732       }
6733
6734     RRETURN(MATCH_NOMATCH);
6735
6736     /* Start of subject unless notbol, or after internal newline if multiline */
6737
6738     case OP_CIRC:
6739     if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
6740     if ((ims & PCRE_MULTILINE) != 0)
6741       {
6742       if (eptr != md->start_subject && eptr[-1] != NEWLINE)
6743         RRETURN(MATCH_NOMATCH);
6744       ecode++;
6745       break;
6746       }
6747     /* ... else fall through */
6748
6749     /* Start of subject assertion */
6750
6751     case OP_SOD:
6752     if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH);
6753     ecode++;
6754     break;
6755
6756     /* Start of match assertion */
6757
6758     case OP_SOM:
6759     if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH);
6760     ecode++;
6761     break;
6762
6763     /* Assert before internal newline if multiline, or before a terminating
6764     newline unless endonly is set, else end of subject unless noteol is set. */
6765
6766     case OP_DOLL:
6767     if ((ims & PCRE_MULTILINE) != 0)
6768       {
6769       if (eptr < md->end_subject)
6770         { if (*eptr != NEWLINE) RRETURN(MATCH_NOMATCH); }
6771       else
6772         { if (md->noteol) RRETURN(MATCH_NOMATCH); }
6773       ecode++;
6774       break;
6775       }
6776     else
6777       {
6778       if (md->noteol) RRETURN(MATCH_NOMATCH);
6779       if (!md->endonly)
6780         {
6781         if (eptr < md->end_subject - 1 ||
6782            (eptr == md->end_subject - 1 && *eptr != NEWLINE))
6783           RRETURN(MATCH_NOMATCH);
6784         ecode++;
6785         break;
6786         }
6787       }
6788     /* ... else fall through */
6789
6790     /* End of subject assertion (\z) */
6791
6792     case OP_EOD:
6793     if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH);
6794     ecode++;
6795     break;
6796
6797     /* End of subject or ending \n assertion (\Z) */
6798
6799     case OP_EODN:
6800     if (eptr < md->end_subject - 1 ||
6801        (eptr == md->end_subject - 1 && *eptr != NEWLINE)) RRETURN(MATCH_NOMATCH);
6802     ecode++;
6803     break;
6804
6805     /* Word boundary assertions */
6806
6807     case OP_NOT_WORD_BOUNDARY:
6808     case OP_WORD_BOUNDARY:
6809       {
6810
6811       /* Find out if the previous and current characters are "word" characters.
6812       It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to
6813       be "non-word" characters. */
6814
6815 #ifdef SUPPORT_UTF8
6816       if (md->utf8)
6817         {
6818         if (eptr == md->start_subject) prev_is_word = FALSE; else
6819           {
6820           const uschar *lastptr = eptr - 1;
6821           while((*lastptr & 0xc0) == 0x80) lastptr--;
6822           GETCHAR(c, lastptr);
6823           prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
6824           }
6825         if (eptr >= md->end_subject) cur_is_word = FALSE; else
6826           {
6827           GETCHAR(c, eptr);
6828           cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
6829           }
6830         }
6831       else
6832 #endif
6833
6834       /* More streamlined when not in UTF-8 mode */
6835
6836         {
6837         prev_is_word = (eptr != md->start_subject) &&
6838           ((md->ctypes[eptr[-1]] & ctype_word) != 0);
6839         cur_is_word = (eptr < md->end_subject) &&
6840           ((md->ctypes[*eptr] & ctype_word) != 0);
6841         }
6842
6843       /* Now see if the situation is what we want */
6844
6845       if ((*ecode++ == OP_WORD_BOUNDARY)?
6846            cur_is_word == prev_is_word : cur_is_word != prev_is_word)
6847         RRETURN(MATCH_NOMATCH);
6848       }
6849     break;
6850
6851     /* Match a single character type; inline for speed */
6852
6853     case OP_ANY:
6854     if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
6855       RRETURN(MATCH_NOMATCH);
6856     if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
6857 #ifdef SUPPORT_UTF8
6858     if (md->utf8)
6859       while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
6860 #endif
6861     ecode++;
6862     break;
6863
6864     /* Match a single byte, even in UTF-8 mode. This opcode really does match
6865     any byte, even newline, independent of the setting of PCRE_DOTALL. */
6866
6867     case OP_ANYBYTE:
6868     if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
6869     ecode++;
6870     break;
6871
6872     case OP_NOT_DIGIT:
6873     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6874     GETCHARINCTEST(c, eptr);
6875     if (
6876 #ifdef SUPPORT_UTF8
6877        c < 256 &&
6878 #endif
6879        (md->ctypes[c] & ctype_digit) != 0
6880        )
6881       RRETURN(MATCH_NOMATCH);
6882     ecode++;
6883     break;
6884
6885     case OP_DIGIT:
6886     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6887     GETCHARINCTEST(c, eptr);
6888     if (
6889 #ifdef SUPPORT_UTF8
6890        c >= 256 ||
6891 #endif
6892        (md->ctypes[c] & ctype_digit) == 0
6893        )
6894       RRETURN(MATCH_NOMATCH);
6895     ecode++;
6896     break;
6897
6898     case OP_NOT_WHITESPACE:
6899     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6900     GETCHARINCTEST(c, eptr);
6901     if (
6902 #ifdef SUPPORT_UTF8
6903        c < 256 &&
6904 #endif
6905        (md->ctypes[c] & ctype_space) != 0
6906        )
6907       RRETURN(MATCH_NOMATCH);
6908     ecode++;
6909     break;
6910
6911     case OP_WHITESPACE:
6912     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6913     GETCHARINCTEST(c, eptr);
6914     if (
6915 #ifdef SUPPORT_UTF8
6916        c >= 256 ||
6917 #endif
6918        (md->ctypes[c] & ctype_space) == 0
6919        )
6920       RRETURN(MATCH_NOMATCH);
6921     ecode++;
6922     break;
6923
6924     case OP_NOT_WORDCHAR:
6925     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6926     GETCHARINCTEST(c, eptr);
6927     if (
6928 #ifdef SUPPORT_UTF8
6929        c < 256 &&
6930 #endif
6931        (md->ctypes[c] & ctype_word) != 0
6932        )
6933       RRETURN(MATCH_NOMATCH);
6934     ecode++;
6935     break;
6936
6937     case OP_WORDCHAR:
6938     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6939     GETCHARINCTEST(c, eptr);
6940     if (
6941 #ifdef SUPPORT_UTF8
6942        c >= 256 ||
6943 #endif
6944        (md->ctypes[c] & ctype_word) == 0
6945        )
6946       RRETURN(MATCH_NOMATCH);
6947     ecode++;
6948     break;
6949
6950 #ifdef SUPPORT_UCP
6951     /* Check the next character by Unicode property. We will get here only
6952     if the support is in the binary; otherwise a compile-time error occurs. */
6953
6954     case OP_PROP:
6955     case OP_NOTPROP:
6956     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6957     GETCHARINCTEST(c, eptr);
6958       {
6959       int chartype, rqdtype;
6960       int othercase;
6961       int category = ucp_findchar(c, &chartype, &othercase);
6962
6963       rqdtype = *(++ecode);
6964       ecode++;
6965
6966       if (rqdtype >= 128)
6967         {
6968         if ((rqdtype - 128 != category) == (op == OP_PROP))
6969           RRETURN(MATCH_NOMATCH);
6970         }
6971       else
6972         {
6973         if ((rqdtype != chartype) == (op == OP_PROP))
6974           RRETURN(MATCH_NOMATCH);
6975         }
6976       }
6977     break;
6978
6979     /* Match an extended Unicode sequence. We will get here only if the support
6980     is in the binary; otherwise a compile-time error occurs. */
6981
6982     case OP_EXTUNI:
6983     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
6984     GETCHARINCTEST(c, eptr);
6985       {
6986       int chartype;
6987       int othercase;
6988       int category = ucp_findchar(c, &chartype, &othercase);
6989       if (category == ucp_M) RRETURN(MATCH_NOMATCH);
6990       while (eptr < md->end_subject)
6991         {
6992         int len = 1;
6993         if (!md->utf8) c = *eptr; else
6994           {
6995           GETCHARLEN(c, eptr, len);
6996           }
6997         category = ucp_findchar(c, &chartype, &othercase);
6998         if (category != ucp_M) break;
6999         eptr += len;
7000         }
7001       }
7002     ecode++;
7003     break;
7004 #endif
7005
7006
7007     /* Match a back reference, possibly repeatedly. Look past the end of the
7008     item to see if there is repeat information following. The code is similar
7009     to that for character classes, but repeated for efficiency. Then obey
7010     similar code to character type repeats - written out again for speed.
7011     However, if the referenced string is the empty string, always treat
7012     it as matched, any number of times (otherwise there could be infinite
7013     loops). */
7014
7015     case OP_REF:
7016       {
7017       offset = GET2(ecode, 1) << 1;               /* Doubled ref number */
7018       ecode += 3;                                 /* Advance past item */
7019
7020       /* If the reference is unset, set the length to be longer than the amount
7021       of subject left; this ensures that every attempt at a match fails. We
7022       can't just fail here, because of the possibility of quantifiers with zero
7023       minima. */
7024
7025       length = (offset >= offset_top || md->offset_vector[offset] < 0)?
7026         md->end_subject - eptr + 1 :
7027         md->offset_vector[offset+1] - md->offset_vector[offset];
7028
7029       /* Set up for repetition, or handle the non-repeated case */
7030
7031       switch (*ecode)
7032         {
7033         case OP_CRSTAR:
7034         case OP_CRMINSTAR:
7035         case OP_CRPLUS:
7036         case OP_CRMINPLUS:
7037         case OP_CRQUERY:
7038         case OP_CRMINQUERY:
7039         c = *ecode++ - OP_CRSTAR;
7040         minimize = (c & 1) != 0;
7041         min = rep_min[c];                 /* Pick up values from tables; */
7042         max = rep_max[c];                 /* zero for max => infinity */
7043         if (max == 0) max = INT_MAX;
7044         break;
7045
7046         case OP_CRRANGE:
7047         case OP_CRMINRANGE:
7048         minimize = (*ecode == OP_CRMINRANGE);
7049         min = GET2(ecode, 1);
7050         max = GET2(ecode, 3);
7051         if (max == 0) max = INT_MAX;
7052         ecode += 5;
7053         break;
7054
7055         default:               /* No repeat follows */
7056         if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
7057         eptr += length;
7058         continue;              /* With the main loop */
7059         }
7060
7061       /* If the length of the reference is zero, just continue with the
7062       main loop. */
7063
7064       if (length == 0) continue;
7065
7066       /* First, ensure the minimum number of matches are present. We get back
7067       the length of the reference string explicitly rather than passing the
7068       address of eptr, so that eptr can be a register variable. */
7069
7070       for (i = 1; i <= min; i++)
7071         {
7072         if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
7073         eptr += length;
7074         }
7075
7076       /* If min = max, continue at the same level without recursion.
7077       They are not both allowed to be zero. */
7078
7079       if (min == max) continue;
7080
7081       /* If minimizing, keep trying and advancing the pointer */
7082
7083       if (minimize)
7084         {
7085         for (fi = min;; fi++)
7086           {
7087           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7088           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7089           if (fi >= max || !match_ref(offset, eptr, length, md, ims))
7090             RRETURN(MATCH_NOMATCH);
7091           eptr += length;
7092           }
7093         /* Control never gets here */
7094         }
7095
7096       /* If maximizing, find the longest string and work backwards */
7097
7098       else
7099         {
7100         pp = eptr;
7101         for (i = min; i < max; i++)
7102           {
7103           if (!match_ref(offset, eptr, length, md, ims)) break;
7104           eptr += length;
7105           }
7106         while (eptr >= pp)
7107           {
7108           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7109           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7110           eptr -= length;
7111           }
7112         RRETURN(MATCH_NOMATCH);
7113         }
7114       }
7115     /* Control never gets here */
7116
7117
7118
7119     /* Match a bit-mapped character class, possibly repeatedly. This op code is
7120     used when all the characters in the class have values in the range 0-255,
7121     and either the matching is caseful, or the characters are in the range
7122     0-127 when UTF-8 processing is enabled. The only difference between
7123     OP_CLASS and OP_NCLASS occurs when a data character outside the range is
7124     encountered.
7125
7126     First, look past the end of the item to see if there is repeat information
7127     following. Then obey similar code to character type repeats - written out
7128     again for speed. */
7129
7130     case OP_NCLASS:
7131     case OP_CLASS:
7132       {
7133       data = ecode + 1;                /* Save for matching */
7134       ecode += 33;                     /* Advance past the item */
7135
7136       switch (*ecode)
7137         {
7138         case OP_CRSTAR:
7139         case OP_CRMINSTAR:
7140         case OP_CRPLUS:
7141         case OP_CRMINPLUS:
7142         case OP_CRQUERY:
7143         case OP_CRMINQUERY:
7144         c = *ecode++ - OP_CRSTAR;
7145         minimize = (c & 1) != 0;
7146         min = rep_min[c];                 /* Pick up values from tables; */
7147         max = rep_max[c];                 /* zero for max => infinity */
7148         if (max == 0) max = INT_MAX;
7149         break;
7150
7151         case OP_CRRANGE:
7152         case OP_CRMINRANGE:
7153         minimize = (*ecode == OP_CRMINRANGE);
7154         min = GET2(ecode, 1);
7155         max = GET2(ecode, 3);
7156         if (max == 0) max = INT_MAX;
7157         ecode += 5;
7158         break;
7159
7160         default:               /* No repeat follows */
7161         min = max = 1;
7162         break;
7163         }
7164
7165       /* First, ensure the minimum number of matches are present. */
7166
7167 #ifdef SUPPORT_UTF8
7168       /* UTF-8 mode */
7169       if (md->utf8)
7170         {
7171         for (i = 1; i <= min; i++)
7172           {
7173           if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7174           GETCHARINC(c, eptr);
7175           if (c > 255)
7176             {
7177             if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
7178             }
7179           else
7180             {
7181             if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
7182             }
7183           }
7184         }
7185       else
7186 #endif
7187       /* Not UTF-8 mode */
7188         {
7189         for (i = 1; i <= min; i++)
7190           {
7191           if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7192           c = *eptr++;
7193           if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
7194           }
7195         }
7196
7197       /* If max == min we can continue with the main loop without the
7198       need to recurse. */
7199
7200       if (min == max) continue;
7201
7202       /* If minimizing, keep testing the rest of the expression and advancing
7203       the pointer while it matches the class. */
7204
7205       if (minimize)
7206         {
7207 #ifdef SUPPORT_UTF8
7208         /* UTF-8 mode */
7209         if (md->utf8)
7210           {
7211           for (fi = min;; fi++)
7212             {
7213             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7214             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7215             if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7216             GETCHARINC(c, eptr);
7217             if (c > 255)
7218               {
7219               if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
7220               }
7221             else
7222               {
7223               if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
7224               }
7225             }
7226           }
7227         else
7228 #endif
7229         /* Not UTF-8 mode */
7230           {
7231           for (fi = min;; fi++)
7232             {
7233             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7234             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7235             if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7236             c = *eptr++;
7237             if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
7238             }
7239           }
7240         /* Control never gets here */
7241         }
7242
7243       /* If maximizing, find the longest possible run, then work backwards. */
7244
7245       else
7246         {
7247         pp = eptr;
7248
7249 #ifdef SUPPORT_UTF8
7250         /* UTF-8 mode */
7251         if (md->utf8)
7252           {
7253           for (i = min; i < max; i++)
7254             {
7255             int len = 1;
7256             if (eptr >= md->end_subject) break;
7257             GETCHARLEN(c, eptr, len);
7258             if (c > 255)
7259               {
7260               if (op == OP_CLASS) break;
7261               }
7262             else
7263               {
7264               if ((data[c/8] & (1 << (c&7))) == 0) break;
7265               }
7266             eptr += len;
7267             }
7268           for (;;)
7269             {
7270             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7271             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7272             if (eptr-- == pp) break;        /* Stop if tried at original pos */
7273             BACKCHAR(eptr);
7274             }
7275           }
7276         else
7277 #endif
7278           /* Not UTF-8 mode */
7279           {
7280           for (i = min; i < max; i++)
7281             {
7282             if (eptr >= md->end_subject) break;
7283             c = *eptr;
7284             if ((data[c/8] & (1 << (c&7))) == 0) break;
7285             eptr++;
7286             }
7287           while (eptr >= pp)
7288             {
7289             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7290             eptr--;
7291             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7292             }
7293           }
7294
7295         RRETURN(MATCH_NOMATCH);
7296         }
7297       }
7298     /* Control never gets here */
7299
7300
7301     /* Match an extended character class. This opcode is encountered only
7302     in UTF-8 mode, because that's the only time it is compiled. */
7303
7304 #ifdef SUPPORT_UTF8
7305     case OP_XCLASS:
7306       {
7307       data = ecode + 1 + LINK_SIZE;                /* Save for matching */
7308       ecode += GET(ecode, 1);                      /* Advance past the item */
7309
7310       switch (*ecode)
7311         {
7312         case OP_CRSTAR:
7313         case OP_CRMINSTAR:
7314         case OP_CRPLUS:
7315         case OP_CRMINPLUS:
7316         case OP_CRQUERY:
7317         case OP_CRMINQUERY:
7318         c = *ecode++ - OP_CRSTAR;
7319         minimize = (c & 1) != 0;
7320         min = rep_min[c];                 /* Pick up values from tables; */
7321         max = rep_max[c];                 /* zero for max => infinity */
7322         if (max == 0) max = INT_MAX;
7323         break;
7324
7325         case OP_CRRANGE:
7326         case OP_CRMINRANGE:
7327         minimize = (*ecode == OP_CRMINRANGE);
7328         min = GET2(ecode, 1);
7329         max = GET2(ecode, 3);
7330         if (max == 0) max = INT_MAX;
7331         ecode += 5;
7332         break;
7333
7334         default:               /* No repeat follows */
7335         min = max = 1;
7336         break;
7337         }
7338
7339       /* First, ensure the minimum number of matches are present. */
7340
7341       for (i = 1; i <= min; i++)
7342         {
7343         if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7344         GETCHARINC(c, eptr);
7345         if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
7346         }
7347
7348       /* If max == min we can continue with the main loop without the
7349       need to recurse. */
7350
7351       if (min == max) continue;
7352
7353       /* If minimizing, keep testing the rest of the expression and advancing
7354       the pointer while it matches the class. */
7355
7356       if (minimize)
7357         {
7358         for (fi = min;; fi++)
7359           {
7360           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7361           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7362           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7363           GETCHARINC(c, eptr);
7364           if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
7365           }
7366         /* Control never gets here */
7367         }
7368
7369       /* If maximizing, find the longest possible run, then work backwards. */
7370
7371       else
7372         {
7373         pp = eptr;
7374         for (i = min; i < max; i++)
7375           {
7376           int len = 1;
7377           if (eptr >= md->end_subject) break;
7378           GETCHARLEN(c, eptr, len);
7379           if (!match_xclass(c, data)) break;
7380           eptr += len;
7381           }
7382         for(;;)
7383           {
7384           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7385           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7386           if (eptr-- == pp) break;        /* Stop if tried at original pos */
7387           BACKCHAR(eptr)
7388           }
7389         RRETURN(MATCH_NOMATCH);
7390         }
7391
7392       /* Control never gets here */
7393       }
7394 #endif    /* End of XCLASS */
7395
7396     /* Match a single character, casefully */
7397
7398     case OP_CHAR:
7399 #ifdef SUPPORT_UTF8
7400     if (md->utf8)
7401       {
7402       length = 1;
7403       ecode++;
7404       GETCHARLEN(fc, ecode, length);
7405       if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
7406       while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
7407       }
7408     else
7409 #endif
7410
7411     /* Non-UTF-8 mode */
7412       {
7413       if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
7414       if (ecode[1] != *eptr++) RRETURN(MATCH_NOMATCH);
7415       ecode += 2;
7416       }
7417     break;
7418
7419     /* Match a single character, caselessly */
7420
7421     case OP_CHARNC:
7422 #ifdef SUPPORT_UTF8
7423     if (md->utf8)
7424       {
7425       length = 1;
7426       ecode++;
7427       GETCHARLEN(fc, ecode, length);
7428
7429       if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
7430
7431       /* If the pattern character's value is < 128, we have only one byte, and
7432       can use the fast lookup table. */
7433
7434       if (fc < 128)
7435         {
7436         if (md->lcc[*ecode++] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
7437         }
7438
7439       /* Otherwise we must pick up the subject character */
7440
7441       else
7442         {
7443         int dc;
7444         GETCHARINC(dc, eptr);
7445         ecode += length;
7446
7447         /* If we have Unicode property support, we can use it to test the other
7448         case of the character, if there is one. The result of ucp_findchar() is
7449         < 0 if the char isn't found, and othercase is returned as zero if there
7450         isn't one. */
7451
7452         if (fc != dc)
7453           {
7454 #ifdef SUPPORT_UCP
7455           int chartype;
7456           int othercase;
7457           if (ucp_findchar(fc, &chartype, &othercase) < 0 || dc != othercase)
7458 #endif
7459             RRETURN(MATCH_NOMATCH);
7460           }
7461         }
7462       }
7463     else
7464 #endif   /* SUPPORT_UTF8 */
7465
7466     /* Non-UTF-8 mode */
7467       {
7468       if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
7469       if (md->lcc[ecode[1]] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
7470       ecode += 2;
7471       }
7472     break;
7473
7474     /* Match a single character repeatedly; different opcodes share code. */
7475
7476     case OP_EXACT:
7477     min = max = GET2(ecode, 1);
7478     ecode += 3;
7479     goto REPEATCHAR;
7480
7481     case OP_UPTO:
7482     case OP_MINUPTO:
7483     min = 0;
7484     max = GET2(ecode, 1);
7485     minimize = *ecode == OP_MINUPTO;
7486     ecode += 3;
7487     goto REPEATCHAR;
7488
7489     case OP_STAR:
7490     case OP_MINSTAR:
7491     case OP_PLUS:
7492     case OP_MINPLUS:
7493     case OP_QUERY:
7494     case OP_MINQUERY:
7495     c = *ecode++ - OP_STAR;
7496     minimize = (c & 1) != 0;
7497     min = rep_min[c];                 /* Pick up values from tables; */
7498     max = rep_max[c];                 /* zero for max => infinity */
7499     if (max == 0) max = INT_MAX;
7500
7501     /* Common code for all repeated single-character matches. We can give
7502     up quickly if there are fewer than the minimum number of characters left in
7503     the subject. */
7504
7505     REPEATCHAR:
7506 #ifdef SUPPORT_UTF8
7507     if (md->utf8)
7508       {
7509       length = 1;
7510       charptr = ecode;
7511       GETCHARLEN(fc, ecode, length);
7512       if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
7513       ecode += length;
7514
7515       /* Handle multibyte character matching specially here. There is
7516       support for caseless matching if UCP support is present. */
7517
7518       if (length > 1)
7519         {
7520         int oclength = 0;
7521         uschar occhars[8];
7522
7523 #ifdef SUPPORT_UCP
7524         int othercase;
7525         int chartype;
7526         if ((ims & PCRE_CASELESS) != 0 &&
7527              ucp_findchar(fc, &chartype, &othercase) >= 0 &&
7528              othercase > 0)
7529           oclength = ord2utf8(othercase, occhars);
7530 #endif  /* SUPPORT_UCP */
7531
7532         for (i = 1; i <= min; i++)
7533           {
7534           if (memcmp(eptr, charptr, length) == 0) eptr += length;
7535           /* Need braces because of following else */
7536           else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
7537           else
7538             {
7539             if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
7540             eptr += oclength;
7541             }
7542           }
7543
7544         if (min == max) continue;
7545
7546         if (minimize)
7547           {
7548           for (fi = min;; fi++)
7549             {
7550             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7551             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7552             if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7553             if (memcmp(eptr, charptr, length) == 0) eptr += length;
7554             /* Need braces because of following else */
7555             else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
7556             else
7557               {
7558               if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
7559               eptr += oclength;
7560               }
7561             }
7562           /* Control never gets here */
7563           }
7564         else
7565           {
7566           pp = eptr;
7567           for (i = min; i < max; i++)
7568             {
7569             if (eptr > md->end_subject - length) break;
7570             if (memcmp(eptr, charptr, length) == 0) eptr += length;
7571             else if (oclength == 0) break;
7572             else
7573               {
7574               if (memcmp(eptr, occhars, oclength) != 0) break;
7575               eptr += oclength;
7576               }
7577             }
7578           while (eptr >= pp)
7579            {
7580            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7581            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7582            eptr -= length;
7583            }
7584           RRETURN(MATCH_NOMATCH);
7585           }
7586         /* Control never gets here */
7587         }
7588
7589       /* If the length of a UTF-8 character is 1, we fall through here, and
7590       obey the code as for non-UTF-8 characters below, though in this case the
7591       value of fc will always be < 128. */
7592       }
7593     else
7594 #endif  /* SUPPORT_UTF8 */
7595
7596     /* When not in UTF-8 mode, load a single-byte character. */
7597       {
7598       if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
7599       fc = *ecode++;
7600       }
7601
7602     /* The value of fc at this point is always less than 256, though we may or
7603     may not be in UTF-8 mode. The code is duplicated for the caseless and
7604     caseful cases, for speed, since matching characters is likely to be quite
7605     common. First, ensure the minimum number of matches are present. If min =
7606     max, continue at the same level without recursing. Otherwise, if
7607     minimizing, keep trying the rest of the expression and advancing one
7608     matching character if failing, up to the maximum. Alternatively, if
7609     maximizing, find the maximum number of characters and work backwards. */
7610
7611     DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max,
7612       max, eptr));
7613
7614     if ((ims & PCRE_CASELESS) != 0)
7615       {
7616       fc = md->lcc[fc];
7617       for (i = 1; i <= min; i++)
7618         if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
7619       if (min == max) continue;
7620       if (minimize)
7621         {
7622         for (fi = min;; fi++)
7623           {
7624           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7625           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7626           if (fi >= max || eptr >= md->end_subject ||
7627               fc != md->lcc[*eptr++])
7628             RRETURN(MATCH_NOMATCH);
7629           }
7630         /* Control never gets here */
7631         }
7632       else
7633         {
7634         pp = eptr;
7635         for (i = min; i < max; i++)
7636           {
7637           if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break;
7638           eptr++;
7639           }
7640         while (eptr >= pp)
7641           {
7642           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7643           eptr--;
7644           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7645           }
7646         RRETURN(MATCH_NOMATCH);
7647         }
7648       /* Control never gets here */
7649       }
7650
7651     /* Caseful comparisons (includes all multi-byte characters) */
7652
7653     else
7654       {
7655       for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH);
7656       if (min == max) continue;
7657       if (minimize)
7658         {
7659         for (fi = min;; fi++)
7660           {
7661           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7662           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7663           if (fi >= max || eptr >= md->end_subject || fc != *eptr++)
7664             RRETURN(MATCH_NOMATCH);
7665           }
7666         /* Control never gets here */
7667         }
7668       else
7669         {
7670         pp = eptr;
7671         for (i = min; i < max; i++)
7672           {
7673           if (eptr >= md->end_subject || fc != *eptr) break;
7674           eptr++;
7675           }
7676         while (eptr >= pp)
7677           {
7678           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7679           eptr--;
7680           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7681           }
7682         RRETURN(MATCH_NOMATCH);
7683         }
7684       }
7685     /* Control never gets here */
7686
7687     /* Match a negated single one-byte character. The character we are
7688     checking can be multibyte. */
7689
7690     case OP_NOT:
7691     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
7692     ecode++;
7693     GETCHARINCTEST(c, eptr);
7694     if ((ims & PCRE_CASELESS) != 0)
7695       {
7696 #ifdef SUPPORT_UTF8
7697       if (c < 256)
7698 #endif
7699       c = md->lcc[c];
7700       if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH);
7701       }
7702     else
7703       {
7704       if (*ecode++ == c) RRETURN(MATCH_NOMATCH);
7705       }
7706     break;
7707
7708     /* Match a negated single one-byte character repeatedly. This is almost a
7709     repeat of the code for a repeated single character, but I haven't found a
7710     nice way of commoning these up that doesn't require a test of the
7711     positive/negative option for each character match. Maybe that wouldn't add
7712     very much to the time taken, but character matching *is* what this is all
7713     about... */
7714
7715     case OP_NOTEXACT:
7716     min = max = GET2(ecode, 1);
7717     ecode += 3;
7718     goto REPEATNOTCHAR;
7719
7720     case OP_NOTUPTO:
7721     case OP_NOTMINUPTO:
7722     min = 0;
7723     max = GET2(ecode, 1);
7724     minimize = *ecode == OP_NOTMINUPTO;
7725     ecode += 3;
7726     goto REPEATNOTCHAR;
7727
7728     case OP_NOTSTAR:
7729     case OP_NOTMINSTAR:
7730     case OP_NOTPLUS:
7731     case OP_NOTMINPLUS:
7732     case OP_NOTQUERY:
7733     case OP_NOTMINQUERY:
7734     c = *ecode++ - OP_NOTSTAR;
7735     minimize = (c & 1) != 0;
7736     min = rep_min[c];                 /* Pick up values from tables; */
7737     max = rep_max[c];                 /* zero for max => infinity */
7738     if (max == 0) max = INT_MAX;
7739
7740     /* Common code for all repeated single-byte matches. We can give up quickly
7741     if there are fewer than the minimum number of bytes left in the
7742     subject. */
7743
7744     REPEATNOTCHAR:
7745     if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
7746     fc = *ecode++;
7747
7748     /* The code is duplicated for the caseless and caseful cases, for speed,
7749     since matching characters is likely to be quite common. First, ensure the
7750     minimum number of matches are present. If min = max, continue at the same
7751     level without recursing. Otherwise, if minimizing, keep trying the rest of
7752     the expression and advancing one matching character if failing, up to the
7753     maximum. Alternatively, if maximizing, find the maximum number of
7754     characters and work backwards. */
7755
7756     DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max,
7757       max, eptr));
7758
7759     if ((ims & PCRE_CASELESS) != 0)
7760       {
7761       fc = md->lcc[fc];
7762
7763 #ifdef SUPPORT_UTF8
7764       /* UTF-8 mode */
7765       if (md->utf8)
7766         {
7767         register int d;
7768         for (i = 1; i <= min; i++)
7769           {
7770           GETCHARINC(d, eptr);
7771           if (d < 256) d = md->lcc[d];
7772           if (fc == d) RRETURN(MATCH_NOMATCH);
7773           }
7774         }
7775       else
7776 #endif
7777
7778       /* Not UTF-8 mode */
7779         {
7780         for (i = 1; i <= min; i++)
7781           if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
7782         }
7783
7784       if (min == max) continue;
7785
7786       if (minimize)
7787         {
7788 #ifdef SUPPORT_UTF8
7789         /* UTF-8 mode */
7790         if (md->utf8)
7791           {
7792           register int d;
7793           for (fi = min;; fi++)
7794             {
7795             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7796             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7797             GETCHARINC(d, eptr);
7798             if (d < 256) d = md->lcc[d];
7799             if (fi >= max || eptr >= md->end_subject || fc == d)
7800               RRETURN(MATCH_NOMATCH);
7801             }
7802           }
7803         else
7804 #endif
7805         /* Not UTF-8 mode */
7806           {
7807           for (fi = min;; fi++)
7808             {
7809             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7810             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7811             if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++])
7812               RRETURN(MATCH_NOMATCH);
7813             }
7814           }
7815         /* Control never gets here */
7816         }
7817
7818       /* Maximize case */
7819
7820       else
7821         {
7822         pp = eptr;
7823
7824 #ifdef SUPPORT_UTF8
7825         /* UTF-8 mode */
7826         if (md->utf8)
7827           {
7828           register int d;
7829           for (i = min; i < max; i++)
7830             {
7831             int len = 1;
7832             if (eptr >= md->end_subject) break;
7833             GETCHARLEN(d, eptr, len);
7834             if (d < 256) d = md->lcc[d];
7835             if (fc == d) break;
7836             eptr += len;
7837             }
7838           for(;;)
7839             {
7840             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7841             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7842             if (eptr-- == pp) break;        /* Stop if tried at original pos */
7843             BACKCHAR(eptr);
7844             }
7845           }
7846         else
7847 #endif
7848         /* Not UTF-8 mode */
7849           {
7850           for (i = min; i < max; i++)
7851             {
7852             if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break;
7853             eptr++;
7854             }
7855           while (eptr >= pp)
7856             {
7857             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7858             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7859             eptr--;
7860             }
7861           }
7862
7863         RRETURN(MATCH_NOMATCH);
7864         }
7865       /* Control never gets here */
7866       }
7867
7868     /* Caseful comparisons */
7869
7870     else
7871       {
7872 #ifdef SUPPORT_UTF8
7873       /* UTF-8 mode */
7874       if (md->utf8)
7875         {
7876         register int d;
7877         for (i = 1; i <= min; i++)
7878           {
7879           GETCHARINC(d, eptr);
7880           if (fc == d) RRETURN(MATCH_NOMATCH);
7881           }
7882         }
7883       else
7884 #endif
7885       /* Not UTF-8 mode */
7886         {
7887         for (i = 1; i <= min; i++)
7888           if (fc == *eptr++) RRETURN(MATCH_NOMATCH);
7889         }
7890
7891       if (min == max) continue;
7892
7893       if (minimize)
7894         {
7895 #ifdef SUPPORT_UTF8
7896         /* UTF-8 mode */
7897         if (md->utf8)
7898           {
7899           register int d;
7900           for (fi = min;; fi++)
7901             {
7902             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7903             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7904             GETCHARINC(d, eptr);
7905             if (fi >= max || eptr >= md->end_subject || fc == d)
7906               RRETURN(MATCH_NOMATCH);
7907             }
7908           }
7909         else
7910 #endif
7911         /* Not UTF-8 mode */
7912           {
7913           for (fi = min;; fi++)
7914             {
7915             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7916             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7917             if (fi >= max || eptr >= md->end_subject || fc == *eptr++)
7918               RRETURN(MATCH_NOMATCH);
7919             }
7920           }
7921         /* Control never gets here */
7922         }
7923
7924       /* Maximize case */
7925
7926       else
7927         {
7928         pp = eptr;
7929
7930 #ifdef SUPPORT_UTF8
7931         /* UTF-8 mode */
7932         if (md->utf8)
7933           {
7934           register int d;
7935           for (i = min; i < max; i++)
7936             {
7937             int len = 1;
7938             if (eptr >= md->end_subject) break;
7939             GETCHARLEN(d, eptr, len);
7940             if (fc == d) break;
7941             eptr += len;
7942             }
7943           for(;;)
7944             {
7945             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7946             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7947             if (eptr-- == pp) break;        /* Stop if tried at original pos */
7948             BACKCHAR(eptr);
7949             }
7950           }
7951         else
7952 #endif
7953         /* Not UTF-8 mode */
7954           {
7955           for (i = min; i < max; i++)
7956             {
7957             if (eptr >= md->end_subject || fc == *eptr) break;
7958             eptr++;
7959             }
7960           while (eptr >= pp)
7961             {
7962             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
7963             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
7964             eptr--;
7965             }
7966           }
7967
7968         RRETURN(MATCH_NOMATCH);
7969         }
7970       }
7971     /* Control never gets here */
7972
7973     /* Match a single character type repeatedly; several different opcodes
7974     share code. This is very similar to the code for single characters, but we
7975     repeat it in the interests of efficiency. */
7976
7977     case OP_TYPEEXACT:
7978     min = max = GET2(ecode, 1);
7979     minimize = TRUE;
7980     ecode += 3;
7981     goto REPEATTYPE;
7982
7983     case OP_TYPEUPTO:
7984     case OP_TYPEMINUPTO:
7985     min = 0;
7986     max = GET2(ecode, 1);
7987     minimize = *ecode == OP_TYPEMINUPTO;
7988     ecode += 3;
7989     goto REPEATTYPE;
7990
7991     case OP_TYPESTAR:
7992     case OP_TYPEMINSTAR:
7993     case OP_TYPEPLUS:
7994     case OP_TYPEMINPLUS:
7995     case OP_TYPEQUERY:
7996     case OP_TYPEMINQUERY:
7997     c = *ecode++ - OP_TYPESTAR;
7998     minimize = (c & 1) != 0;
7999     min = rep_min[c];                 /* Pick up values from tables; */
8000     max = rep_max[c];                 /* zero for max => infinity */
8001     if (max == 0) max = INT_MAX;
8002
8003     /* Common code for all repeated single character type matches. Note that
8004     in UTF-8 mode, '.' matches a character of any length, but for the other
8005     character types, the valid characters are all one-byte long. */
8006
8007     REPEATTYPE:
8008     ctype = *ecode++;      /* Code for the character type */
8009
8010 #ifdef SUPPORT_UCP
8011     if (ctype == OP_PROP || ctype == OP_NOTPROP)
8012       {
8013       prop_fail_result = ctype == OP_NOTPROP;
8014       prop_type = *ecode++;
8015       if (prop_type >= 128)
8016         {
8017         prop_test_against = prop_type - 128;
8018         prop_test_variable = &prop_category;
8019         }
8020       else
8021         {
8022         prop_test_against = prop_type;
8023         prop_test_variable = &prop_chartype;
8024         }
8025       }
8026     else prop_type = -1;
8027 #endif
8028
8029     /* First, ensure the minimum number of matches are present. Use inline
8030     code for maximizing the speed, and do the type test once at the start
8031     (i.e. keep it out of the loop). Also we can test that there are at least
8032     the minimum number of bytes before we start. This isn't as effective in
8033     UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that
8034     is tidier. Also separate the UCP code, which can be the same for both UTF-8
8035     and single-bytes. */
8036
8037     if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
8038     if (min > 0)
8039       {
8040 #ifdef SUPPORT_UCP
8041       if (prop_type > 0)
8042         {
8043         for (i = 1; i <= min; i++)
8044           {
8045           GETCHARINC(c, eptr);
8046           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8047           if ((*prop_test_variable == prop_test_against) == prop_fail_result)
8048             RRETURN(MATCH_NOMATCH);
8049           }
8050         }
8051
8052       /* Match extended Unicode sequences. We will get here only if the
8053       support is in the binary; otherwise a compile-time error occurs. */
8054
8055       else if (ctype == OP_EXTUNI)
8056         {
8057         for (i = 1; i <= min; i++)
8058           {
8059           GETCHARINCTEST(c, eptr);
8060           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8061           if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
8062           while (eptr < md->end_subject)
8063             {
8064             int len = 1;
8065             if (!md->utf8) c = *eptr; else
8066               {
8067               GETCHARLEN(c, eptr, len);
8068               }
8069             prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8070             if (prop_category != ucp_M) break;
8071             eptr += len;
8072             }
8073           }
8074         }
8075
8076       else
8077 #endif     /* SUPPORT_UCP */
8078
8079 /* Handle all other cases when the coding is UTF-8 */
8080
8081 #ifdef SUPPORT_UTF8
8082       if (md->utf8) switch(ctype)
8083         {
8084         case OP_ANY:
8085         for (i = 1; i <= min; i++)
8086           {
8087           if (eptr >= md->end_subject ||
8088              (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
8089             RRETURN(MATCH_NOMATCH);
8090           while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
8091           }
8092         break;
8093
8094         case OP_ANYBYTE:
8095         eptr += min;
8096         break;
8097
8098         case OP_NOT_DIGIT:
8099         for (i = 1; i <= min; i++)
8100           {
8101           if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
8102           GETCHARINC(c, eptr);
8103           if (c < 128 && (md->ctypes[c] & ctype_digit) != 0)
8104             RRETURN(MATCH_NOMATCH);
8105           }
8106         break;
8107
8108         case OP_DIGIT:
8109         for (i = 1; i <= min; i++)
8110           {
8111           if (eptr >= md->end_subject ||
8112              *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0)
8113             RRETURN(MATCH_NOMATCH);
8114           /* No need to skip more bytes - we know it's a 1-byte character */
8115           }
8116         break;
8117
8118         case OP_NOT_WHITESPACE:
8119         for (i = 1; i <= min; i++)
8120           {
8121           if (eptr >= md->end_subject ||
8122              (*eptr < 128 && (md->ctypes[*eptr++] & ctype_space) != 0))
8123             RRETURN(MATCH_NOMATCH);
8124           while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
8125           }
8126         break;
8127
8128         case OP_WHITESPACE:
8129         for (i = 1; i <= min; i++)
8130           {
8131           if (eptr >= md->end_subject ||
8132              *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0)
8133             RRETURN(MATCH_NOMATCH);
8134           /* No need to skip more bytes - we know it's a 1-byte character */
8135           }
8136         break;
8137
8138         case OP_NOT_WORDCHAR:
8139         for (i = 1; i <= min; i++)
8140           {
8141           if (eptr >= md->end_subject ||
8142              (*eptr < 128 && (md->ctypes[*eptr++] & ctype_word) != 0))
8143             RRETURN(MATCH_NOMATCH);
8144           while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
8145           }
8146         break;
8147
8148         case OP_WORDCHAR:
8149         for (i = 1; i <= min; i++)
8150           {
8151           if (eptr >= md->end_subject ||
8152              *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0)
8153             RRETURN(MATCH_NOMATCH);
8154           /* No need to skip more bytes - we know it's a 1-byte character */
8155           }
8156         break;
8157
8158         default:
8159         RRETURN(PCRE_ERROR_INTERNAL);
8160         }  /* End switch(ctype) */
8161
8162       else
8163 #endif     /* SUPPORT_UTF8 */
8164
8165       /* Code for the non-UTF-8 case for minimum matching of operators other
8166       than OP_PROP and OP_NOTPROP. */
8167
8168       switch(ctype)
8169         {
8170         case OP_ANY:
8171         if ((ims & PCRE_DOTALL) == 0)
8172           {
8173           for (i = 1; i <= min; i++)
8174             if (*eptr++ == NEWLINE) RRETURN(MATCH_NOMATCH);
8175           }
8176         else eptr += min;
8177         break;
8178
8179         case OP_ANYBYTE:
8180         eptr += min;
8181         break;
8182
8183         case OP_NOT_DIGIT:
8184         for (i = 1; i <= min; i++)
8185           if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
8186         break;
8187
8188         case OP_DIGIT:
8189         for (i = 1; i <= min; i++)
8190           if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
8191         break;
8192
8193         case OP_NOT_WHITESPACE:
8194         for (i = 1; i <= min; i++)
8195           if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
8196         break;
8197
8198         case OP_WHITESPACE:
8199         for (i = 1; i <= min; i++)
8200           if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
8201         break;
8202
8203         case OP_NOT_WORDCHAR:
8204         for (i = 1; i <= min; i++)
8205           if ((md->ctypes[*eptr++] & ctype_word) != 0)
8206             RRETURN(MATCH_NOMATCH);
8207         break;
8208
8209         case OP_WORDCHAR:
8210         for (i = 1; i <= min; i++)
8211           if ((md->ctypes[*eptr++] & ctype_word) == 0)
8212             RRETURN(MATCH_NOMATCH);
8213         break;
8214
8215         default:
8216         RRETURN(PCRE_ERROR_INTERNAL);
8217         }
8218       }
8219
8220     /* If min = max, continue at the same level without recursing */
8221
8222     if (min == max) continue;
8223
8224     /* If minimizing, we have to test the rest of the pattern before each
8225     subsequent match. Again, separate the UTF-8 case for speed, and also
8226     separate the UCP cases. */
8227
8228     if (minimize)
8229       {
8230 #ifdef SUPPORT_UCP
8231       if (prop_type > 0)
8232         {
8233         for (fi = min;; fi++)
8234           {
8235           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8236           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8237           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
8238           GETCHARINC(c, eptr);
8239           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8240           if ((*prop_test_variable == prop_test_against) == prop_fail_result)
8241             RRETURN(MATCH_NOMATCH);
8242           }
8243         }
8244
8245       /* Match extended Unicode sequences. We will get here only if the
8246       support is in the binary; otherwise a compile-time error occurs. */
8247
8248       else if (ctype == OP_EXTUNI)
8249         {
8250         for (fi = min;; fi++)
8251           {
8252           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8253           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8254           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
8255           GETCHARINCTEST(c, eptr);
8256           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8257           if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
8258           while (eptr < md->end_subject)
8259             {
8260             int len = 1;
8261             if (!md->utf8) c = *eptr; else
8262               {
8263               GETCHARLEN(c, eptr, len);
8264               }
8265             prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8266             if (prop_category != ucp_M) break;
8267             eptr += len;
8268             }
8269           }
8270         }
8271
8272       else
8273 #endif     /* SUPPORT_UCP */
8274
8275 #ifdef SUPPORT_UTF8
8276       /* UTF-8 mode */
8277       if (md->utf8)
8278         {
8279         for (fi = min;; fi++)
8280           {
8281           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8282           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8283           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
8284
8285           GETCHARINC(c, eptr);
8286           switch(ctype)
8287             {
8288             case OP_ANY:
8289             if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
8290             break;
8291
8292             case OP_ANYBYTE:
8293             break;
8294
8295             case OP_NOT_DIGIT:
8296             if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
8297               RRETURN(MATCH_NOMATCH);
8298             break;
8299
8300             case OP_DIGIT:
8301             if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0)
8302               RRETURN(MATCH_NOMATCH);
8303             break;
8304
8305             case OP_NOT_WHITESPACE:
8306             if (c < 256 && (md->ctypes[c] & ctype_space) != 0)
8307               RRETURN(MATCH_NOMATCH);
8308             break;
8309
8310             case OP_WHITESPACE:
8311             if  (c >= 256 || (md->ctypes[c] & ctype_space) == 0)
8312               RRETURN(MATCH_NOMATCH);
8313             break;
8314
8315             case OP_NOT_WORDCHAR:
8316             if (c < 256 && (md->ctypes[c] & ctype_word) != 0)
8317               RRETURN(MATCH_NOMATCH);
8318             break;
8319
8320             case OP_WORDCHAR:
8321             if (c >= 256 && (md->ctypes[c] & ctype_word) == 0)
8322               RRETURN(MATCH_NOMATCH);
8323             break;
8324
8325             default:
8326             RRETURN(PCRE_ERROR_INTERNAL);
8327             }
8328           }
8329         }
8330       else
8331 #endif
8332       /* Not UTF-8 mode */
8333         {
8334         for (fi = min;; fi++)
8335           {
8336           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8337           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8338           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
8339           c = *eptr++;
8340           switch(ctype)
8341             {
8342             case OP_ANY:
8343             if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
8344             break;
8345
8346             case OP_ANYBYTE:
8347             break;
8348
8349             case OP_NOT_DIGIT:
8350             if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
8351             break;
8352
8353             case OP_DIGIT:
8354             if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
8355             break;
8356
8357             case OP_NOT_WHITESPACE:
8358             if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
8359             break;
8360
8361             case OP_WHITESPACE:
8362             if  ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
8363             break;
8364
8365             case OP_NOT_WORDCHAR:
8366             if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH);
8367             break;
8368
8369             case OP_WORDCHAR:
8370             if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
8371             break;
8372
8373             default:
8374             RRETURN(PCRE_ERROR_INTERNAL);
8375             }
8376           }
8377         }
8378       /* Control never gets here */
8379       }
8380
8381     /* If maximizing it is worth using inline code for speed, doing the type
8382     test once at the start (i.e. keep it out of the loop). Again, keep the
8383     UTF-8 and UCP stuff separate. */
8384
8385     else
8386       {
8387       pp = eptr;  /* Remember where we started */
8388
8389 #ifdef SUPPORT_UCP
8390       if (prop_type > 0)
8391         {
8392         for (i = min; i < max; i++)
8393           {
8394           int len = 1;
8395           if (eptr >= md->end_subject) break;
8396           GETCHARLEN(c, eptr, len);
8397           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8398           if ((*prop_test_variable == prop_test_against) == prop_fail_result)
8399             break;
8400           eptr+= len;
8401           }
8402
8403         /* eptr is now past the end of the maximum run */
8404
8405         for(;;)
8406           {
8407           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8408           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8409           if (eptr-- == pp) break;        /* Stop if tried at original pos */
8410           BACKCHAR(eptr);
8411           }
8412         }
8413
8414       /* Match extended Unicode sequences. We will get here only if the
8415       support is in the binary; otherwise a compile-time error occurs. */
8416
8417       else if (ctype == OP_EXTUNI)
8418         {
8419         for (i = min; i < max; i++)
8420           {
8421           if (eptr >= md->end_subject) break;
8422           GETCHARINCTEST(c, eptr);
8423           prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8424           if (prop_category == ucp_M) break;
8425           while (eptr < md->end_subject)
8426             {
8427             int len = 1;
8428             if (!md->utf8) c = *eptr; else
8429               {
8430               GETCHARLEN(c, eptr, len);
8431               }
8432             prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8433             if (prop_category != ucp_M) break;
8434             eptr += len;
8435             }
8436           }
8437
8438         /* eptr is now past the end of the maximum run */
8439
8440         for(;;)
8441           {
8442           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8443           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8444           if (eptr-- == pp) break;        /* Stop if tried at original pos */
8445           for (;;)                        /* Move back over one extended */
8446             {
8447             int len = 1;
8448             BACKCHAR(eptr);
8449             if (!md->utf8) c = *eptr; else
8450               {
8451               GETCHARLEN(c, eptr, len);
8452               }
8453             prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
8454             if (prop_category != ucp_M) break;
8455             eptr--;
8456             }
8457           }
8458         }
8459
8460       else
8461 #endif   /* SUPPORT_UCP */
8462
8463 #ifdef SUPPORT_UTF8
8464       /* UTF-8 mode */
8465
8466       if (md->utf8)
8467         {
8468         switch(ctype)
8469           {
8470           case OP_ANY:
8471
8472           /* Special code is required for UTF8, but when the maximum is unlimited
8473           we don't need it, so we repeat the non-UTF8 code. This is probably
8474           worth it, because .* is quite a common idiom. */
8475
8476           if (max < INT_MAX)
8477             {
8478             if ((ims & PCRE_DOTALL) == 0)
8479               {
8480               for (i = min; i < max; i++)
8481                 {
8482                 if (eptr >= md->end_subject || *eptr == NEWLINE) break;
8483                 eptr++;
8484                 while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
8485                 }
8486               }
8487             else
8488               {
8489               for (i = min; i < max; i++)
8490                 {
8491                 eptr++;
8492                 while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
8493                 }
8494               }
8495             }
8496
8497           /* Handle unlimited UTF-8 repeat */
8498
8499           else
8500             {
8501             if ((ims & PCRE_DOTALL) == 0)
8502               {
8503               for (i = min; i < max; i++)
8504                 {
8505                 if (eptr >= md->end_subject || *eptr == NEWLINE) break;
8506                 eptr++;
8507                 }
8508               break;
8509               }
8510             else
8511               {
8512               c = max - min;
8513               if (c > md->end_subject - eptr) c = md->end_subject - eptr;
8514               eptr += c;
8515               }
8516             }
8517           break;
8518
8519           /* The byte case is the same as non-UTF8 */
8520
8521           case OP_ANYBYTE:
8522           c = max - min;
8523           if (c > md->end_subject - eptr) c = md->end_subject - eptr;
8524           eptr += c;
8525           break;
8526
8527           case OP_NOT_DIGIT:
8528           for (i = min; i < max; i++)
8529             {
8530             int len = 1;
8531             if (eptr >= md->end_subject) break;
8532             GETCHARLEN(c, eptr, len);
8533             if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
8534             eptr+= len;
8535             }
8536           break;
8537
8538           case OP_DIGIT:
8539           for (i = min; i < max; i++)
8540             {
8541             int len = 1;
8542             if (eptr >= md->end_subject) break;
8543             GETCHARLEN(c, eptr, len);
8544             if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
8545             eptr+= len;
8546             }
8547           break;
8548
8549           case OP_NOT_WHITESPACE:
8550           for (i = min; i < max; i++)
8551             {
8552             int len = 1;
8553             if (eptr >= md->end_subject) break;
8554             GETCHARLEN(c, eptr, len);
8555             if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
8556             eptr+= len;
8557             }
8558           break;
8559
8560           case OP_WHITESPACE:
8561           for (i = min; i < max; i++)
8562             {
8563             int len = 1;
8564             if (eptr >= md->end_subject) break;
8565             GETCHARLEN(c, eptr, len);
8566             if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
8567             eptr+= len;
8568             }
8569           break;
8570
8571           case OP_NOT_WORDCHAR:
8572           for (i = min; i < max; i++)
8573             {
8574             int len = 1;
8575             if (eptr >= md->end_subject) break;
8576             GETCHARLEN(c, eptr, len);
8577             if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
8578             eptr+= len;
8579             }
8580           break;
8581
8582           case OP_WORDCHAR:
8583           for (i = min; i < max; i++)
8584             {
8585             int len = 1;
8586             if (eptr >= md->end_subject) break;
8587             GETCHARLEN(c, eptr, len);
8588             if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
8589             eptr+= len;
8590             }
8591           break;
8592
8593           default:
8594           RRETURN(PCRE_ERROR_INTERNAL);
8595           }
8596
8597         /* eptr is now past the end of the maximum run */
8598
8599         for(;;)
8600           {
8601           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8602           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8603           if (eptr-- == pp) break;        /* Stop if tried at original pos */
8604           BACKCHAR(eptr);
8605           }
8606         }
8607       else
8608 #endif
8609
8610       /* Not UTF-8 mode */
8611         {
8612         switch(ctype)
8613           {
8614           case OP_ANY:
8615           if ((ims & PCRE_DOTALL) == 0)
8616             {
8617             for (i = min; i < max; i++)
8618               {
8619               if (eptr >= md->end_subject || *eptr == NEWLINE) break;
8620               eptr++;
8621               }
8622             break;
8623             }
8624           /* For DOTALL case, fall through and treat as \C */
8625
8626           case OP_ANYBYTE:
8627           c = max - min;
8628           if (c > md->end_subject - eptr) c = md->end_subject - eptr;
8629           eptr += c;
8630           break;
8631
8632           case OP_NOT_DIGIT:
8633           for (i = min; i < max; i++)
8634             {
8635             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
8636               break;
8637             eptr++;
8638             }
8639           break;
8640
8641           case OP_DIGIT:
8642           for (i = min; i < max; i++)
8643             {
8644             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
8645               break;
8646             eptr++;
8647             }
8648           break;
8649
8650           case OP_NOT_WHITESPACE:
8651           for (i = min; i < max; i++)
8652             {
8653             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
8654               break;
8655             eptr++;
8656             }
8657           break;
8658
8659           case OP_WHITESPACE:
8660           for (i = min; i < max; i++)
8661             {
8662             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
8663               break;
8664             eptr++;
8665             }
8666           break;
8667
8668           case OP_NOT_WORDCHAR:
8669           for (i = min; i < max; i++)
8670             {
8671             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
8672               break;
8673             eptr++;
8674             }
8675           break;
8676
8677           case OP_WORDCHAR:
8678           for (i = min; i < max; i++)
8679             {
8680             if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
8681               break;
8682             eptr++;
8683             }
8684           break;
8685
8686           default:
8687           RRETURN(PCRE_ERROR_INTERNAL);
8688           }
8689
8690         /* eptr is now past the end of the maximum run */
8691
8692         while (eptr >= pp)
8693           {
8694           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
8695           eptr--;
8696           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
8697           }
8698         }
8699
8700       /* Get here if we can't make it match with any permitted repetitions */
8701
8702       RRETURN(MATCH_NOMATCH);
8703       }
8704     /* Control never gets here */
8705
8706     /* There's been some horrible disaster. Since all codes > OP_BRA are
8707     for capturing brackets, and there shouldn't be any gaps between 0 and
8708     OP_BRA, arrival here can only mean there is something seriously wrong
8709     in the code above or the OP_xxx definitions. */
8710
8711     default:
8712     DPRINTF(("Unknown opcode %d\n", *ecode));
8713     RRETURN(PCRE_ERROR_UNKNOWN_NODE);
8714     }
8715
8716   /* Do not stick any code in here without much thought; it is assumed
8717   that "continue" in the code above comes out to here to repeat the main
8718   loop. */
8719
8720   }             /* End of main loop */
8721 /* Control never reaches here */
8722 }
8723
8724
8725 /***************************************************************************
8726 ****************************************************************************
8727                    RECURSION IN THE match() FUNCTION
8728
8729 Undefine all the macros that were defined above to handle this. */
8730
8731 #ifdef NO_RECURSE
8732 #undef eptr
8733 #undef ecode
8734 #undef offset_top
8735 #undef ims
8736 #undef eptrb
8737 #undef flags
8738
8739 #undef callpat
8740 #undef charptr
8741 #undef data
8742 #undef next
8743 #undef pp
8744 #undef prev
8745 #undef saved_eptr
8746
8747 #undef new_recursive
8748
8749 #undef cur_is_word
8750 #undef condition
8751 #undef minimize
8752 #undef prev_is_word
8753
8754 #undef original_ims
8755
8756 #undef ctype
8757 #undef length
8758 #undef max
8759 #undef min
8760 #undef number
8761 #undef offset
8762 #undef op
8763 #undef save_capture_last
8764 #undef save_offset1
8765 #undef save_offset2
8766 #undef save_offset3
8767 #undef stacksave
8768
8769 #undef newptrb
8770
8771 #endif
8772
8773 /* These two are defined as macros in both cases */
8774
8775 #undef fc
8776 #undef fi
8777
8778 /***************************************************************************
8779 ***************************************************************************/
8780
8781
8782
8783 /*************************************************
8784 *         Execute a Regular Expression           *
8785 *************************************************/
8786
8787 /* This function applies a compiled re to a subject string and picks out
8788 portions of the string if it matches. Two elements in the vector are set for
8789 each substring: the offsets to the start and end of the substring.
8790
8791 Arguments:
8792   argument_re     points to the compiled expression
8793   extra_data      points to extra data or is NULL
8794   subject         points to the subject string
8795   length          length of subject string (may contain binary zeros)
8796   start_offset    where to start in the subject string
8797   options         option bits
8798   offsets         points to a vector of ints to be filled in with offsets
8799   offsetcount     the number of elements in the vector
8800
8801 Returns:          > 0 => success; value is the number of elements filled in
8802                   = 0 => success, but offsets is not big enough
8803                    -1 => failed to match
8804                  < -1 => some kind of unexpected problem
8805 */
8806
8807 EXPORT int
8808 pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
8809   const char *subject, int length, int start_offset, int options, int *offsets,
8810   int offsetcount)
8811 {
8812 int rc, resetcount, ocount;
8813 int first_byte = -1;
8814 int req_byte = -1;
8815 int req_byte2 = -1;
8816 unsigned long int ims = 0;
8817 BOOL using_temporary_offsets = FALSE;
8818 BOOL anchored;
8819 BOOL startline;
8820 BOOL first_byte_caseless = FALSE;
8821 BOOL req_byte_caseless = FALSE;
8822 match_data match_block;
8823 const uschar *tables;
8824 const uschar *start_bits = NULL;
8825 const uschar *start_match = (const uschar *)subject + start_offset;
8826 const uschar *end_subject;
8827 const uschar *req_byte_ptr = start_match - 1;
8828
8829 pcre_study_data internal_study;
8830 const pcre_study_data *study;
8831
8832 real_pcre internal_re;
8833 const real_pcre *external_re = (const real_pcre *)argument_re;
8834 const real_pcre *re = external_re;
8835
8836 /* Plausibility checks */
8837
8838 if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
8839 if (re == NULL || subject == NULL ||
8840    (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
8841 if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
8842
8843 /* Fish out the optional data from the extra_data structure, first setting
8844 the default values. */
8845
8846 study = NULL;
8847 match_block.match_limit = MATCH_LIMIT;
8848 match_block.callout_data = NULL;
8849
8850 /* The table pointer is always in native byte order. */
8851
8852 tables = external_re->tables;
8853
8854 if (extra_data != NULL)
8855   {
8856   register unsigned int flags = extra_data->flags;
8857   if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
8858     study = (const pcre_study_data *)extra_data->study_data;
8859   if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0)
8860     match_block.match_limit = extra_data->match_limit;
8861   if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
8862     match_block.callout_data = extra_data->callout_data;
8863   if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;
8864   }
8865
8866 /* If the exec call supplied NULL for tables, use the inbuilt ones. This
8867 is a feature that makes it possible to save compiled regex and re-use them
8868 in other programs later. */
8869
8870 if (tables == NULL) tables = pcre_default_tables;
8871
8872 /* Check that the first field in the block is the magic number. If it is not,
8873 test for a regex that was compiled on a host of opposite endianness. If this is
8874 the case, flipped values are put in internal_re and internal_study if there was
8875 study data too. */
8876
8877 if (re->magic_number != MAGIC_NUMBER)
8878   {
8879   re = try_flipped(re, &internal_re, study, &internal_study);
8880   if (re == NULL) return PCRE_ERROR_BADMAGIC;
8881   if (study != NULL) study = &internal_study;
8882   }
8883
8884 /* Set up other data */
8885
8886 anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
8887 startline = (re->options & PCRE_STARTLINE) != 0;
8888
8889 /* The code starts after the real_pcre block and the capture name table. */
8890
8891 match_block.start_code = (const uschar *)external_re + re->name_table_offset +
8892   re->name_count * re->name_entry_size;
8893
8894 match_block.start_subject = (const uschar *)subject;
8895 match_block.start_offset = start_offset;
8896 match_block.end_subject = match_block.start_subject + length;
8897 end_subject = match_block.end_subject;
8898
8899 match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
8900 match_block.utf8 = (re->options & PCRE_UTF8) != 0;
8901
8902 match_block.notbol = (options & PCRE_NOTBOL) != 0;
8903 match_block.noteol = (options & PCRE_NOTEOL) != 0;
8904 match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
8905 match_block.partial = (options & PCRE_PARTIAL) != 0;
8906 match_block.hitend = FALSE;
8907
8908 match_block.recursive = NULL;                   /* No recursion at top level */
8909
8910 match_block.lcc = tables + lcc_offset;
8911 match_block.ctypes = tables + ctypes_offset;
8912
8913 /* Partial matching is supported only for a restricted set of regexes at the
8914 moment. */
8915
8916 if (match_block.partial && (re->options & PCRE_NOPARTIAL) != 0)
8917   return PCRE_ERROR_BADPARTIAL;
8918
8919 /* Check a UTF-8 string if required. Unfortunately there's no way of passing
8920 back the character offset. */
8921
8922 #ifdef SUPPORT_UTF8
8923 if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
8924   {
8925   if (valid_utf8((uschar *)subject, length) >= 0)
8926     return PCRE_ERROR_BADUTF8;
8927   if (start_offset > 0 && start_offset < length)
8928     {
8929     int tb = ((uschar *)subject)[start_offset];
8930     if (tb > 127)
8931       {
8932       tb &= 0xc0;
8933       if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
8934       }
8935     }
8936   }
8937 #endif
8938
8939 /* The ims options can vary during the matching as a result of the presence
8940 of (?ims) items in the pattern. They are kept in a local variable so that
8941 restoring at the exit of a group is easy. */
8942
8943 ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
8944
8945 /* If the expression has got more back references than the offsets supplied can
8946 hold, we get a temporary chunk of working store to use during the matching.
8947 Otherwise, we can use the vector supplied, rounding down its size to a multiple
8948 of 3. */
8949
8950 ocount = offsetcount - (offsetcount % 3);
8951
8952 if (re->top_backref > 0 && re->top_backref >= ocount/3)
8953   {
8954   ocount = re->top_backref * 3 + 3;
8955   match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
8956   if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
8957   using_temporary_offsets = TRUE;
8958   DPRINTF(("Got memory to hold back references\n"));
8959   }
8960 else match_block.offset_vector = offsets;
8961
8962 match_block.offset_end = ocount;
8963 match_block.offset_max = (2*ocount)/3;
8964 match_block.offset_overflow = FALSE;
8965 match_block.capture_last = -1;
8966
8967 /* Compute the minimum number of offsets that we need to reset each time. Doing
8968 this makes a huge difference to execution time when there aren't many brackets
8969 in the pattern. */
8970
8971 resetcount = 2 + re->top_bracket * 2;
8972 if (resetcount > offsetcount) resetcount = ocount;
8973
8974 /* Reset the working variable associated with each extraction. These should
8975 never be used unless previously set, but they get saved and restored, and so we
8976 initialize them to avoid reading uninitialized locations. */
8977
8978 if (match_block.offset_vector != NULL)
8979   {
8980   register int *iptr = match_block.offset_vector + ocount;
8981   register int *iend = iptr - resetcount/2 + 1;
8982   while (--iptr >= iend) *iptr = -1;
8983   }
8984
8985 /* Set up the first character to match, if available. The first_byte value is
8986 never set for an anchored regular expression, but the anchoring may be forced
8987 at run time, so we have to test for anchoring. The first char may be unset for
8988 an unanchored pattern, of course. If there's no first char and the pattern was
8989 studied, there may be a bitmap of possible first characters. */
8990
8991 if (!anchored)
8992   {
8993   if ((re->options & PCRE_FIRSTSET) != 0)
8994     {
8995     first_byte = re->first_byte & 255;
8996     if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE)
8997       first_byte = match_block.lcc[first_byte];
8998     }
8999   else
9000     if (!startline && study != NULL &&
9001       (study->options & PCRE_STUDY_MAPPED) != 0)
9002         start_bits = study->start_bits;
9003   }
9004
9005 /* For anchored or unanchored matches, there may be a "last known required
9006 character" set. */
9007
9008 if ((re->options & PCRE_REQCHSET) != 0)
9009   {
9010   req_byte = re->req_byte & 255;
9011   req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
9012   req_byte2 = (tables + fcc_offset)[req_byte];  /* case flipped */
9013   }
9014
9015 /* Loop for handling unanchored repeated matching attempts; for anchored regexs
9016 the loop runs just once. */
9017
9018 do
9019   {
9020   /* Reset the maximum number of extractions we might see. */
9021
9022   if (match_block.offset_vector != NULL)
9023     {
9024     register int *iptr = match_block.offset_vector;
9025     register int *iend = iptr + resetcount;
9026     while (iptr < iend) *iptr++ = -1;
9027     }
9028
9029   /* Advance to a unique first char if possible */
9030
9031   if (first_byte >= 0)
9032     {
9033     if (first_byte_caseless)
9034       while (start_match < end_subject &&
9035              match_block.lcc[*start_match] != first_byte)
9036         start_match++;
9037     else
9038       while (start_match < end_subject && *start_match != first_byte)
9039         start_match++;
9040     }
9041
9042   /* Or to just after \n for a multiline match if possible */
9043
9044   else if (startline)
9045     {
9046     if (start_match > match_block.start_subject + start_offset)
9047       {
9048       while (start_match < end_subject && start_match[-1] != NEWLINE)
9049         start_match++;
9050       }
9051     }
9052
9053   /* Or to a non-unique first char after study */
9054
9055   else if (start_bits != NULL)
9056     {
9057     while (start_match < end_subject)
9058       {
9059       register unsigned int c = *start_match;
9060       if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
9061       }
9062     }
9063
9064 #ifdef DEBUG  /* Sigh. Some compilers never learn. */
9065   printf(">>>> Match against: ");
9066   pchars(start_match, end_subject - start_match, TRUE, &match_block);
9067   printf("\n");
9068 #endif
9069
9070   /* If req_byte is set, we know that that character must appear in the subject
9071   for the match to succeed. If the first character is set, req_byte must be
9072   later in the subject; otherwise the test starts at the match point. This
9073   optimization can save a huge amount of backtracking in patterns with nested
9074   unlimited repeats that aren't going to match. Writing separate code for
9075   cased/caseless versions makes it go faster, as does using an autoincrement
9076   and backing off on a match.
9077
9078   HOWEVER: when the subject string is very, very long, searching to its end can
9079   take a long time, and give bad performance on quite ordinary patterns. This
9080   showed up when somebody was matching /^C/ on a 32-megabyte string... so we
9081   don't do this when the string is sufficiently long.
9082
9083   ALSO: this processing is disabled when partial matching is requested.
9084   */
9085
9086   if (req_byte >= 0 &&
9087       end_subject - start_match < REQ_BYTE_MAX &&
9088       !match_block.partial)
9089     {
9090     register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0);
9091
9092     /* We don't need to repeat the search if we haven't yet reached the
9093     place we found it at last time. */
9094
9095     if (p > req_byte_ptr)
9096       {
9097       if (req_byte_caseless)
9098         {
9099         while (p < end_subject)
9100           {
9101           register int pp = *p++;
9102           if (pp == req_byte || pp == req_byte2) { p--; break; }
9103           }
9104         }
9105       else
9106         {
9107         while (p < end_subject)
9108           {
9109           if (*p++ == req_byte) { p--; break; }
9110           }
9111         }
9112
9113       /* If we can't find the required character, break the matching loop */
9114
9115       if (p >= end_subject) break;
9116
9117       /* If we have found the required character, save the point where we
9118       found it, so that we don't search again next time round the loop if
9119       the start hasn't passed this character yet. */
9120
9121       req_byte_ptr = p;
9122       }
9123     }
9124
9125   /* When a match occurs, substrings will be set for all internal extractions;
9126   we just need to set up the whole thing as substring 0 before returning. If
9127   there were too many extractions, set the return code to zero. In the case
9128   where we had to get some local store to hold offsets for backreferences, copy
9129   those back references that we can. In this case there need not be overflow
9130   if certain parts of the pattern were not used. */
9131
9132   match_block.start_match = start_match;
9133   match_block.match_call_count = 0;
9134
9135   rc = match(start_match, match_block.start_code, 2, &match_block, ims, NULL,
9136     match_isgroup);
9137
9138   if (rc == MATCH_NOMATCH)
9139     {
9140     start_match++;
9141 #ifdef SUPPORT_UTF8
9142     if (match_block.utf8)
9143       while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
9144         start_match++;
9145 #endif
9146     continue;
9147     }
9148
9149   if (rc != MATCH_MATCH)
9150     {
9151     DPRINTF((">>>> error: returning %d\n", rc));
9152     return rc;
9153     }
9154
9155   /* We have a match! Copy the offset information from temporary store if
9156   necessary */
9157
9158   if (using_temporary_offsets)
9159     {
9160     if (offsetcount >= 4)
9161       {
9162       memcpy(offsets + 2, match_block.offset_vector + 2,
9163         (offsetcount - 2) * sizeof(int));
9164       DPRINTF(("Copied offsets from temporary memory\n"));
9165       }
9166     if (match_block.end_offset_top > offsetcount)
9167       match_block.offset_overflow = TRUE;
9168
9169     DPRINTF(("Freeing temporary memory\n"));
9170     (pcre_free)(match_block.offset_vector);
9171     }
9172
9173   rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
9174
9175   if (offsetcount < 2) rc = 0; else
9176     {
9177     offsets[0] = start_match - match_block.start_subject;
9178     offsets[1] = match_block.end_match_ptr - match_block.start_subject;
9179     }
9180
9181   DPRINTF((">>>> returning %d\n", rc));
9182   return rc;
9183   }
9184
9185 /* This "while" is the end of the "do" above */
9186
9187 while (!anchored && start_match <= end_subject);
9188
9189 if (using_temporary_offsets)
9190   {
9191   DPRINTF(("Freeing temporary memory\n"));
9192   (pcre_free)(match_block.offset_vector);
9193   }
9194
9195 if (match_block.partial && match_block.hitend)
9196   {
9197   DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n"));
9198   return PCRE_ERROR_PARTIAL;
9199   }
9200 else
9201   {
9202   DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
9203   return PCRE_ERROR_NOMATCH;
9204   }
9205 }
9206
9207 /* End of pcre.c */