Coverage Report

Created: 2025-07-12 06:53

/src/libgit2/deps/pcre/pcre_compile.c
Line
Count
Source (jump to first uncovered line)
1
/*************************************************
2
*      Perl-Compatible Regular Expressions       *
3
*************************************************/
4
5
/* PCRE is a library of functions to support regular expressions whose syntax
6
and semantics are as close as possible to those of the Perl 5 language.
7
8
                       Written by Philip Hazel
9
           Copyright (c) 1997-2021 University of Cambridge
10
11
-----------------------------------------------------------------------------
12
Redistribution and use in source and binary forms, with or without
13
modification, are permitted provided that the following conditions are met:
14
15
    * Redistributions of source code must retain the above copyright notice,
16
      this list of conditions and the following disclaimer.
17
18
    * Redistributions in binary form must reproduce the above copyright
19
      notice, this list of conditions and the following disclaimer in the
20
      documentation and/or other materials provided with the distribution.
21
22
    * Neither the name of the University of Cambridge nor the names of its
23
      contributors may be used to endorse or promote products derived from
24
      this software without specific prior written permission.
25
26
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
POSSIBILITY OF SUCH DAMAGE.
37
-----------------------------------------------------------------------------
38
*/
39
40
41
/* This module contains the external function pcre_compile(), along with
42
supporting internal functions that are not used by other modules. */
43
44
45
#ifdef HAVE_CONFIG_H
46
#include "config.h"
47
#endif
48
49
44.7k
#define NLBLOCK cd             /* Block containing newline information */
50
#define PSSTART start_pattern  /* Field containing pattern start */
51
17.3k
#define PSEND   end_pattern    /* Field containing pattern end */
52
53
#include "pcre_internal.h"
54
55
56
/* When PCRE_DEBUG is defined, we need the pcre(16|32)_printint() function, which
57
is also used by pcretest. PCRE_DEBUG is not defined when building a production
58
library. We do not need to select pcre16_printint.c specially, because the
59
COMPILE_PCREx macro will already be appropriately set. */
60
61
#ifdef PCRE_DEBUG
62
/* pcre_printint.c should not include any headers */
63
#define PCRE_INCLUDED
64
#include "pcre_printint.c"
65
#undef PCRE_INCLUDED
66
#endif
67
68
69
/* Macro for setting individual bits in class bitmaps. */
70
71
8.32M
#define SETBIT(a,b) a[(b)/8] |= (1U << ((b)&7))
72
73
/* Maximum length value to check against when making sure that the integer that
74
holds the compiled pattern length does not overflow. We make it a bit less than
75
INT_MAX to allow for adding in group terminating bytes, so that we don't have
76
to check them every time. */
77
78
3.24M
#define OFLOW_MAX (INT_MAX - 20)
79
80
/* Definitions to allow mutual recursion */
81
82
static int
83
  add_list_to_class(pcre_uint8 *, pcre_uchar **, int, compile_data *,
84
    const pcre_uint32 *, unsigned int);
85
86
static BOOL
87
  compile_regex(int, pcre_uchar **, const pcre_uchar **, int *, BOOL, BOOL, int, int,
88
    pcre_uint32 *, pcre_int32 *, pcre_uint32 *, pcre_int32 *, branch_chain *,
89
    compile_data *, int *);
90
91
92
93
/*************************************************
94
*      Code parameters and static tables         *
95
*************************************************/
96
97
/* This value specifies the size of stack workspace that is used during the
98
first pre-compile phase that determines how much memory is required. The regex
99
is partly compiled into this space, but the compiled parts are discarded as
100
soon as they can be, so that hopefully there will never be an overrun. The code
101
does, however, check for an overrun. The largest amount I've seen used is 218,
102
so this number is very generous.
103
104
The same workspace is used during the second, actual compile phase for
105
remembering forward references to groups so that they can be filled in at the
106
end. Each entry in this list occupies LINK_SIZE bytes, so even when LINK_SIZE
107
is 4 there is plenty of room for most patterns. However, the memory can get
108
filled up by repetitions of forward references, for example patterns like
109
/(?1){0,1999}(b)/, and one user did hit the limit. The code has been changed so
110
that the workspace is expanded using malloc() in this situation. The value
111
below is therefore a minimum, and we put a maximum on it for safety. The
112
minimum is now also defined in terms of LINK_SIZE so that the use of malloc()
113
kicks in at the same number of forward references in all cases. */
114
115
17.3k
#define COMPILE_WORK_SIZE (2048*LINK_SIZE)
116
69
#define COMPILE_WORK_SIZE_MAX (100*COMPILE_WORK_SIZE)
117
118
/* This value determines the size of the initial vector that is used for
119
remembering named groups during the pre-compile. It is allocated on the stack,
120
but if it is too small, it is expanded using malloc(), in a similar way to the
121
workspace. The value is the number of slots in the list. */
122
123
15.7k
#define NAMED_GROUP_LIST_SIZE  20
124
125
/* The overrun tests check for a slightly smaller size so that they detect the
126
overrun before it actually does run off the end of the data block. */
127
128
2.73M
#define WORK_SIZE_SAFETY_MARGIN (100)
129
130
/* Private flags added to firstchar and reqchar. */
131
132
289k
#define REQ_CASELESS    (1U << 0)        /* Indicates caselessness */
133
326k
#define REQ_VARY        (1U << 1)        /* Reqchar followed non-literal item */
134
/* Negative values for the firstchar and reqchar flags */
135
2.84M
#define REQ_UNSET       (-2)
136
387k
#define REQ_NONE        (-1)
137
138
/* Repeated character flags. */
139
140
#define UTF_LENGTH     0x10000000l      /* The char contains its length. */
141
142
/* Table for handling escaped characters in the range '0'-'z'. Positive returns
143
are simple data values; negative values are for special things like \d and so
144
on. Zero means further processing is needed (for things like \x), or the escape
145
is invalid. */
146
147
#ifndef EBCDIC
148
149
/* This is the "normal" table for ASCII systems or for EBCDIC systems running
150
in UTF-8 mode. */
151
152
static const short int escapes[] = {
153
     0,                       0,
154
     0,                       0,
155
     0,                       0,
156
     0,                       0,
157
     0,                       0,
158
     CHAR_COLON,              CHAR_SEMICOLON,
159
     CHAR_LESS_THAN_SIGN,     CHAR_EQUALS_SIGN,
160
     CHAR_GREATER_THAN_SIGN,  CHAR_QUESTION_MARK,
161
     CHAR_COMMERCIAL_AT,      -ESC_A,
162
     -ESC_B,                  -ESC_C,
163
     -ESC_D,                  -ESC_E,
164
     0,                       -ESC_G,
165
     -ESC_H,                  0,
166
     0,                       -ESC_K,
167
     0,                       0,
168
     -ESC_N,                  0,
169
     -ESC_P,                  -ESC_Q,
170
     -ESC_R,                  -ESC_S,
171
     0,                       0,
172
     -ESC_V,                  -ESC_W,
173
     -ESC_X,                  0,
174
     -ESC_Z,                  CHAR_LEFT_SQUARE_BRACKET,
175
     CHAR_BACKSLASH,          CHAR_RIGHT_SQUARE_BRACKET,
176
     CHAR_CIRCUMFLEX_ACCENT,  CHAR_UNDERSCORE,
177
     CHAR_GRAVE_ACCENT,       ESC_a,
178
     -ESC_b,                  0,
179
     -ESC_d,                  ESC_e,
180
     ESC_f,                   0,
181
     -ESC_h,                  0,
182
     0,                       -ESC_k,
183
     0,                       0,
184
     ESC_n,                   0,
185
     -ESC_p,                  0,
186
     ESC_r,                   -ESC_s,
187
     ESC_tee,                 0,
188
     -ESC_v,                  -ESC_w,
189
     0,                       0,
190
     -ESC_z
191
};
192
193
#else
194
195
/* This is the "abnormal" table for EBCDIC systems without UTF-8 support. */
196
197
static const short int escapes[] = {
198
/*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
199
/*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
200
/*  58 */     0,     0,    '!',     '$',    '*',   ')',    ';',    '~',
201
/*  60 */   '-',   '/',      0,       0,      0,     0,      0,      0,
202
/*  68 */     0,     0,    '|',     ',',    '%',   '_',    '>',    '?',
203
/*  70 */     0,     0,      0,       0,      0,     0,      0,      0,
204
/*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
205
/*  80 */     0, ESC_a, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
206
/*  88 */-ESC_h,     0,      0,     '{',      0,     0,      0,      0,
207
/*  90 */     0,     0, -ESC_k,       0,      0, ESC_n,      0, -ESC_p,
208
/*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
209
/*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,-ESC_v, -ESC_w,      0,
210
/*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
211
/*  B0 */     0,     0,      0,       0,      0,     0,      0,      0,
212
/*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
213
/*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
214
/*  C8 */-ESC_H,     0,      0,       0,      0,     0,      0,      0,
215
/*  D0 */   '}',     0, -ESC_K,       0,      0,-ESC_N,      0, -ESC_P,
216
/*  D8 */-ESC_Q,-ESC_R,      0,       0,      0,     0,      0,      0,
217
/*  E0 */  '\\',     0, -ESC_S,       0,      0,-ESC_V, -ESC_W, -ESC_X,
218
/*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
219
/*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
220
/*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
221
};
222
223
/* We also need a table of characters that may follow \c in an EBCDIC
224
environment for characters 0-31. */
225
226
static unsigned char ebcdic_escape_c[] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
227
228
#endif
229
230
231
/* Table of special "verbs" like (*PRUNE). This is a short table, so it is
232
searched linearly. Put all the names into a single string, in order to reduce
233
the number of relocations when a shared library is dynamically linked. The
234
string is built from string macros so that it works in UTF-8 mode on EBCDIC
235
platforms. */
236
237
typedef struct verbitem {
238
  int   len;                 /* Length of verb name */
239
  int   op;                  /* Op when no arg, or -1 if arg mandatory */
240
  int   op_arg;              /* Op when arg present, or -1 if not allowed */
241
} verbitem;
242
243
static const char verbnames[] =
244
  "\0"                       /* Empty name is a shorthand for MARK */
245
  STRING_MARK0
246
  STRING_ACCEPT0
247
  STRING_COMMIT0
248
  STRING_F0
249
  STRING_FAIL0
250
  STRING_PRUNE0
251
  STRING_SKIP0
252
  STRING_THEN;
253
254
static const verbitem verbs[] = {
255
  { 0, -1,        OP_MARK },
256
  { 4, -1,        OP_MARK },
257
  { 6, OP_ACCEPT, -1 },
258
  { 6, OP_COMMIT, -1 },
259
  { 1, OP_FAIL,   -1 },
260
  { 4, OP_FAIL,   -1 },
261
  { 5, OP_PRUNE,  OP_PRUNE_ARG },
262
  { 4, OP_SKIP,   OP_SKIP_ARG  },
263
  { 4, OP_THEN,   OP_THEN_ARG  }
264
};
265
266
static const int verbcount = sizeof(verbs)/sizeof(verbitem);
267
268
269
/* Substitutes for [[:<:]] and [[:>:]], which mean start and end of word in
270
another regex library. */
271
272
static const pcre_uchar sub_start_of_word[] = {
273
  CHAR_BACKSLASH, CHAR_b, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK,
274
  CHAR_EQUALS_SIGN, CHAR_BACKSLASH, CHAR_w, CHAR_RIGHT_PARENTHESIS, '\0' };
275
276
static const pcre_uchar sub_end_of_word[] = {
277
  CHAR_BACKSLASH, CHAR_b, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK,
278
  CHAR_LESS_THAN_SIGN, CHAR_EQUALS_SIGN, CHAR_BACKSLASH, CHAR_w,
279
  CHAR_RIGHT_PARENTHESIS, '\0' };
280
281
282
/* Tables of names of POSIX character classes and their lengths. The names are
283
now all in a single string, to reduce the number of relocations when a shared
284
library is dynamically loaded. The list of lengths is terminated by a zero
285
length entry. The first three must be alpha, lower, upper, as this is assumed
286
for handling case independence. The indices for graph, print, and punct are
287
needed, so identify them. */
288
289
static const char posix_names[] =
290
  STRING_alpha0 STRING_lower0 STRING_upper0 STRING_alnum0
291
  STRING_ascii0 STRING_blank0 STRING_cntrl0 STRING_digit0
292
  STRING_graph0 STRING_print0 STRING_punct0 STRING_space0
293
  STRING_word0  STRING_xdigit;
294
295
static const pcre_uint8 posix_name_lengths[] = {
296
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
297
298
#define PC_GRAPH  8
299
#define PC_PRINT  9
300
#define PC_PUNCT 10
301
302
303
/* Table of class bit maps for each POSIX class. Each class is formed from a
304
base map, with an optional addition or removal of another map. Then, for some
305
classes, there is some additional tweaking: for [:blank:] the vertical space
306
characters are removed, and for [:alpha:] and [:alnum:] the underscore
307
character is removed. The triples in the table consist of the base map offset,
308
second map offset or -1 if no second map, and a non-negative value for map
309
addition or a negative value for map subtraction (if there are two maps). The
310
absolute value of the third field has these meanings: 0 => no tweaking, 1 =>
311
remove vertical space characters, 2 => remove underscore. */
312
313
static const int posix_class_maps[] = {
314
  cbit_word,  cbit_digit, -2,             /* alpha */
315
  cbit_lower, -1,          0,             /* lower */
316
  cbit_upper, -1,          0,             /* upper */
317
  cbit_word,  -1,          2,             /* alnum - word without underscore */
318
  cbit_print, cbit_cntrl,  0,             /* ascii */
319
  cbit_space, -1,          1,             /* blank - a GNU extension */
320
  cbit_cntrl, -1,          0,             /* cntrl */
321
  cbit_digit, -1,          0,             /* digit */
322
  cbit_graph, -1,          0,             /* graph */
323
  cbit_print, -1,          0,             /* print */
324
  cbit_punct, -1,          0,             /* punct */
325
  cbit_space, -1,          0,             /* space */
326
  cbit_word,  -1,          0,             /* word - a Perl extension */
327
  cbit_xdigit,-1,          0              /* xdigit */
328
};
329
330
/* Table of substitutes for \d etc when PCRE_UCP is set. They are replaced by
331
Unicode property escapes. */
332
333
#ifdef SUPPORT_UCP
334
static const pcre_uchar string_PNd[]  = {
335
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
336
  CHAR_N, CHAR_d, CHAR_RIGHT_CURLY_BRACKET, '\0' };
337
static const pcre_uchar string_pNd[]  = {
338
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
339
  CHAR_N, CHAR_d, CHAR_RIGHT_CURLY_BRACKET, '\0' };
340
static const pcre_uchar string_PXsp[] = {
341
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
342
  CHAR_X, CHAR_s, CHAR_p, CHAR_RIGHT_CURLY_BRACKET, '\0' };
343
static const pcre_uchar string_pXsp[] = {
344
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
345
  CHAR_X, CHAR_s, CHAR_p, CHAR_RIGHT_CURLY_BRACKET, '\0' };
346
static const pcre_uchar string_PXwd[] = {
347
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
348
  CHAR_X, CHAR_w, CHAR_d, CHAR_RIGHT_CURLY_BRACKET, '\0' };
349
static const pcre_uchar string_pXwd[] = {
350
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
351
  CHAR_X, CHAR_w, CHAR_d, CHAR_RIGHT_CURLY_BRACKET, '\0' };
352
353
static const pcre_uchar *substitutes[] = {
354
  string_PNd,           /* \D */
355
  string_pNd,           /* \d */
356
  string_PXsp,          /* \S */   /* Xsp is Perl space, but from 8.34, Perl */
357
  string_pXsp,          /* \s */   /* space and POSIX space are the same. */
358
  string_PXwd,          /* \W */
359
  string_pXwd           /* \w */
360
};
361
362
/* The POSIX class substitutes must be in the order of the POSIX class names,
363
defined above, and there are both positive and negative cases. NULL means no
364
general substitute of a Unicode property escape (\p or \P). However, for some
365
POSIX classes (e.g. graph, print, punct) a special property code is compiled
366
directly. */
367
368
static const pcre_uchar string_pL[] =   {
369
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
370
  CHAR_L, CHAR_RIGHT_CURLY_BRACKET, '\0' };
371
static const pcre_uchar string_pLl[] =  {
372
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
373
  CHAR_L, CHAR_l, CHAR_RIGHT_CURLY_BRACKET, '\0' };
374
static const pcre_uchar string_pLu[] =  {
375
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
376
  CHAR_L, CHAR_u, CHAR_RIGHT_CURLY_BRACKET, '\0' };
377
static const pcre_uchar string_pXan[] = {
378
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
379
  CHAR_X, CHAR_a, CHAR_n, CHAR_RIGHT_CURLY_BRACKET, '\0' };
380
static const pcre_uchar string_h[] =    {
381
  CHAR_BACKSLASH, CHAR_h, '\0' };
382
static const pcre_uchar string_pXps[] = {
383
  CHAR_BACKSLASH, CHAR_p, CHAR_LEFT_CURLY_BRACKET,
384
  CHAR_X, CHAR_p, CHAR_s, CHAR_RIGHT_CURLY_BRACKET, '\0' };
385
static const pcre_uchar string_PL[] =   {
386
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
387
  CHAR_L, CHAR_RIGHT_CURLY_BRACKET, '\0' };
388
static const pcre_uchar string_PLl[] =  {
389
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
390
  CHAR_L, CHAR_l, CHAR_RIGHT_CURLY_BRACKET, '\0' };
391
static const pcre_uchar string_PLu[] =  {
392
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
393
  CHAR_L, CHAR_u, CHAR_RIGHT_CURLY_BRACKET, '\0' };
394
static const pcre_uchar string_PXan[] = {
395
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
396
  CHAR_X, CHAR_a, CHAR_n, CHAR_RIGHT_CURLY_BRACKET, '\0' };
397
static const pcre_uchar string_H[] =    {
398
  CHAR_BACKSLASH, CHAR_H, '\0' };
399
static const pcre_uchar string_PXps[] = {
400
  CHAR_BACKSLASH, CHAR_P, CHAR_LEFT_CURLY_BRACKET,
401
  CHAR_X, CHAR_p, CHAR_s, CHAR_RIGHT_CURLY_BRACKET, '\0' };
402
403
static const pcre_uchar *posix_substitutes[] = {
404
  string_pL,            /* alpha */
405
  string_pLl,           /* lower */
406
  string_pLu,           /* upper */
407
  string_pXan,          /* alnum */
408
  NULL,                 /* ascii */
409
  string_h,             /* blank */
410
  NULL,                 /* cntrl */
411
  string_pNd,           /* digit */
412
  NULL,                 /* graph */
413
  NULL,                 /* print */
414
  NULL,                 /* punct */
415
  string_pXps,          /* space */   /* Xps is POSIX space, but from 8.34 */
416
  string_pXwd,          /* word  */   /* Perl and POSIX space are the same */
417
  NULL,                 /* xdigit */
418
  /* Negated cases */
419
  string_PL,            /* ^alpha */
420
  string_PLl,           /* ^lower */
421
  string_PLu,           /* ^upper */
422
  string_PXan,          /* ^alnum */
423
  NULL,                 /* ^ascii */
424
  string_H,             /* ^blank */
425
  NULL,                 /* ^cntrl */
426
  string_PNd,           /* ^digit */
427
  NULL,                 /* ^graph */
428
  NULL,                 /* ^print */
429
  NULL,                 /* ^punct */
430
  string_PXps,          /* ^space */  /* Xps is POSIX space, but from 8.34 */
431
  string_PXwd,          /* ^word */   /* Perl and POSIX space are the same */
432
  NULL                  /* ^xdigit */
433
};
434
#define POSIX_SUBSIZE (sizeof(posix_substitutes) / sizeof(pcre_uchar *))
435
#endif
436
437
#define STRING(a)  # a
438
#define XSTRING(s) STRING(s)
439
440
/* The texts of compile-time error messages. These are "char *" because they
441
are passed to the outside world. Do not ever re-use any error number, because
442
they are documented. Always add a new error instead. Messages marked DEAD below
443
are no longer used. This used to be a table of strings, but in order to reduce
444
the number of relocations needed when a shared library is loaded dynamically,
445
it is now one long string. We cannot use a table of offsets, because the
446
lengths of inserts such as XSTRING(MAX_NAME_SIZE) are not known. Instead, we
447
simply count through to the one we want - this isn't a performance issue
448
because these strings are used only when there is a compilation error.
449
450
Each substring ends with \0 to insert a null character. This includes the final
451
substring, so that the whole string ends with \0\0, which can be detected when
452
counting through. */
453
454
static const char error_texts[] =
455
  "no error\0"
456
  "\\ at end of pattern\0"
457
  "\\c at end of pattern\0"
458
  "unrecognized character follows \\\0"
459
  "numbers out of order in {} quantifier\0"
460
  /* 5 */
461
  "number too big in {} quantifier\0"
462
  "missing terminating ] for character class\0"
463
  "invalid escape sequence in character class\0"
464
  "range out of order in character class\0"
465
  "nothing to repeat\0"
466
  /* 10 */
467
  "internal error: invalid forward reference offset\0"
468
  "internal error: unexpected repeat\0"
469
  "unrecognized character after (? or (?-\0"
470
  "POSIX named classes are supported only within a class\0"
471
  "missing )\0"
472
  /* 15 */
473
  "reference to non-existent subpattern\0"
474
  "erroffset passed as NULL\0"
475
  "unknown option bit(s) set\0"
476
  "missing ) after comment\0"
477
  "parentheses nested too deeply\0"  /** DEAD **/
478
  /* 20 */
479
  "regular expression is too large\0"
480
  "failed to get memory\0"
481
  "unmatched parentheses\0"
482
  "internal error: code overflow\0"
483
  "unrecognized character after (?<\0"
484
  /* 25 */
485
  "lookbehind assertion is not fixed length\0"
486
  "malformed number or name after (?(\0"
487
  "conditional group contains more than two branches\0"
488
  "assertion expected after (?( or (?(?C)\0"
489
  "(?R or (?[+-]digits must be followed by )\0"
490
  /* 30 */
491
  "unknown POSIX class name\0"
492
  "POSIX collating elements are not supported\0"
493
  "this version of PCRE is compiled without UTF support\0"
494
  "spare error\0"  /** DEAD **/
495
  "character value in \\x{} or \\o{} is too large\0"
496
  /* 35 */
497
  "invalid condition (?(0)\0"
498
  "\\C not allowed in lookbehind assertion\0"
499
  "PCRE does not support \\L, \\l, \\N{name}, \\U, or \\u\0"
500
  "number after (?C is > 255\0"
501
  "closing ) for (?C expected\0"
502
  /* 40 */
503
  "recursive call could loop indefinitely\0"
504
  "unrecognized character after (?P\0"
505
  "syntax error in subpattern name (missing terminator)\0"
506
  "two named subpatterns have the same name\0"
507
  "invalid UTF-8 string\0"
508
  /* 45 */
509
  "support for \\P, \\p, and \\X has not been compiled\0"
510
  "malformed \\P or \\p sequence\0"
511
  "unknown property name after \\P or \\p\0"
512
  "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)\0"
513
  "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0"
514
  /* 50 */
515
  "repeated subpattern is too long\0"    /** DEAD **/
516
  "octal value is greater than \\377 in 8-bit non-UTF-8 mode\0"
517
  "internal error: overran compiling workspace\0"
518
  "internal error: previously-checked referenced subpattern not found\0"
519
  "DEFINE group contains more than one branch\0"
520
  /* 55 */
521
  "repeating a DEFINE group is not allowed\0"  /** DEAD **/
522
  "inconsistent NEWLINE options\0"
523
  "\\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number\0"
524
  "a numbered reference must not be zero\0"
525
  "an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)\0"
526
  /* 60 */
527
  "(*VERB) not recognized or malformed\0"
528
  "number is too big\0"
529
  "subpattern name expected\0"
530
  "digit expected after (?+\0"
531
  "] is an invalid data character in JavaScript compatibility mode\0"
532
  /* 65 */
533
  "different names for subpatterns of the same number are not allowed\0"
534
  "(*MARK) must have an argument\0"
535
  "this version of PCRE is not compiled with Unicode property support\0"
536
#ifndef EBCDIC
537
  "\\c must be followed by an ASCII character\0"
538
#else
539
  "\\c must be followed by a letter or one of [\\]^_?\0"
540
#endif
541
  "\\k is not followed by a braced, angle-bracketed, or quoted name\0"
542
  /* 70 */
543
  "internal error: unknown opcode in find_fixedlength()\0"
544
  "\\N is not supported in a class\0"
545
  "too many forward references\0"
546
  "disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\0"
547
  "invalid UTF-16 string\0"
548
  /* 75 */
549
  "name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\0"
550
  "character value in \\u.... sequence is too large\0"
551
  "invalid UTF-32 string\0"
552
  "setting UTF is disabled by the application\0"
553
  "non-hex character in \\x{} (closing brace missing?)\0"
554
  /* 80 */
555
  "non-octal character in \\o{} (closing brace missing?)\0"
556
  "missing opening brace after \\o\0"
557
  "parentheses are too deeply nested\0"
558
  "invalid range in character class\0"
559
  "group name must start with a non-digit\0"
560
  /* 85 */
561
  "parentheses are too deeply nested (stack check)\0"
562
  "digits missing in \\x{} or \\o{}\0"
563
  "regular expression is too complicated\0"
564
  ;
565
566
/* Table to identify digits and hex digits. This is used when compiling
567
patterns. Note that the tables in chartables are dependent on the locale, and
568
may mark arbitrary characters as digits - but the PCRE compiling code expects
569
to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
570
a private table here. It costs 256 bytes, but it is a lot faster than doing
571
character value tests (at least in some simple cases I timed), and in some
572
applications one wants PCRE to compile efficiently as well as match
573
efficiently.
574
575
For convenience, we use the same bit definitions as in chartables:
576
577
  0x04   decimal digit
578
  0x08   hexadecimal digit
579
580
Then we can use ctype_digit and ctype_xdigit in the code. */
581
582
/* Using a simple comparison for decimal numbers rather than a memory read
583
is much faster, and the resulting code is simpler (the compiler turns it
584
into a subtraction and unsigned comparison). */
585
586
324k
#define IS_DIGIT(x) ((x) >= CHAR_0 && (x) <= CHAR_9)
587
588
#ifndef EBCDIC
589
590
/* This is the "normal" case, for ASCII systems, and EBCDIC systems running in
591
UTF-8 mode. */
592
593
static const pcre_uint8 digitab[] =
594
  {
595
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
596
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15 */
597
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
598
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
599
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */
600
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */
601
  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  */
602
  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */
603
  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  @ - G  */
604
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */
605
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */
606
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */
607
  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  ` - g  */
608
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h - o  */
609
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */
610
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */
611
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
612
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
613
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
614
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
615
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
616
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
617
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
618
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
619
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
620
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
621
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
622
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
623
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
624
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
625
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
626
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
627
628
#else
629
630
/* This is the "abnormal" case, for EBCDIC systems not running in UTF-8 mode. */
631
632
static const pcre_uint8 digitab[] =
633
  {
634
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
635
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15    */
636
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 10 */
637
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31    */
638
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  32- 39 20 */
639
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47    */
640
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 30 */
641
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63    */
642
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 40 */
643
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  72- |     */
644
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 50 */
645
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  88- 95    */
646
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 60 */
647
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ?     */
648
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
649
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "     */
650
  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g  80 */
651
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143    */
652
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p  90 */
653
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159    */
654
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x  A0 */
655
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175    */
656
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 B0 */
657
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191    */
658
  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  { - G  C0 */
659
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207    */
660
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  } - P  D0 */
661
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223    */
662
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  \ - X  E0 */
663
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239    */
664
  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  F0 */
665
  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255    */
666
667
static const pcre_uint8 ebcdic_chartab[] = { /* chartable partial dup */
668
  0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */
669
  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
670
  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */
671
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
672
  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  32- 39 */
673
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47 */
674
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 */
675
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63 */
676
  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 */
677
  0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /*  72- |  */
678
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 */
679
  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /*  88- 95 */
680
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 */
681
  0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ?  */
682
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
683
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "  */
684
  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g  */
685
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143 */
686
  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p  */
687
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159 */
688
  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x  */
689
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175 */
690
  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 */
691
  0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
692
  0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  { - G  */
693
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207 */
694
  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  } - P  */
695
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223 */
696
  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /*  \ - X  */
697
  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239 */
698
  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
699
  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255 */
700
#endif
701
702
703
/* This table is used to check whether auto-possessification is possible
704
between adjacent character-type opcodes. The left-hand (repeated) opcode is
705
used to select the row, and the right-hand opcode is use to select the column.
706
A value of 1 means that auto-possessification is OK. For example, the second
707
value in the first row means that \D+\d can be turned into \D++\d.
708
709
The Unicode property types (\P and \p) have to be present to fill out the table
710
because of what their opcode values are, but the table values should always be
711
zero because property types are handled separately in the code. The last four
712
columns apply to items that cannot be repeated, so there is no need to have
713
rows for them. Note that OP_DIGIT etc. are generated only when PCRE_UCP is
714
*not* set. When it is set, \d etc. are converted into OP_(NOT_)PROP codes. */
715
716
#define APTROWS (LAST_AUTOTAB_LEFT_OP - FIRST_AUTOTAB_OP + 1)
717
#define APTCOLS (LAST_AUTOTAB_RIGHT_OP - FIRST_AUTOTAB_OP + 1)
718
719
static const pcre_uint8 autoposstab[APTROWS][APTCOLS] = {
720
/* \D \d \S \s \W \w  . .+ \C \P \p \R \H \h \V \v \X \Z \z  $ $M */
721
  { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \D */
722
  { 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \d */
723
  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \S */
724
  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \s */
725
  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \W */
726
  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \w */
727
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* .  */
728
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* .+ */
729
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \C */
730
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },  /* \P */
731
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },  /* \p */
732
  { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 },  /* \R */
733
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 },  /* \H */
734
  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0 },  /* \h */
735
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 },  /* \V */
736
  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0 },  /* \v */
737
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }   /* \X */
738
};
739
740
741
/* This table is used to check whether auto-possessification is possible
742
between adjacent Unicode property opcodes (OP_PROP and OP_NOTPROP). The
743
left-hand (repeated) opcode is used to select the row, and the right-hand
744
opcode is used to select the column. The values are as follows:
745
746
  0   Always return FALSE (never auto-possessify)
747
  1   Character groups are distinct (possessify if both are OP_PROP)
748
  2   Check character categories in the same group (general or particular)
749
  3   TRUE if the two opcodes are not the same (PROP vs NOTPROP)
750
751
  4   Check left general category vs right particular category
752
  5   Check right general category vs left particular category
753
754
  6   Left alphanum vs right general category
755
  7   Left space vs right general category
756
  8   Left word vs right general category
757
758
  9   Right alphanum vs left general category
759
 10   Right space vs left general category
760
 11   Right word vs left general category
761
762
 12   Left alphanum vs right particular category
763
 13   Left space vs right particular category
764
 14   Left word vs right particular category
765
766
 15   Right alphanum vs left particular category
767
 16   Right space vs left particular category
768
 17   Right word vs left particular category
769
*/
770
771
static const pcre_uint8 propposstab[PT_TABSIZE][PT_TABSIZE] = {
772
/* ANY LAMP GC  PC  SC ALNUM SPACE PXSPACE WORD CLIST UCNC */
773
  { 0,  0,  0,  0,  0,    0,    0,      0,   0,    0,   0 },  /* PT_ANY */
774
  { 0,  3,  0,  0,  0,    3,    1,      1,   0,    0,   0 },  /* PT_LAMP */
775
  { 0,  0,  2,  4,  0,    9,   10,     10,  11,    0,   0 },  /* PT_GC */
776
  { 0,  0,  5,  2,  0,   15,   16,     16,  17,    0,   0 },  /* PT_PC */
777
  { 0,  0,  0,  0,  2,    0,    0,      0,   0,    0,   0 },  /* PT_SC */
778
  { 0,  3,  6, 12,  0,    3,    1,      1,   0,    0,   0 },  /* PT_ALNUM */
779
  { 0,  1,  7, 13,  0,    1,    3,      3,   1,    0,   0 },  /* PT_SPACE */
780
  { 0,  1,  7, 13,  0,    1,    3,      3,   1,    0,   0 },  /* PT_PXSPACE */
781
  { 0,  0,  8, 14,  0,    0,    1,      1,   3,    0,   0 },  /* PT_WORD */
782
  { 0,  0,  0,  0,  0,    0,    0,      0,   0,    0,   0 },  /* PT_CLIST */
783
  { 0,  0,  0,  0,  0,    0,    0,      0,   0,    0,   3 }   /* PT_UCNC */
784
};
785
786
/* This table is used to check whether auto-possessification is possible
787
between adjacent Unicode property opcodes (OP_PROP and OP_NOTPROP) when one
788
specifies a general category and the other specifies a particular category. The
789
row is selected by the general category and the column by the particular
790
category. The value is 1 if the particular category is not part of the general
791
category. */
792
793
static const pcre_uint8 catposstab[7][30] = {
794
/* Cc Cf Cn Co Cs Ll Lm Lo Lt Lu Mc Me Mn Nd Nl No Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So Zl Zp Zs */
795
  { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* C */
796
  { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* L */
797
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* M */
798
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* N */
799
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },  /* P */
800
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 },  /* S */
801
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }   /* Z */
802
};
803
804
/* This table is used when checking ALNUM, (PX)SPACE, SPACE, and WORD against
805
a general or particular category. The properties in each row are those
806
that apply to the character set in question. Duplication means that a little
807
unnecessary work is done when checking, but this keeps things much simpler
808
because they can all use the same code. For more details see the comment where
809
this table is used.
810
811
Note: SPACE and PXSPACE used to be different because Perl excluded VT from
812
"space", but from Perl 5.18 it's included, so both categories are treated the
813
same here. */
814
815
static const pcre_uint8 posspropstab[3][4] = {
816
  { ucp_L, ucp_N, ucp_N, ucp_Nl },  /* ALNUM, 3rd and 4th values redundant */
817
  { ucp_Z, ucp_Z, ucp_C, ucp_Cc },  /* SPACE and PXSPACE, 2nd value redundant */
818
  { ucp_L, ucp_N, ucp_P, ucp_Po }   /* WORD */
819
};
820
821
/* This table is used when converting repeating opcodes into possessified
822
versions as a result of an explicit possessive quantifier such as ++. A zero
823
value means there is no possessified version - in those cases the item in
824
question must be wrapped in ONCE brackets. The table is truncated at OP_CALLOUT
825
because all relevant opcodes are less than that. */
826
827
static const pcre_uint8 opcode_possessify[] = {
828
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 0 - 15  */
829
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 16 - 31 */
830
831
  0,                       /* NOTI */
832
  OP_POSSTAR, 0,           /* STAR, MINSTAR */
833
  OP_POSPLUS, 0,           /* PLUS, MINPLUS */
834
  OP_POSQUERY, 0,          /* QUERY, MINQUERY */
835
  OP_POSUPTO, 0,           /* UPTO, MINUPTO */
836
  0,                       /* EXACT */
837
  0, 0, 0, 0,              /* POS{STAR,PLUS,QUERY,UPTO} */
838
839
  OP_POSSTARI, 0,          /* STARI, MINSTARI */
840
  OP_POSPLUSI, 0,          /* PLUSI, MINPLUSI */
841
  OP_POSQUERYI, 0,         /* QUERYI, MINQUERYI */
842
  OP_POSUPTOI, 0,          /* UPTOI, MINUPTOI */
843
  0,                       /* EXACTI */
844
  0, 0, 0, 0,              /* POS{STARI,PLUSI,QUERYI,UPTOI} */
845
846
  OP_NOTPOSSTAR, 0,        /* NOTSTAR, NOTMINSTAR */
847
  OP_NOTPOSPLUS, 0,        /* NOTPLUS, NOTMINPLUS */
848
  OP_NOTPOSQUERY, 0,       /* NOTQUERY, NOTMINQUERY */
849
  OP_NOTPOSUPTO, 0,        /* NOTUPTO, NOTMINUPTO */
850
  0,                       /* NOTEXACT */
851
  0, 0, 0, 0,              /* NOTPOS{STAR,PLUS,QUERY,UPTO} */
852
853
  OP_NOTPOSSTARI, 0,       /* NOTSTARI, NOTMINSTARI */
854
  OP_NOTPOSPLUSI, 0,       /* NOTPLUSI, NOTMINPLUSI */
855
  OP_NOTPOSQUERYI, 0,      /* NOTQUERYI, NOTMINQUERYI */
856
  OP_NOTPOSUPTOI, 0,       /* NOTUPTOI, NOTMINUPTOI */
857
  0,                       /* NOTEXACTI */
858
  0, 0, 0, 0,              /* NOTPOS{STARI,PLUSI,QUERYI,UPTOI} */
859
860
  OP_TYPEPOSSTAR, 0,       /* TYPESTAR, TYPEMINSTAR */
861
  OP_TYPEPOSPLUS, 0,       /* TYPEPLUS, TYPEMINPLUS */
862
  OP_TYPEPOSQUERY, 0,      /* TYPEQUERY, TYPEMINQUERY */
863
  OP_TYPEPOSUPTO, 0,       /* TYPEUPTO, TYPEMINUPTO */
864
  0,                       /* TYPEEXACT */
865
  0, 0, 0, 0,              /* TYPEPOS{STAR,PLUS,QUERY,UPTO} */
866
867
  OP_CRPOSSTAR, 0,         /* CRSTAR, CRMINSTAR */
868
  OP_CRPOSPLUS, 0,         /* CRPLUS, CRMINPLUS */
869
  OP_CRPOSQUERY, 0,        /* CRQUERY, CRMINQUERY */
870
  OP_CRPOSRANGE, 0,        /* CRRANGE, CRMINRANGE */
871
  0, 0, 0, 0,              /* CRPOS{STAR,PLUS,QUERY,RANGE} */
872
873
  0, 0, 0,                 /* CLASS, NCLASS, XCLASS */
874
  0, 0,                    /* REF, REFI */
875
  0, 0,                    /* DNREF, DNREFI */
876
  0, 0                     /* RECURSE, CALLOUT */
877
};
878
879
880
881
/*************************************************
882
*            Find an error text                  *
883
*************************************************/
884
885
/* The error texts are now all in one long string, to save on relocations. As
886
some of the text is of unknown length, we can't use a table of offsets.
887
Instead, just count through the strings. This is not a performance issue
888
because it happens only when there has been a compilation error.
889
890
Argument:   the error number
891
Returns:    pointer to the error string
892
*/
893
894
static const char *
895
find_error_text(int n)
896
4.61k
{
897
4.61k
const char *s = error_texts;
898
133k
for (; n > 0; n--)
899
129k
  {
900
4.42M
  while (*s++ != CHAR_NULL) {};
901
129k
  if (*s == CHAR_NULL) return "Error text not found (please report)";
902
129k
  }
903
4.61k
return s;
904
4.61k
}
905
906
907
908
/*************************************************
909
*           Expand the workspace                 *
910
*************************************************/
911
912
/* This function is called during the second compiling phase, if the number of
913
forward references fills the existing workspace, which is originally a block on
914
the stack. A larger block is obtained from malloc() unless the ultimate limit
915
has been reached or the increase will be rather small.
916
917
Argument: pointer to the compile data block
918
Returns:  0 if all went well, else an error number
919
*/
920
921
static int
922
expand_workspace(compile_data *cd)
923
23
{
924
23
pcre_uchar *newspace;
925
23
int newsize = cd->workspace_size * 2;
926
927
23
if (newsize > COMPILE_WORK_SIZE_MAX) newsize = COMPILE_WORK_SIZE_MAX;
928
23
if (cd->workspace_size >= COMPILE_WORK_SIZE_MAX ||
929
23
    newsize - cd->workspace_size < WORK_SIZE_SAFETY_MARGIN)
930
0
 return ERR72;
931
932
23
newspace = (PUBL(malloc))(IN_UCHARS(newsize));
933
23
if (newspace == NULL) return ERR21;
934
23
memcpy(newspace, cd->start_workspace, cd->workspace_size * sizeof(pcre_uchar));
935
23
cd->hwm = (pcre_uchar *)newspace + (cd->hwm - cd->start_workspace);
936
23
if (cd->workspace_size > COMPILE_WORK_SIZE)
937
6
  (PUBL(free))((void *)cd->start_workspace);
938
23
cd->start_workspace = newspace;
939
23
cd->workspace_size = newsize;
940
23
return 0;
941
23
}
942
943
944
945
/*************************************************
946
*            Check for counted repeat            *
947
*************************************************/
948
949
/* This function is called when a '{' is encountered in a place where it might
950
start a quantifier. It looks ahead to see if it really is a quantifier or not.
951
It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
952
where the ddds are digits.
953
954
Arguments:
955
  p         pointer to the first char after '{'
956
957
Returns:    TRUE or FALSE
958
*/
959
960
static BOOL
961
is_counted_repeat(const pcre_uchar *p)
962
43.9k
{
963
43.9k
if (!IS_DIGIT(*p)) return FALSE;
964
26.1k
p++;
965
38.3k
while (IS_DIGIT(*p)) p++;
966
26.1k
if (*p == CHAR_RIGHT_CURLY_BRACKET) return TRUE;
967
968
13.8k
if (*p++ != CHAR_COMMA) return FALSE;
969
9.49k
if (*p == CHAR_RIGHT_CURLY_BRACKET) return TRUE;
970
971
8.39k
if (!IS_DIGIT(*p)) return FALSE;
972
7.42k
p++;
973
13.8k
while (IS_DIGIT(*p)) p++;
974
975
7.42k
return (*p == CHAR_RIGHT_CURLY_BRACKET);
976
8.39k
}
977
978
979
980
/*************************************************
981
*            Handle escapes                      *
982
*************************************************/
983
984
/* This function is called when a \ has been encountered. It either returns a
985
positive value for a simple escape such as \n, or 0 for a data character which
986
will be placed in chptr. A backreference to group n is returned as negative n.
987
When UTF-8 is enabled, a positive value greater than 255 may be returned in
988
chptr. On entry, ptr is pointing at the \. On exit, it is on the final
989
character of the escape sequence.
990
991
Arguments:
992
  ptrptr         points to the pattern position pointer
993
  chptr          points to a returned data character
994
  errorcodeptr   points to the errorcode variable
995
  bracount       number of previous extracting brackets
996
  options        the options bits
997
  isclass        TRUE if inside a character class
998
999
Returns:         zero => a data character
1000
                 positive => a special escape sequence
1001
                 negative => a back reference
1002
                 on error, errorcodeptr is set
1003
*/
1004
1005
static int
1006
check_escape(const pcre_uchar **ptrptr, pcre_uint32 *chptr, int *errorcodeptr,
1007
  int bracount, int options, BOOL isclass)
1008
846k
{
1009
/* PCRE_UTF16 has the same value as PCRE_UTF8. */
1010
846k
BOOL utf = (options & PCRE_UTF8) != 0;
1011
846k
const pcre_uchar *ptr = *ptrptr + 1;
1012
846k
pcre_uint32 c;
1013
846k
int escape = 0;
1014
846k
int i;
1015
1016
846k
GETCHARINCTEST(c, ptr);           /* Get character value, increment pointer */
1017
846k
ptr--;                            /* Set pointer back to the last byte */
1018
1019
/* If backslash is at the end of the pattern, it's an error. */
1020
1021
846k
if (c == CHAR_NULL) *errorcodeptr = ERR1;
1022
1023
/* Non-alphanumerics are literals. For digits or letters, do an initial lookup
1024
in a table. A non-zero result is something that can be returned immediately.
1025
Otherwise further processing may be required. */
1026
1027
846k
#ifndef EBCDIC  /* ASCII/UTF-8 coding */
1028
/* Not alphanumeric */
1029
846k
else if (c < CHAR_0 || c > CHAR_z) {}
1030
773k
else if ((i = escapes[c - CHAR_0]) != 0)
1031
756k
  { if (i > 0) c = (pcre_uint32)i; else escape = -i; }
1032
1033
#else           /* EBCDIC coding */
1034
/* Not alphanumeric */
1035
else if (c < CHAR_a || (!MAX_255(c) || (ebcdic_chartab[c] & 0x0E) == 0)) {}
1036
else if ((i = escapes[c - 0x48]) != 0)  { if (i > 0) c = (pcre_uint32)i; else escape = -i; }
1037
#endif
1038
1039
/* Escapes that need further processing, or are illegal. */
1040
1041
17.3k
else
1042
17.3k
  {
1043
17.3k
  const pcre_uchar *oldptr;
1044
17.3k
  BOOL braced, negated, overflow;
1045
17.3k
  int s;
1046
1047
17.3k
  switch (c)
1048
17.3k
    {
1049
    /* A number of Perl escapes are not handled by PCRE. We give an explicit
1050
    error. */
1051
1052
1
    case CHAR_l:
1053
2
    case CHAR_L:
1054
2
    *errorcodeptr = ERR37;
1055
2
    break;
1056
1057
1
    case CHAR_u:
1058
1
    if ((options & PCRE_JAVASCRIPT_COMPAT) != 0)
1059
0
      {
1060
      /* In JavaScript, \u must be followed by four hexadecimal numbers.
1061
      Otherwise it is a lowercase u letter. */
1062
0
      if (MAX_255(ptr[1]) && (digitab[ptr[1]] & ctype_xdigit) != 0
1063
0
        && MAX_255(ptr[2]) && (digitab[ptr[2]] & ctype_xdigit) != 0
1064
0
        && MAX_255(ptr[3]) && (digitab[ptr[3]] & ctype_xdigit) != 0
1065
0
        && MAX_255(ptr[4]) && (digitab[ptr[4]] & ctype_xdigit) != 0)
1066
0
        {
1067
0
        c = 0;
1068
0
        for (i = 0; i < 4; ++i)
1069
0
          {
1070
0
          register pcre_uint32 cc = *(++ptr);
1071
0
#ifndef EBCDIC  /* ASCII/UTF-8 coding */
1072
0
          if (cc >= CHAR_a) cc -= 32;               /* Convert to upper case */
1073
0
          c = (c << 4) + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
1074
#else           /* EBCDIC coding */
1075
          if (cc >= CHAR_a && cc <= CHAR_z) cc += 64;  /* Convert to upper case */
1076
          c = (c << 4) + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
1077
#endif
1078
0
          }
1079
1080
0
#if defined COMPILE_PCRE8
1081
0
        if (c > (utf ? 0x10ffffU : 0xffU))
1082
#elif defined COMPILE_PCRE16
1083
        if (c > (utf ? 0x10ffffU : 0xffffU))
1084
#elif defined COMPILE_PCRE32
1085
        if (utf && c > 0x10ffffU)
1086
#endif
1087
0
          {
1088
0
          *errorcodeptr = ERR76;
1089
0
          }
1090
0
        else if (utf && c >= 0xd800 && c <= 0xdfff) *errorcodeptr = ERR73;
1091
0
        }
1092
0
      }
1093
1
    else
1094
1
      *errorcodeptr = ERR37;
1095
1
    break;
1096
1097
1
    case CHAR_U:
1098
    /* In JavaScript, \U is an uppercase U letter. */
1099
1
    if ((options & PCRE_JAVASCRIPT_COMPAT) == 0) *errorcodeptr = ERR37;
1100
1
    break;
1101
1102
    /* In a character class, \g is just a literal "g". Outside a character
1103
    class, \g must be followed by one of a number of specific things:
1104
1105
    (1) A number, either plain or braced. If positive, it is an absolute
1106
    backreference. If negative, it is a relative backreference. This is a Perl
1107
    5.10 feature.
1108
1109
    (2) Perl 5.10 also supports \g{name} as a reference to a named group. This
1110
    is part of Perl's movement towards a unified syntax for back references. As
1111
    this is synonymous with \k{name}, we fudge it up by pretending it really
1112
    was \k.
1113
1114
    (3) For Oniguruma compatibility we also support \g followed by a name or a
1115
    number either in angle brackets or in single quotes. However, these are
1116
    (possibly recursive) subroutine calls, _not_ backreferences. Just return
1117
    the ESC_g code (cf \k). */
1118
1119
4.94k
    case CHAR_g:
1120
4.94k
    if (isclass) break;
1121
4.74k
    if (ptr[1] == CHAR_LESS_THAN_SIGN || ptr[1] == CHAR_APOSTROPHE)
1122
1.65k
      {
1123
1.65k
      escape = ESC_g;
1124
1.65k
      break;
1125
1.65k
      }
1126
1127
    /* Handle the Perl-compatible cases */
1128
1129
3.08k
    if (ptr[1] == CHAR_LEFT_CURLY_BRACKET)
1130
994
      {
1131
994
      const pcre_uchar *p;
1132
1.78k
      for (p = ptr+2; *p != CHAR_NULL && *p != CHAR_RIGHT_CURLY_BRACKET; p++)
1133
1.56k
        if (*p != CHAR_MINUS && !IS_DIGIT(*p)) break;
1134
994
      if (*p != CHAR_NULL && *p != CHAR_RIGHT_CURLY_BRACKET)
1135
769
        {
1136
769
        escape = ESC_k;
1137
769
        break;
1138
769
        }
1139
225
      braced = TRUE;
1140
225
      ptr++;
1141
225
      }
1142
2.09k
    else braced = FALSE;
1143
1144
2.32k
    if (ptr[1] == CHAR_MINUS)
1145
1.16k
      {
1146
1.16k
      negated = TRUE;
1147
1.16k
      ptr++;
1148
1.16k
      }
1149
1.15k
    else negated = FALSE;
1150
1151
    /* The integer range is limited by the machine's int representation. */
1152
2.32k
    s = 0;
1153
2.32k
    overflow = FALSE;
1154
7.67k
    while (IS_DIGIT(ptr[1]))
1155
5.37k
      {
1156
5.37k
      if (s > INT_MAX / 10 - 1) /* Integer overflow */
1157
19
        {
1158
19
        overflow = TRUE;
1159
19
        break;
1160
19
        }
1161
5.35k
      s = s * 10 + (int)(*(++ptr) - CHAR_0);
1162
5.35k
      }
1163
2.32k
    if (overflow) /* Integer overflow */
1164
19
      {
1165
344
      while (IS_DIGIT(ptr[1]))
1166
325
        ptr++;
1167
19
      *errorcodeptr = ERR61;
1168
19
      break;
1169
19
      }
1170
1171
2.30k
    if (braced && *(++ptr) != CHAR_RIGHT_CURLY_BRACKET)
1172
12
      {
1173
12
      *errorcodeptr = ERR57;
1174
12
      break;
1175
12
      }
1176
1177
2.28k
    if (s == 0)
1178
24
      {
1179
24
      *errorcodeptr = ERR58;
1180
24
      break;
1181
24
      }
1182
1183
2.26k
    if (negated)
1184
1.15k
      {
1185
1.15k
      if (s > bracount)
1186
41
        {
1187
41
        *errorcodeptr = ERR15;
1188
41
        break;
1189
41
        }
1190
1.11k
      s = bracount - (s - 1);
1191
1.11k
      }
1192
1193
2.22k
    escape = -s;
1194
2.22k
    break;
1195
1196
    /* The handling of escape sequences consisting of a string of digits
1197
    starting with one that is not zero is not straightforward. Perl has changed
1198
    over the years. Nowadays \g{} for backreferences and \o{} for octal are
1199
    recommended to avoid the ambiguities in the old syntax.
1200
1201
    Outside a character class, the digits are read as a decimal number. If the
1202
    number is less than 8 (used to be 10), or if there are that many previous
1203
    extracting left brackets, then it is a back reference. Otherwise, up to
1204
    three octal digits are read to form an escaped byte. Thus \123 is likely to
1205
    be octal 123 (cf \0123, which is octal 012 followed by the literal 3). If
1206
    the octal value is greater than 377, the least significant 8 bits are
1207
    taken. \8 and \9 are treated as the literal characters 8 and 9.
1208
1209
    Inside a character class, \ followed by a digit is always either a literal
1210
    8 or 9 or an octal number. */
1211
1212
5.22k
    case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4: case CHAR_5:
1213
8.78k
    case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:
1214
1215
8.78k
    if (!isclass)
1216
7.11k
      {
1217
7.11k
      oldptr = ptr;
1218
      /* The integer range is limited by the machine's int representation. */
1219
7.11k
      s = (int)(c -CHAR_0);
1220
7.11k
      overflow = FALSE;
1221
9.98k
      while (IS_DIGIT(ptr[1]))
1222
2.87k
        {
1223
2.87k
        if (s > INT_MAX / 10 - 1) /* Integer overflow */
1224
8
          {
1225
8
          overflow = TRUE;
1226
8
          break;
1227
8
          }
1228
2.86k
        s = s * 10 + (int)(*(++ptr) - CHAR_0);
1229
2.86k
        }
1230
7.11k
      if (overflow) /* Integer overflow */
1231
8
        {
1232
202
        while (IS_DIGIT(ptr[1]))
1233
194
          ptr++;
1234
8
        *errorcodeptr = ERR61;
1235
8
        break;
1236
8
        }
1237
7.10k
      if (s < 8 || s <= bracount)  /* Check for back reference */
1238
5.59k
        {
1239
5.59k
        escape = -s;
1240
5.59k
        break;
1241
5.59k
        }
1242
1.51k
      ptr = oldptr;      /* Put the pointer back and fall through */
1243
1.51k
      }
1244
1245
    /* Handle a digit following \ when the number is not a back reference. If
1246
    the first digit is 8 or 9, Perl used to generate a binary zero byte and
1247
    then treat the digit as a following literal. At least by Perl 5.18 this
1248
    changed so as not to insert the binary zero. */
1249
1250
3.18k
    if ((c = *ptr) >= CHAR_8) break;
1251
1252
    /* Fall through with a digit less than 8 */
1253
1254
    /* \0 always starts an octal number, but we may drop through to here with a
1255
    larger first octal digit. The original code used just to take the least
1256
    significant 8 bits of octal numbers (I think this is what early Perls used
1257
    to do). Nowadays we allow for larger numbers in UTF-8 mode and 16-bit mode,
1258
    but no more than 3 octal digits. */
1259
1260
2.83k
    case CHAR_0:
1261
2.83k
    c -= CHAR_0;
1262
4.93k
    while(i++ < 2 && ptr[1] >= CHAR_0 && ptr[1] <= CHAR_7)
1263
2.09k
        c = c * 8 + *(++ptr) - CHAR_0;
1264
2.83k
#ifdef COMPILE_PCRE8
1265
2.83k
    if (!utf && c > 0xff) *errorcodeptr = ERR51;
1266
2.83k
#endif
1267
2.83k
    break;
1268
1269
    /* \o is a relatively new Perl feature, supporting a more general way of
1270
    specifying character codes in octal. The only supported form is \o{ddd}. */
1271
1272
319
    case CHAR_o:
1273
319
    if (ptr[1] != CHAR_LEFT_CURLY_BRACKET) *errorcodeptr = ERR81; else
1274
310
    if (ptr[2] == CHAR_RIGHT_CURLY_BRACKET) *errorcodeptr = ERR86; else
1275
309
      {
1276
309
      ptr += 2;
1277
309
      c = 0;
1278
309
      overflow = FALSE;
1279
1.19k
      while (*ptr >= CHAR_0 && *ptr <= CHAR_7)
1280
904
        {
1281
904
        register pcre_uint32 cc = *ptr++;
1282
904
        if (c == 0 && cc == CHAR_0) continue;     /* Leading zeroes */
1283
#ifdef COMPILE_PCRE32
1284
        if (c >= 0x20000000l) { overflow = TRUE; break; }
1285
#endif
1286
683
        c = (c << 3) + cc - CHAR_0 ;
1287
683
#if defined COMPILE_PCRE8
1288
683
        if (c > (utf ? 0x10ffffU : 0xffU)) { overflow = TRUE; break; }
1289
#elif defined COMPILE_PCRE16
1290
        if (c > (utf ? 0x10ffffU : 0xffffU)) { overflow = TRUE; break; }
1291
#elif defined COMPILE_PCRE32
1292
        if (utf && c > 0x10ffffU) { overflow = TRUE; break; }
1293
#endif
1294
683
        }
1295
309
      if (overflow)
1296
19
        {
1297
215
        while (*ptr >= CHAR_0 && *ptr <= CHAR_7) ptr++;
1298
19
        *errorcodeptr = ERR34;
1299
19
        }
1300
290
      else if (*ptr == CHAR_RIGHT_CURLY_BRACKET)
1301
268
        {
1302
268
        if (utf && c >= 0xd800 && c <= 0xdfff) *errorcodeptr = ERR73;
1303
268
        }
1304
22
      else *errorcodeptr = ERR80;
1305
309
      }
1306
319
    break;
1307
1308
    /* \x is complicated. In JavaScript, \x must be followed by two hexadecimal
1309
    numbers. Otherwise it is a lowercase x letter. */
1310
1311
1.09k
    case CHAR_x:
1312
1.09k
    if ((options & PCRE_JAVASCRIPT_COMPAT) != 0)
1313
0
      {
1314
0
      if (MAX_255(ptr[1]) && (digitab[ptr[1]] & ctype_xdigit) != 0
1315
0
        && MAX_255(ptr[2]) && (digitab[ptr[2]] & ctype_xdigit) != 0)
1316
0
        {
1317
0
        c = 0;
1318
0
        for (i = 0; i < 2; ++i)
1319
0
          {
1320
0
          register pcre_uint32 cc = *(++ptr);
1321
0
#ifndef EBCDIC  /* ASCII/UTF-8 coding */
1322
0
          if (cc >= CHAR_a) cc -= 32;               /* Convert to upper case */
1323
0
          c = (c << 4) + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
1324
#else           /* EBCDIC coding */
1325
          if (cc >= CHAR_a && cc <= CHAR_z) cc += 64;  /* Convert to upper case */
1326
          c = (c << 4) + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
1327
#endif
1328
0
          }
1329
0
        }
1330
0
      }    /* End JavaScript handling */
1331
1332
    /* Handle \x in Perl's style. \x{ddd} is a character number which can be
1333
    greater than 0xff in utf or non-8bit mode, but only if the ddd are hex
1334
    digits. If not, { used to be treated as a data character. However, Perl
1335
    seems to read hex digits up to the first non-such, and ignore the rest, so
1336
    that, for example \x{zz} matches a binary zero. This seems crazy, so PCRE
1337
    now gives an error. */
1338
1339
1.09k
    else
1340
1.09k
      {
1341
1.09k
      if (ptr[1] == CHAR_LEFT_CURLY_BRACKET)
1342
436
        {
1343
436
        ptr += 2;
1344
436
        if (*ptr == CHAR_RIGHT_CURLY_BRACKET)
1345
1
          {
1346
1
          *errorcodeptr = ERR86;
1347
1
          break;
1348
1
          }
1349
435
        c = 0;
1350
435
        overflow = FALSE;
1351
1.46k
        while (MAX_255(*ptr) && (digitab[*ptr] & ctype_xdigit) != 0)
1352
1.04k
          {
1353
1.04k
          register pcre_uint32 cc = *ptr++;
1354
1.04k
          if (c == 0 && cc == CHAR_0) continue;     /* Leading zeroes */
1355
1356
#ifdef COMPILE_PCRE32
1357
          if (c >= 0x10000000l) { overflow = TRUE; break; }
1358
#endif
1359
1360
842
#ifndef EBCDIC  /* ASCII/UTF-8 coding */
1361
842
          if (cc >= CHAR_a) cc -= 32;               /* Convert to upper case */
1362
842
          c = (c << 4) + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
1363
#else           /* EBCDIC coding */
1364
          if (cc >= CHAR_a && cc <= CHAR_z) cc += 64;  /* Convert to upper case */
1365
          c = (c << 4) + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
1366
#endif
1367
1368
842
#if defined COMPILE_PCRE8
1369
842
          if (c > (utf ? 0x10ffffU : 0xffU)) { overflow = TRUE; break; }
1370
#elif defined COMPILE_PCRE16
1371
          if (c > (utf ? 0x10ffffU : 0xffffU)) { overflow = TRUE; break; }
1372
#elif defined COMPILE_PCRE32
1373
          if (utf && c > 0x10ffffU) { overflow = TRUE; break; }
1374
#endif
1375
842
          }
1376
1377
435
        if (overflow)
1378
19
          {
1379
217
          while (MAX_255(*ptr) && (digitab[*ptr] & ctype_xdigit) != 0) ptr++;
1380
19
          *errorcodeptr = ERR34;
1381
19
          }
1382
1383
416
        else if (*ptr == CHAR_RIGHT_CURLY_BRACKET)
1384
405
          {
1385
405
          if (utf && c >= 0xd800 && c <= 0xdfff) *errorcodeptr = ERR73;
1386
405
          }
1387
1388
        /* If the sequence of hex digits does not end with '}', give an error.
1389
        We used just to recognize this construct and fall through to the normal
1390
        \x handling, but nowadays Perl gives an error, which seems much more
1391
        sensible, so we do too. */
1392
1393
11
        else *errorcodeptr = ERR79;
1394
435
        }   /* End of \x{} processing */
1395
1396
      /* Read a single-byte hex-defined char (up to two hex digits after \x) */
1397
1398
656
      else
1399
656
        {
1400
656
        c = 0;
1401
1.52k
        while (i++ < 2 && MAX_255(ptr[1]) && (digitab[ptr[1]] & ctype_xdigit) != 0)
1402
867
          {
1403
867
          pcre_uint32 cc;                          /* Some compilers don't like */
1404
867
          cc = *(++ptr);                           /* ++ in initializers */
1405
867
#ifndef EBCDIC  /* ASCII/UTF-8 coding */
1406
867
          if (cc >= CHAR_a) cc -= 32;              /* Convert to upper case */
1407
867
          c = c * 16 + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
1408
#else           /* EBCDIC coding */
1409
          if (cc <= CHAR_z) cc += 64;              /* Convert to upper case */
1410
          c = c * 16 + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
1411
#endif
1412
867
          }
1413
656
        }     /* End of \xdd handling */
1414
1.09k
      }       /* End of Perl-style \x handling */
1415
1.09k
    break;
1416
1417
    /* For \c, a following letter is upper-cased; then the 0x40 bit is flipped.
1418
    An error is given if the byte following \c is not an ASCII character. This
1419
    coding is ASCII-specific, but then the whole concept of \cx is
1420
    ASCII-specific. (However, an EBCDIC equivalent has now been added.) */
1421
1422
1.09k
    case CHAR_c:
1423
840
    c = *(++ptr);
1424
840
    if (c == CHAR_NULL)
1425
1
      {
1426
1
      *errorcodeptr = ERR2;
1427
1
      break;
1428
1
      }
1429
839
#ifndef EBCDIC    /* ASCII/UTF-8 coding */
1430
839
    if (c > 127)  /* Excludes all non-ASCII in either mode */
1431
5
      {
1432
5
      *errorcodeptr = ERR68;
1433
5
      break;
1434
5
      }
1435
834
    if (c >= CHAR_a && c <= CHAR_z) c -= 32;
1436
834
    c ^= 0x40;
1437
#else             /* EBCDIC coding */
1438
    if (c >= CHAR_a && c <= CHAR_z) c += 64;
1439
    if (c == CHAR_QUESTION_MARK)
1440
      c = ('\\' == 188 && '`' == 74)? 0x5f : 0xff;
1441
    else
1442
      {
1443
      for (i = 0; i < 32; i++)
1444
        {
1445
        if (c == ebcdic_escape_c[i]) break;
1446
        }
1447
      if (i < 32) c = i; else *errorcodeptr = ERR68;
1448
      }
1449
#endif
1450
834
    break;
1451
1452
    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
1453
    other alphanumeric following \ is an error if PCRE_EXTRA was set;
1454
    otherwise, for Perl compatibility, it is a literal. This code looks a bit
1455
    odd, but there used to be some cases other than the default, and there may
1456
    be again in future, so I haven't "optimized" it. */
1457
1458
786
    default:
1459
786
    if ((options & PCRE_EXTRA) != 0) switch(c)
1460
1
      {
1461
1
      default:
1462
1
      *errorcodeptr = ERR3;
1463
1
      break;
1464
1
      }
1465
786
    break;
1466
17.3k
    }
1467
17.3k
  }
1468
1469
/* Perl supports \N{name} for character names, as well as plain \N for "not
1470
newline". PCRE does not support \N{name}. However, it does support
1471
quantification such as \N{2,3}. */
1472
1473
846k
if (escape == ESC_N && ptr[1] == CHAR_LEFT_CURLY_BRACKET &&
1474
846k
     !is_counted_repeat(ptr+2))
1475
1
  *errorcodeptr = ERR37;
1476
1477
/* If PCRE_UCP is set, we change the values for \d etc. */
1478
1479
846k
if ((options & PCRE_UCP) != 0 && escape >= ESC_D && escape <= ESC_w)
1480
0
  escape += (ESC_DU - ESC_D);
1481
1482
/* Set the pointer to the final character before returning. */
1483
1484
846k
*ptrptr = ptr;
1485
846k
*chptr = c;
1486
846k
return escape;
1487
846k
}
1488
1489
1490
1491
#ifdef SUPPORT_UCP
1492
/*************************************************
1493
*               Handle \P and \p                 *
1494
*************************************************/
1495
1496
/* This function is called after \P or \p has been encountered, provided that
1497
PCRE is compiled with support for Unicode properties. On entry, ptrptr is
1498
pointing at the P or p. On exit, it is pointing at the final character of the
1499
escape sequence.
1500
1501
Argument:
1502
  ptrptr         points to the pattern position pointer
1503
  negptr         points to a boolean that is set TRUE for negation else FALSE
1504
  ptypeptr       points to an unsigned int that is set to the type value
1505
  pdataptr       points to an unsigned int that is set to the detailed property value
1506
  errorcodeptr   points to the error code variable
1507
1508
Returns:         TRUE if the type value was found, or FALSE for an invalid type
1509
*/
1510
1511
static BOOL
1512
get_ucp(const pcre_uchar **ptrptr, BOOL *negptr, unsigned int *ptypeptr,
1513
  unsigned int *pdataptr, int *errorcodeptr)
1514
{
1515
pcre_uchar c;
1516
int i, bot, top;
1517
const pcre_uchar *ptr = *ptrptr;
1518
pcre_uchar name[32];
1519
1520
c = *(++ptr);
1521
if (c == CHAR_NULL) goto ERROR_RETURN;
1522
1523
*negptr = FALSE;
1524
1525
/* \P or \p can be followed by a name in {}, optionally preceded by ^ for
1526
negation. */
1527
1528
if (c == CHAR_LEFT_CURLY_BRACKET)
1529
  {
1530
  if (ptr[1] == CHAR_CIRCUMFLEX_ACCENT)
1531
    {
1532
    *negptr = TRUE;
1533
    ptr++;
1534
    }
1535
  for (i = 0; i < (int)(sizeof(name) / sizeof(pcre_uchar)) - 1; i++)
1536
    {
1537
    c = *(++ptr);
1538
    if (c == CHAR_NULL) goto ERROR_RETURN;
1539
    if (c == CHAR_RIGHT_CURLY_BRACKET) break;
1540
    name[i] = c;
1541
    }
1542
  if (c != CHAR_RIGHT_CURLY_BRACKET) goto ERROR_RETURN;
1543
  name[i] = 0;
1544
  }
1545
1546
/* Otherwise there is just one following character */
1547
1548
else
1549
  {
1550
  name[0] = c;
1551
  name[1] = 0;
1552
  }
1553
1554
*ptrptr = ptr;
1555
1556
/* Search for a recognized property name using binary chop */
1557
1558
bot = 0;
1559
top = PRIV(utt_size);
1560
1561
while (bot < top)
1562
  {
1563
  int r;
1564
  i = (bot + top) >> 1;
1565
  r = STRCMP_UC_C8(name, PRIV(utt_names) + PRIV(utt)[i].name_offset);
1566
  if (r == 0)
1567
    {
1568
    *ptypeptr = PRIV(utt)[i].type;
1569
    *pdataptr = PRIV(utt)[i].value;
1570
    return TRUE;
1571
    }
1572
  if (r > 0) bot = i + 1; else top = i;
1573
  }
1574
1575
*errorcodeptr = ERR47;
1576
*ptrptr = ptr;
1577
return FALSE;
1578
1579
ERROR_RETURN:
1580
*errorcodeptr = ERR46;
1581
*ptrptr = ptr;
1582
return FALSE;
1583
}
1584
#endif
1585
1586
1587
1588
/*************************************************
1589
*         Read repeat counts                     *
1590
*************************************************/
1591
1592
/* Read an item of the form {n,m} and return the values. This is called only
1593
after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
1594
so the syntax is guaranteed to be correct, but we need to check the values.
1595
1596
Arguments:
1597
  p              pointer to first char after '{'
1598
  minp           pointer to int for min
1599
  maxp           pointer to int for max
1600
                 returned as -1 if no max
1601
  errorcodeptr   points to error code variable
1602
1603
Returns:         pointer to '}' on success;
1604
                 current ptr on error, with errorcodeptr set non-zero
1605
*/
1606
1607
static const pcre_uchar *
1608
read_repeat_counts(const pcre_uchar *p, int *minp, int *maxp, int *errorcodeptr)
1609
18.3k
{
1610
18.3k
int min = 0;
1611
18.3k
int max = -1;
1612
1613
45.7k
while (IS_DIGIT(*p))
1614
27.4k
  {
1615
27.4k
  min = min * 10 + (int)(*p++ - CHAR_0);
1616
27.4k
  if (min > 65535)
1617
1
    {
1618
1
    *errorcodeptr = ERR5;
1619
1
    return p;
1620
1
    }
1621
27.4k
  }
1622
1623
18.3k
if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
1624
6.57k
  {
1625
6.57k
  if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
1626
5.48k
    {
1627
5.48k
    max = 0;
1628
15.2k
    while(IS_DIGIT(*p))
1629
9.75k
      {
1630
9.75k
      max = max * 10 + (int)(*p++ - CHAR_0);
1631
9.75k
      if (max > 65535)
1632
1
        {
1633
1
        *errorcodeptr = ERR5;
1634
1
        return p;
1635
1
        }
1636
9.75k
      }
1637
5.48k
    if (max < min)
1638
1
      {
1639
1
      *errorcodeptr = ERR4;
1640
1
      return p;
1641
1
      }
1642
5.48k
    }
1643
6.57k
  }
1644
1645
18.3k
*minp = min;
1646
18.3k
*maxp = max;
1647
18.3k
return p;
1648
18.3k
}
1649
1650
1651
1652
/*************************************************
1653
*      Find first significant op code            *
1654
*************************************************/
1655
1656
/* This is called by several functions that scan a compiled expression looking
1657
for a fixed first character, or an anchoring op code etc. It skips over things
1658
that do not influence this. For some calls, it makes sense to skip negative
1659
forward and all backward assertions, and also the \b assertion; for others it
1660
does not.
1661
1662
Arguments:
1663
  code         pointer to the start of the group
1664
  skipassert   TRUE if certain assertions are to be skipped
1665
1666
Returns:       pointer to the first significant opcode
1667
*/
1668
1669
static const pcre_uchar*
1670
first_significant_code(const pcre_uchar *code, BOOL skipassert)
1671
590k
{
1672
590k
for (;;)
1673
600k
  {
1674
600k
  switch ((int)*code)
1675
600k
    {
1676
908
    case OP_ASSERT_NOT:
1677
2.44k
    case OP_ASSERTBACK:
1678
5.14k
    case OP_ASSERTBACK_NOT:
1679
5.14k
    if (!skipassert) return code;
1680
5.92k
    do code += GET(code, 1); while (*code == OP_ALT);
1681
4.29k
    code += PRIV(OP_lengths)[*code];
1682
4.29k
    break;
1683
1684
465
    case OP_WORD_BOUNDARY:
1685
1.05k
    case OP_NOT_WORD_BOUNDARY:
1686
1.05k
    if (!skipassert) return code;
1687
    /* Fall through */
1688
1689
2.22k
    case OP_CALLOUT:
1690
4.39k
    case OP_CREF:
1691
4.67k
    case OP_DNCREF:
1692
5.83k
    case OP_RREF:
1693
6.17k
    case OP_DNRREF:
1694
6.24k
    case OP_DEF:
1695
6.24k
    code += PRIV(OP_lengths)[*code];
1696
6.24k
    break;
1697
1698
589k
    default:
1699
589k
    return code;
1700
600k
    }
1701
600k
  }
1702
/* Control never reaches here */
1703
590k
}
1704
1705
1706
1707
/*************************************************
1708
*        Find the fixed length of a branch       *
1709
*************************************************/
1710
1711
/* Scan a branch and compute the fixed length of subject that will match it,
1712
if the length is fixed. This is needed for dealing with backward assertions.
1713
In UTF8 mode, the result is in characters rather than bytes. The branch is
1714
temporarily terminated with OP_END when this function is called.
1715
1716
This function is called when a backward assertion is encountered, so that if it
1717
fails, the error message can point to the correct place in the pattern.
1718
However, we cannot do this when the assertion contains subroutine calls,
1719
because they can be forward references. We solve this by remembering this case
1720
and doing the check at the end; a flag specifies which mode we are running in.
1721
1722
Arguments:
1723
  code     points to the start of the pattern (the bracket)
1724
  utf      TRUE in UTF-8 / UTF-16 / UTF-32 mode
1725
  atend    TRUE if called when the pattern is complete
1726
  cd       the "compile data" structure
1727
  recurses    chain of recurse_check to catch mutual recursion
1728
1729
Returns:   the fixed length,
1730
             or -1 if there is no fixed length,
1731
             or -2 if \C was encountered (in UTF-8 mode only)
1732
             or -3 if an OP_RECURSE item was encountered and atend is FALSE
1733
             or -4 if an unknown opcode was encountered (internal error)
1734
*/
1735
1736
static int
1737
find_fixedlength(pcre_uchar *code, BOOL utf, BOOL atend, compile_data *cd,
1738
  recurse_check *recurses)
1739
44.2M
{
1740
44.2M
int length = -1;
1741
44.2M
recurse_check this_recurse;
1742
44.2M
register int branchlength = 0;
1743
44.2M
register pcre_uchar *cc = code + 1 + LINK_SIZE;
1744
1745
/* Scan along the opcodes for this branch. If we get to the end of the
1746
branch, check the length against that of the other branches. */
1747
1748
44.2M
for (;;)
1749
642M
  {
1750
642M
  int d;
1751
642M
  pcre_uchar *ce, *cs;
1752
642M
  register pcre_uchar op = *cc;
1753
1754
642M
  switch (op)
1755
642M
    {
1756
    /* We only need to continue for OP_CBRA (normal capturing bracket) and
1757
    OP_BRA (normal non-capturing bracket) because the other variants of these
1758
    opcodes are all concerned with unlimited repeated groups, which of course
1759
    are not of fixed length. */
1760
1761
43.6M
    case OP_CBRA:
1762
43.6M
    case OP_BRA:
1763
43.9M
    case OP_ONCE:
1764
43.9M
    case OP_ONCE_NC:
1765
43.9M
    case OP_COND:
1766
43.9M
    d = find_fixedlength(cc + ((op == OP_CBRA)? IMM2_SIZE : 0), utf, atend, cd,
1767
43.9M
      recurses);
1768
43.9M
    if (d < 0) return d;
1769
43.9M
    branchlength += d;
1770
43.9M
    do cc += GET(cc, 1); while (*cc == OP_ALT);
1771
43.9M
    cc += 1 + LINK_SIZE;
1772
43.9M
    break;
1773
1774
    /* Reached end of a branch; if it's a ket it is the end of a nested call.
1775
    If it's ALT it is an alternation in a nested call. An ACCEPT is effectively
1776
    an ALT. If it is END it's the end of the outer call. All can be handled by
1777
    the same code. Note that we must not include the OP_KETRxxx opcodes here,
1778
    because they all imply an unlimited repeat. */
1779
1780
1.61k
    case OP_ALT:
1781
44.1M
    case OP_KET:
1782
44.2M
    case OP_END:
1783
44.2M
    case OP_ACCEPT:
1784
44.2M
    case OP_ASSERT_ACCEPT:
1785
44.2M
    if (length < 0) length = branchlength;
1786
1.58k
      else if (length != branchlength) return -1;
1787
44.2M
    if (*cc != OP_ALT) return length;
1788
1.60k
    cc += 1 + LINK_SIZE;
1789
1.60k
    branchlength = 0;
1790
1.60k
    break;
1791
1792
    /* A true recursion implies not fixed length, but a subroutine call may
1793
    be OK. If the subroutine is a forward reference, we can't deal with
1794
    it until the end of the pattern, so return -3. */
1795
1796
281k
    case OP_RECURSE:
1797
281k
    if (!atend) return -3;
1798
280k
    cs = ce = (pcre_uchar *)cd->start_code + GET(cc, 1);  /* Start subpattern */
1799
281k
    do ce += GET(ce, 1); while (*ce == OP_ALT);           /* End subpattern */
1800
280k
    if (cc > cs && cc < ce) return -1;                    /* Recursion */
1801
280k
    else   /* Check for mutual recursion */
1802
280k
      {
1803
280k
      recurse_check *r = recurses;
1804
309k
      for (r = recurses; r != NULL; r = r->prev) if (r->group == cs) break;
1805
280k
      if (r != NULL) return -1;   /* Mutual recursion */
1806
280k
      }
1807
280k
    this_recurse.prev = recurses;
1808
280k
    this_recurse.group = cs;
1809
280k
    d = find_fixedlength(cs + IMM2_SIZE, utf, atend, cd, &this_recurse);
1810
280k
    if (d < 0) return d;
1811
280k
    branchlength += d;
1812
280k
    cc += 1 + LINK_SIZE;
1813
280k
    break;
1814
1815
    /* Skip over assertive subpatterns */
1816
1817
403
    case OP_ASSERT:
1818
2.89k
    case OP_ASSERT_NOT:
1819
4.01k
    case OP_ASSERTBACK:
1820
7.69k
    case OP_ASSERTBACK_NOT:
1821
8.23k
    do cc += GET(cc, 1); while (*cc == OP_ALT);
1822
7.69k
    cc += 1 + LINK_SIZE;
1823
7.69k
    break;
1824
1825
    /* Skip over things that don't match chars */
1826
1827
358
    case OP_MARK:
1828
1.50k
    case OP_PRUNE_ARG:
1829
2.06k
    case OP_SKIP_ARG:
1830
98.7k
    case OP_THEN_ARG:
1831
98.7k
    cc += cc[1] + PRIV(OP_lengths)[*cc];
1832
98.7k
    break;
1833
1834
531
    case OP_CALLOUT:
1835
61.7k
    case OP_CIRC:
1836
62.9k
    case OP_CIRCM:
1837
65.5k
    case OP_CLOSE:
1838
66.0k
    case OP_COMMIT:
1839
66.3k
    case OP_CREF:
1840
66.6k
    case OP_DEF:
1841
67.0k
    case OP_DNCREF:
1842
67.4k
    case OP_DNRREF:
1843
1.94M
    case OP_DOLL:
1844
1.94M
    case OP_DOLLM:
1845
1.94M
    case OP_EOD:
1846
1.94M
    case OP_EODN:
1847
1.95M
    case OP_FAIL:
1848
1.95M
    case OP_NOT_WORD_BOUNDARY:
1849
1.95M
    case OP_PRUNE:
1850
1.95M
    case OP_REVERSE:
1851
1.95M
    case OP_RREF:
1852
1.96M
    case OP_SET_SOM:
1853
1.96M
    case OP_SKIP:
1854
1.96M
    case OP_SOD:
1855
1.96M
    case OP_SOM:
1856
1.97M
    case OP_THEN:
1857
1.97M
    case OP_WORD_BOUNDARY:
1858
1.97M
    cc += PRIV(OP_lengths)[*cc];
1859
1.97M
    break;
1860
1861
    /* Handle literal characters */
1862
1863
517M
    case OP_CHAR:
1864
517M
    case OP_CHARI:
1865
517M
    case OP_NOT:
1866
517M
    case OP_NOTI:
1867
517M
    branchlength++;
1868
517M
    cc += 2;
1869
#ifdef SUPPORT_UTF
1870
    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);
1871
#endif
1872
517M
    break;
1873
1874
    /* Handle exact repetitions. The count is already in characters, but we
1875
    need to skip over a multibyte character in UTF8 mode.  */
1876
1877
31.7M
    case OP_EXACT:
1878
31.7M
    case OP_EXACTI:
1879
31.7M
    case OP_NOTEXACT:
1880
31.7M
    case OP_NOTEXACTI:
1881
31.7M
    branchlength += (int)GET2(cc,1);
1882
31.7M
    cc += 2 + IMM2_SIZE;
1883
#ifdef SUPPORT_UTF
1884
    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);
1885
#endif
1886
31.7M
    break;
1887
1888
5.36k
    case OP_TYPEEXACT:
1889
5.36k
    branchlength += GET2(cc,1);
1890
5.36k
    if (cc[1 + IMM2_SIZE] == OP_PROP || cc[1 + IMM2_SIZE] == OP_NOTPROP)
1891
24
      cc += 2;
1892
5.36k
    cc += 1 + IMM2_SIZE + 1;
1893
5.36k
    break;
1894
1895
    /* Handle single-char matchers */
1896
1897
241
    case OP_PROP:
1898
320
    case OP_NOTPROP:
1899
320
    cc += 2;
1900
    /* Fall through */
1901
1902
3.04k
    case OP_HSPACE:
1903
3.44k
    case OP_VSPACE:
1904
3.79k
    case OP_NOT_HSPACE:
1905
4.85k
    case OP_NOT_VSPACE:
1906
5.18k
    case OP_NOT_DIGIT:
1907
5.47k
    case OP_DIGIT:
1908
7.40k
    case OP_NOT_WHITESPACE:
1909
8.28k
    case OP_WHITESPACE:
1910
8.67k
    case OP_NOT_WORDCHAR:
1911
9.16k
    case OP_WORDCHAR:
1912
3.10M
    case OP_ANY:
1913
3.10M
    case OP_ALLANY:
1914
3.10M
    branchlength++;
1915
3.10M
    cc++;
1916
3.10M
    break;
1917
1918
    /* The single-byte matcher isn't allowed. This only happens in UTF-8 mode;
1919
    otherwise \C is coded as OP_ALLANY. */
1920
1921
1
    case OP_ANYBYTE:
1922
1
    return -2;
1923
1924
    /* Check a class for variable quantification */
1925
1926
5.80k
    case OP_CLASS:
1927
12.1k
    case OP_NCLASS:
1928
#if defined SUPPORT_UTF || defined COMPILE_PCRE16 || defined COMPILE_PCRE32
1929
    case OP_XCLASS:
1930
    /* The original code caused an unsigned overflow in 64 bit systems,
1931
    so now we use a conditional statement. */
1932
    if (op == OP_XCLASS)
1933
      cc += GET(cc, 1);
1934
    else
1935
      cc += PRIV(OP_lengths)[OP_CLASS];
1936
#else
1937
12.1k
    cc += PRIV(OP_lengths)[OP_CLASS];
1938
12.1k
#endif
1939
1940
12.1k
    switch (*cc)
1941
12.1k
      {
1942
1
      case OP_CRSTAR:
1943
3
      case OP_CRMINSTAR:
1944
4
      case OP_CRPLUS:
1945
6
      case OP_CRMINPLUS:
1946
7
      case OP_CRQUERY:
1947
8
      case OP_CRMINQUERY:
1948
9
      case OP_CRPOSSTAR:
1949
10
      case OP_CRPOSPLUS:
1950
11
      case OP_CRPOSQUERY:
1951
11
      return -1;
1952
1953
3.27k
      case OP_CRRANGE:
1954
3.61k
      case OP_CRMINRANGE:
1955
5.17k
      case OP_CRPOSRANGE:
1956
5.17k
      if (GET2(cc,1) != GET2(cc,1+IMM2_SIZE)) return -1;
1957
5.17k
      branchlength += (int)GET2(cc,1);
1958
5.17k
      cc += 1 + 2 * IMM2_SIZE;
1959
5.17k
      break;
1960
1961
7.00k
      default:
1962
7.00k
      branchlength++;
1963
12.1k
      }
1964
12.1k
    break;
1965
1966
    /* Anything else is variable length */
1967
1968
12.1k
    case OP_ANYNL:
1969
2
    case OP_BRAMINZERO:
1970
3
    case OP_BRAPOS:
1971
4
    case OP_BRAPOSZERO:
1972
21
    case OP_BRAZERO:
1973
24
    case OP_CBRAPOS:
1974
25
    case OP_EXTUNI:
1975
42
    case OP_KETRMAX:
1976
44
    case OP_KETRMIN:
1977
46
    case OP_KETRPOS:
1978
47
    case OP_MINPLUS:
1979
49
    case OP_MINPLUSI:
1980
50
    case OP_MINQUERY:
1981
51
    case OP_MINQUERYI:
1982
52
    case OP_MINSTAR:
1983
53
    case OP_MINSTARI:
1984
54
    case OP_MINUPTO:
1985
55
    case OP_MINUPTOI:
1986
56
    case OP_NOTMINPLUS:
1987
57
    case OP_NOTMINPLUSI:
1988
58
    case OP_NOTMINQUERY:
1989
59
    case OP_NOTMINQUERYI:
1990
61
    case OP_NOTMINSTAR:
1991
62
    case OP_NOTMINSTARI:
1992
63
    case OP_NOTMINUPTO:
1993
64
    case OP_NOTMINUPTOI:
1994
65
    case OP_NOTPLUS:
1995
66
    case OP_NOTPLUSI:
1996
67
    case OP_NOTPOSPLUS:
1997
68
    case OP_NOTPOSPLUSI:
1998
69
    case OP_NOTPOSQUERY:
1999
70
    case OP_NOTPOSQUERYI:
2000
71
    case OP_NOTPOSSTAR:
2001
72
    case OP_NOTPOSSTARI:
2002
73
    case OP_NOTPOSUPTO:
2003
74
    case OP_NOTPOSUPTOI:
2004
75
    case OP_NOTQUERY:
2005
76
    case OP_NOTQUERYI:
2006
77
    case OP_NOTSTAR:
2007
79
    case OP_NOTSTARI:
2008
80
    case OP_NOTUPTO:
2009
81
    case OP_NOTUPTOI:
2010
91
    case OP_PLUS:
2011
95
    case OP_PLUSI:
2012
97
    case OP_POSPLUS:
2013
98
    case OP_POSPLUSI:
2014
107
    case OP_POSQUERY:
2015
108
    case OP_POSQUERYI:
2016
109
    case OP_POSSTAR:
2017
110
    case OP_POSSTARI:
2018
111
    case OP_POSUPTO:
2019
112
    case OP_POSUPTOI:
2020
121
    case OP_QUERY:
2021
124
    case OP_QUERYI:
2022
135
    case OP_REF:
2023
136
    case OP_REFI:
2024
138
    case OP_DNREF:
2025
139
    case OP_DNREFI:
2026
140
    case OP_SBRA:
2027
144
    case OP_SBRAPOS:
2028
146
    case OP_SCBRA:
2029
147
    case OP_SCBRAPOS:
2030
150
    case OP_SCOND:
2031
154
    case OP_SKIPZERO:
2032
158
    case OP_STAR:
2033
162
    case OP_STARI:
2034
163
    case OP_TYPEMINPLUS:
2035
164
    case OP_TYPEMINQUERY:
2036
167
    case OP_TYPEMINSTAR:
2037
168
    case OP_TYPEMINUPTO:
2038
169
    case OP_TYPEPLUS:
2039
170
    case OP_TYPEPOSPLUS:
2040
172
    case OP_TYPEPOSQUERY:
2041
174
    case OP_TYPEPOSSTAR:
2042
175
    case OP_TYPEPOSUPTO:
2043
178
    case OP_TYPEQUERY:
2044
182
    case OP_TYPESTAR:
2045
184
    case OP_TYPEUPTO:
2046
187
    case OP_UPTO:
2047
188
    case OP_UPTOI:
2048
188
    return -1;
2049
2050
    /* Catch unrecognized opcodes so that when new ones are added they
2051
    are not forgotten, as has happened in the past. */
2052
2053
0
    default:
2054
0
    return -4;
2055
642M
    }
2056
642M
  }
2057
/* Control never gets here */
2058
44.2M
}
2059
2060
2061
2062
/*************************************************
2063
*    Scan compiled regex for specific bracket    *
2064
*************************************************/
2065
2066
/* This little function scans through a compiled pattern until it finds a
2067
capturing bracket with the given number, or, if the number is negative, an
2068
instance of OP_REVERSE for a lookbehind. The function is global in the C sense
2069
so that it can be called from pcre_study() when finding the minimum matching
2070
length.
2071
2072
Arguments:
2073
  code        points to start of expression
2074
  utf         TRUE in UTF-8 / UTF-16 / UTF-32 mode
2075
  number      the required bracket number or negative to find a lookbehind
2076
2077
Returns:      pointer to the opcode for the bracket, or NULL if not found
2078
*/
2079
2080
const pcre_uchar *
2081
PRIV(find_bracket)(const pcre_uchar *code, BOOL utf, int number)
2082
8.37k
{
2083
8.37k
for (;;)
2084
3.94M
  {
2085
3.94M
  register pcre_uchar c = *code;
2086
2087
3.94M
  if (c == OP_END) return NULL;
2088
2089
  /* XCLASS is used for classes that cannot be represented just by a bit
2090
  map. This includes negated single high-valued characters. The length in
2091
  the table is zero; the actual length is stored in the compiled code. */
2092
2093
3.94M
  if (c == OP_XCLASS) code += GET(code, 1);
2094
2095
  /* Handle recursion */
2096
2097
3.94M
  else if (c == OP_REVERSE)
2098
8.55k
    {
2099
8.55k
    if (number < 0) return (pcre_uchar *)code;
2100
5.91k
    code += PRIV(OP_lengths)[c];
2101
5.91k
    }
2102
2103
  /* Handle capturing bracket */
2104
2105
3.93M
  else if (c == OP_CBRA || c == OP_SCBRA ||
2106
3.93M
           c == OP_CBRAPOS || c == OP_SCBRAPOS)
2107
174k
    {
2108
174k
    int n = (int)GET2(code, 1+LINK_SIZE);
2109
174k
    if (n == number) return (pcre_uchar *)code;
2110
170k
    code += PRIV(OP_lengths)[c];
2111
170k
    }
2112
2113
  /* Otherwise, we can get the item's length from the table, except that for
2114
  repeated character types, we have to test for \p and \P, which have an extra
2115
  two bytes of parameters, and for MARK/PRUNE/SKIP/THEN with an argument, we
2116
  must add in its length. */
2117
2118
3.75M
  else
2119
3.75M
    {
2120
3.75M
    switch(c)
2121
3.75M
      {
2122
5.08k
      case OP_TYPESTAR:
2123
5.59k
      case OP_TYPEMINSTAR:
2124
8.52k
      case OP_TYPEPLUS:
2125
9.30k
      case OP_TYPEMINPLUS:
2126
12.5k
      case OP_TYPEQUERY:
2127
14.0k
      case OP_TYPEMINQUERY:
2128
14.8k
      case OP_TYPEPOSSTAR:
2129
15.1k
      case OP_TYPEPOSPLUS:
2130
15.3k
      case OP_TYPEPOSQUERY:
2131
15.3k
      if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
2132
15.3k
      break;
2133
2134
669
      case OP_TYPEUPTO:
2135
1.26k
      case OP_TYPEMINUPTO:
2136
1.80k
      case OP_TYPEEXACT:
2137
2.10k
      case OP_TYPEPOSUPTO:
2138
2.10k
      if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)
2139
0
        code += 2;
2140
2.10k
      break;
2141
2142
359
      case OP_MARK:
2143
707
      case OP_PRUNE_ARG:
2144
1.88k
      case OP_SKIP_ARG:
2145
2.23k
      case OP_THEN_ARG:
2146
2.23k
      code += code[1];
2147
2.23k
      break;
2148
3.75M
      }
2149
2150
    /* Add in the fixed length from the table */
2151
2152
3.75M
    code += PRIV(OP_lengths)[c];
2153
2154
  /* In UTF-8 mode, opcodes that are followed by a character may be followed by
2155
  a multi-byte character. The length in the table is a minimum, so we have to
2156
  arrange to skip the extra bytes. */
2157
2158
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2159
    if (utf) switch(c)
2160
      {
2161
      case OP_CHAR:
2162
      case OP_CHARI:
2163
      case OP_NOT:
2164
      case OP_NOTI:
2165
      case OP_EXACT:
2166
      case OP_EXACTI:
2167
      case OP_NOTEXACT:
2168
      case OP_NOTEXACTI:
2169
      case OP_UPTO:
2170
      case OP_UPTOI:
2171
      case OP_NOTUPTO:
2172
      case OP_NOTUPTOI:
2173
      case OP_MINUPTO:
2174
      case OP_MINUPTOI:
2175
      case OP_NOTMINUPTO:
2176
      case OP_NOTMINUPTOI:
2177
      case OP_POSUPTO:
2178
      case OP_POSUPTOI:
2179
      case OP_NOTPOSUPTO:
2180
      case OP_NOTPOSUPTOI:
2181
      case OP_STAR:
2182
      case OP_STARI:
2183
      case OP_NOTSTAR:
2184
      case OP_NOTSTARI:
2185
      case OP_MINSTAR:
2186
      case OP_MINSTARI:
2187
      case OP_NOTMINSTAR:
2188
      case OP_NOTMINSTARI:
2189
      case OP_POSSTAR:
2190
      case OP_POSSTARI:
2191
      case OP_NOTPOSSTAR:
2192
      case OP_NOTPOSSTARI:
2193
      case OP_PLUS:
2194
      case OP_PLUSI:
2195
      case OP_NOTPLUS:
2196
      case OP_NOTPLUSI:
2197
      case OP_MINPLUS:
2198
      case OP_MINPLUSI:
2199
      case OP_NOTMINPLUS:
2200
      case OP_NOTMINPLUSI:
2201
      case OP_POSPLUS:
2202
      case OP_POSPLUSI:
2203
      case OP_NOTPOSPLUS:
2204
      case OP_NOTPOSPLUSI:
2205
      case OP_QUERY:
2206
      case OP_QUERYI:
2207
      case OP_NOTQUERY:
2208
      case OP_NOTQUERYI:
2209
      case OP_MINQUERY:
2210
      case OP_MINQUERYI:
2211
      case OP_NOTMINQUERY:
2212
      case OP_NOTMINQUERYI:
2213
      case OP_POSQUERY:
2214
      case OP_POSQUERYI:
2215
      case OP_NOTPOSQUERY:
2216
      case OP_NOTPOSQUERYI:
2217
      if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);
2218
      break;
2219
      }
2220
#else
2221
3.75M
    (void)(utf);  /* Keep compiler happy by referencing function argument */
2222
3.75M
#endif
2223
3.75M
    }
2224
3.94M
  }
2225
8.37k
}
2226
2227
2228
2229
/*************************************************
2230
*   Scan compiled regex for recursion reference  *
2231
*************************************************/
2232
2233
/* This little function scans through a compiled pattern until it finds an
2234
instance of OP_RECURSE.
2235
2236
Arguments:
2237
  code        points to start of expression
2238
  utf         TRUE in UTF-8 / UTF-16 / UTF-32 mode
2239
2240
Returns:      pointer to the opcode for OP_RECURSE, or NULL if not found
2241
*/
2242
2243
static const pcre_uchar *
2244
find_recurse(const pcre_uchar *code, BOOL utf)
2245
55.3k
{
2246
55.3k
for (;;)
2247
1.59M
  {
2248
1.59M
  register pcre_uchar c = *code;
2249
1.59M
  if (c == OP_END) return NULL;
2250
1.57M
  if (c == OP_RECURSE) return code;
2251
2252
  /* XCLASS is used for classes that cannot be represented just by a bit
2253
  map. This includes negated single high-valued characters. The length in
2254
  the table is zero; the actual length is stored in the compiled code. */
2255
2256
1.53M
  if (c == OP_XCLASS) code += GET(code, 1);
2257
2258
  /* Otherwise, we can get the item's length from the table, except that for
2259
  repeated character types, we have to test for \p and \P, which have an extra
2260
  two bytes of parameters, and for MARK/PRUNE/SKIP/THEN with an argument, we
2261
  must add in its length. */
2262
2263
1.53M
  else
2264
1.53M
    {
2265
1.53M
    switch(c)
2266
1.53M
      {
2267
2.89k
      case OP_TYPESTAR:
2268
4.30k
      case OP_TYPEMINSTAR:
2269
8.56k
      case OP_TYPEPLUS:
2270
9.05k
      case OP_TYPEMINPLUS:
2271
11.3k
      case OP_TYPEQUERY:
2272
12.6k
      case OP_TYPEMINQUERY:
2273
13.0k
      case OP_TYPEPOSSTAR:
2274
13.4k
      case OP_TYPEPOSPLUS:
2275
14.5k
      case OP_TYPEPOSQUERY:
2276
14.5k
      if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
2277
14.5k
      break;
2278
2279
353
      case OP_TYPEPOSUPTO:
2280
644
      case OP_TYPEUPTO:
2281
898
      case OP_TYPEMINUPTO:
2282
1.57k
      case OP_TYPEEXACT:
2283
1.57k
      if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)
2284
0
        code += 2;
2285
1.57k
      break;
2286
2287
4.55k
      case OP_MARK:
2288
5.50k
      case OP_PRUNE_ARG:
2289
6.97k
      case OP_SKIP_ARG:
2290
7.55k
      case OP_THEN_ARG:
2291
7.55k
      code += code[1];
2292
7.55k
      break;
2293
1.53M
      }
2294
2295
    /* Add in the fixed length from the table */
2296
2297
1.53M
    code += PRIV(OP_lengths)[c];
2298
2299
    /* In UTF-8 mode, opcodes that are followed by a character may be followed
2300
    by a multi-byte character. The length in the table is a minimum, so we have
2301
    to arrange to skip the extra bytes. */
2302
2303
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2304
    if (utf) switch(c)
2305
      {
2306
      case OP_CHAR:
2307
      case OP_CHARI:
2308
      case OP_NOT:
2309
      case OP_NOTI:
2310
      case OP_EXACT:
2311
      case OP_EXACTI:
2312
      case OP_NOTEXACT:
2313
      case OP_NOTEXACTI:
2314
      case OP_UPTO:
2315
      case OP_UPTOI:
2316
      case OP_NOTUPTO:
2317
      case OP_NOTUPTOI:
2318
      case OP_MINUPTO:
2319
      case OP_MINUPTOI:
2320
      case OP_NOTMINUPTO:
2321
      case OP_NOTMINUPTOI:
2322
      case OP_POSUPTO:
2323
      case OP_POSUPTOI:
2324
      case OP_NOTPOSUPTO:
2325
      case OP_NOTPOSUPTOI:
2326
      case OP_STAR:
2327
      case OP_STARI:
2328
      case OP_NOTSTAR:
2329
      case OP_NOTSTARI:
2330
      case OP_MINSTAR:
2331
      case OP_MINSTARI:
2332
      case OP_NOTMINSTAR:
2333
      case OP_NOTMINSTARI:
2334
      case OP_POSSTAR:
2335
      case OP_POSSTARI:
2336
      case OP_NOTPOSSTAR:
2337
      case OP_NOTPOSSTARI:
2338
      case OP_PLUS:
2339
      case OP_PLUSI:
2340
      case OP_NOTPLUS:
2341
      case OP_NOTPLUSI:
2342
      case OP_MINPLUS:
2343
      case OP_MINPLUSI:
2344
      case OP_NOTMINPLUS:
2345
      case OP_NOTMINPLUSI:
2346
      case OP_POSPLUS:
2347
      case OP_POSPLUSI:
2348
      case OP_NOTPOSPLUS:
2349
      case OP_NOTPOSPLUSI:
2350
      case OP_QUERY:
2351
      case OP_QUERYI:
2352
      case OP_NOTQUERY:
2353
      case OP_NOTQUERYI:
2354
      case OP_MINQUERY:
2355
      case OP_MINQUERYI:
2356
      case OP_NOTMINQUERY:
2357
      case OP_NOTMINQUERYI:
2358
      case OP_POSQUERY:
2359
      case OP_POSQUERYI:
2360
      case OP_NOTPOSQUERY:
2361
      case OP_NOTPOSQUERYI:
2362
      if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);
2363
      break;
2364
      }
2365
#else
2366
1.53M
    (void)(utf);  /* Keep compiler happy by referencing function argument */
2367
1.53M
#endif
2368
1.53M
    }
2369
1.53M
  }
2370
55.3k
}
2371
2372
2373
2374
/*************************************************
2375
*    Scan compiled branch for non-emptiness      *
2376
*************************************************/
2377
2378
/* This function scans through a branch of a compiled pattern to see whether it
2379
can match the empty string or not. It is called from could_be_empty()
2380
below and from compile_branch() when checking for an unlimited repeat of a
2381
group that can match nothing. Note that first_significant_code() skips over
2382
backward and negative forward assertions when its final argument is TRUE. If we
2383
hit an unclosed bracket, we return "empty" - this means we've struck an inner
2384
bracket whose current branch will already have been scanned.
2385
2386
Arguments:
2387
  code        points to start of search
2388
  endcode     points to where to stop
2389
  utf         TRUE if in UTF-8 / UTF-16 / UTF-32 mode
2390
  cd          contains pointers to tables etc.
2391
  recurses    chain of recurse_check to catch mutual recursion
2392
2393
Returns:      TRUE if what is matched could be empty
2394
*/
2395
2396
static BOOL
2397
could_be_empty_branch(const pcre_uchar *code, const pcre_uchar *endcode,
2398
  BOOL utf, compile_data *cd, recurse_check *recurses)
2399
282k
{
2400
282k
register pcre_uchar c;
2401
282k
recurse_check this_recurse;
2402
2403
282k
for (code = first_significant_code(code + PRIV(OP_lengths)[*code], TRUE);
2404
549k
     code < endcode;
2405
282k
     code = first_significant_code(code + PRIV(OP_lengths)[c], TRUE))
2406
546k
  {
2407
546k
  const pcre_uchar *ccode;
2408
2409
546k
  c = *code;
2410
2411
  /* Skip over forward assertions; the other assertions are skipped by
2412
  first_significant_code() with a TRUE final argument. */
2413
2414
546k
  if (c == OP_ASSERT)
2415
1.81k
    {
2416
4.61k
    do code += GET(code, 1); while (*code == OP_ALT);
2417
1.81k
    c = *code;
2418
1.81k
    continue;
2419
1.81k
    }
2420
2421
  /* For a recursion/subroutine call, if its end has been reached, which
2422
  implies a backward reference subroutine call, we can scan it. If it's a
2423
  forward reference subroutine call, we can't. To detect forward reference
2424
  we have to scan up the list that is kept in the workspace. This function is
2425
  called only when doing the real compile, not during the pre-compile that
2426
  measures the size of the compiled pattern. */
2427
2428
544k
  if (c == OP_RECURSE)
2429
52.2k
    {
2430
52.2k
    const pcre_uchar *scode = cd->start_code + GET(code, 1);
2431
52.2k
    const pcre_uchar *endgroup = scode;
2432
52.2k
    BOOL empty_branch;
2433
2434
    /* Test for forward reference or uncompleted reference. This is disabled
2435
    when called to scan a completed pattern by setting cd->start_workspace to
2436
    NULL. */
2437
2438
52.2k
    if (cd->start_workspace != NULL)
2439
24.5k
      {
2440
24.5k
      const pcre_uchar *tcode;
2441
34.2M
      for (tcode = cd->start_workspace; tcode < cd->hwm; tcode += LINK_SIZE)
2442
34.2M
        if ((int)GET(tcode, 0) == (int)(code + 1 - cd->start_code)) return TRUE;
2443
13.4k
      if (GET(scode, 1) == 0) return TRUE;    /* Unclosed */
2444
13.4k
      }
2445
2446
    /* If the reference is to a completed group, we need to detect whether this
2447
    is a recursive call, as otherwise there will be an infinite loop. If it is
2448
    a recursion, just skip over it. Simple recursions are easily detected. For
2449
    mutual recursions we keep a chain on the stack. */
2450
2451
30.4k
    do endgroup += GET(endgroup, 1); while (*endgroup == OP_ALT);
2452
28.8k
    if (code >= scode && code <= endgroup) continue;  /* Simple recursion */
2453
28.4k
    else
2454
28.4k
      {
2455
28.4k
      recurse_check *r = recurses;
2456
47.5k
      for (r = recurses; r != NULL; r = r->prev)
2457
37.0k
        if (r->group == scode) break;
2458
28.4k
      if (r != NULL) continue;   /* Mutual recursion */
2459
28.4k
      }
2460
2461
    /* Completed reference; scan the referenced group, remembering it on the
2462
    stack chain to detect mutual recursions. */
2463
2464
10.4k
    empty_branch = FALSE;
2465
10.4k
    this_recurse.prev = recurses;
2466
10.4k
    this_recurse.group = scode;
2467
2468
10.4k
    do
2469
11.5k
      {
2470
11.5k
      if (could_be_empty_branch(scode, endcode, utf, cd, &this_recurse))
2471
8.78k
        {
2472
8.78k
        empty_branch = TRUE;
2473
8.78k
        break;
2474
8.78k
        }
2475
2.73k
      scode += GET(scode, 1);
2476
2.73k
      }
2477
10.4k
    while (*scode == OP_ALT);
2478
2479
10.4k
    if (!empty_branch) return FALSE;  /* All branches are non-empty */
2480
8.78k
    continue;
2481
10.4k
    }
2482
2483
  /* Groups with zero repeats can of course be empty; skip them. */
2484
2485
492k
  if (c == OP_BRAZERO || c == OP_BRAMINZERO || c == OP_SKIPZERO ||
2486
492k
      c == OP_BRAPOSZERO)
2487
6.64k
    {
2488
6.64k
    code += PRIV(OP_lengths)[c];
2489
6.96k
    do code += GET(code, 1); while (*code == OP_ALT);
2490
6.64k
    c = *code;
2491
6.64k
    continue;
2492
6.64k
    }
2493
2494
  /* A nested group that is already marked as "could be empty" can just be
2495
  skipped. */
2496
2497
485k
  if (c == OP_SBRA  || c == OP_SBRAPOS ||
2498
485k
      c == OP_SCBRA || c == OP_SCBRAPOS)
2499
5.65k
    {
2500
8.41k
    do code += GET(code, 1); while (*code == OP_ALT);
2501
5.65k
    c = *code;
2502
5.65k
    continue;
2503
5.65k
    }
2504
2505
  /* For other groups, scan the branches. */
2506
2507
479k
  if (c == OP_BRA  || c == OP_BRAPOS ||
2508
479k
      c == OP_CBRA || c == OP_CBRAPOS ||
2509
479k
      c == OP_ONCE || c == OP_ONCE_NC ||
2510
479k
      c == OP_COND || c == OP_SCOND)
2511
212k
    {
2512
212k
    BOOL empty_branch;
2513
212k
    if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
2514
2515
    /* If a conditional group has only one branch, there is a second, implied,
2516
    empty branch, so just skip over the conditional, because it could be empty.
2517
    Otherwise, scan the individual branches of the group. */
2518
2519
211k
    if (c == OP_COND && code[GET(code, 1)] != OP_ALT)
2520
599
      code += GET(code, 1);
2521
211k
    else
2522
211k
      {
2523
211k
      empty_branch = FALSE;
2524
211k
      do
2525
278k
        {
2526
278k
        if (!empty_branch && could_be_empty_branch(code, endcode, utf, cd,
2527
250k
          recurses)) empty_branch = TRUE;
2528
278k
        code += GET(code, 1);
2529
278k
        }
2530
278k
      while (*code == OP_ALT);
2531
211k
      if (!empty_branch) return FALSE;   /* All branches are non-empty */
2532
211k
      }
2533
2534
182k
    c = *code;
2535
182k
    continue;
2536
211k
    }
2537
2538
  /* Handle the other opcodes */
2539
2540
267k
  switch (c)
2541
267k
    {
2542
    /* Check for quantifiers after a class. XCLASS is used for classes that
2543
    cannot be represented just by a bit map. This includes negated single
2544
    high-valued characters. The length in PRIV(OP_lengths)[] is zero; the
2545
    actual length is stored in the compiled code, so we must update "code"
2546
    here. */
2547
2548
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
2549
    case OP_XCLASS:
2550
    ccode = code += GET(code, 1);
2551
    goto CHECK_CLASS_REPEAT;
2552
#endif
2553
2554
6.20k
    case OP_CLASS:
2555
6.91k
    case OP_NCLASS:
2556
6.91k
    ccode = code + PRIV(OP_lengths)[OP_CLASS];
2557
2558
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
2559
    CHECK_CLASS_REPEAT:
2560
#endif
2561
2562
6.91k
    switch (*ccode)
2563
6.91k
      {
2564
772
      case OP_CRSTAR:            /* These could be empty; continue */
2565
1.09k
      case OP_CRMINSTAR:
2566
1.53k
      case OP_CRQUERY:
2567
1.89k
      case OP_CRMINQUERY:
2568
2.55k
      case OP_CRPOSSTAR:
2569
3.42k
      case OP_CRPOSQUERY:
2570
3.42k
      break;
2571
2572
1.02k
      default:                   /* Non-repeat => class must match */
2573
1.35k
      case OP_CRPLUS:            /* These repeats aren't empty */
2574
1.57k
      case OP_CRMINPLUS:
2575
2.24k
      case OP_CRPOSPLUS:
2576
2.24k
      return FALSE;
2577
2578
346
      case OP_CRRANGE:
2579
632
      case OP_CRMINRANGE:
2580
1.24k
      case OP_CRPOSRANGE:
2581
1.24k
      if (GET2(ccode, 1) > 0) return FALSE;  /* Minimum > 0 */
2582
332
      break;
2583
6.91k
      }
2584
3.75k
    break;
2585
2586
    /* Opcodes that must match a character */
2587
2588
3.75k
    case OP_ANY:
2589
2.39k
    case OP_ALLANY:
2590
2.39k
    case OP_ANYBYTE:
2591
2592
2.48k
    case OP_PROP:
2593
2.48k
    case OP_NOTPROP:
2594
2.75k
    case OP_ANYNL:
2595
2596
3.10k
    case OP_NOT_HSPACE:
2597
3.63k
    case OP_HSPACE:
2598
3.99k
    case OP_NOT_VSPACE:
2599
5.54k
    case OP_VSPACE:
2600
5.54k
    case OP_EXTUNI:
2601
2602
5.83k
    case OP_NOT_DIGIT:
2603
6.43k
    case OP_DIGIT:
2604
6.82k
    case OP_NOT_WHITESPACE:
2605
7.37k
    case OP_WHITESPACE:
2606
7.77k
    case OP_NOT_WORDCHAR:
2607
8.06k
    case OP_WORDCHAR:
2608
2609
36.6k
    case OP_CHAR:
2610
38.2k
    case OP_CHARI:
2611
38.6k
    case OP_NOT:
2612
38.9k
    case OP_NOTI:
2613
2614
39.4k
    case OP_PLUS:
2615
40.2k
    case OP_PLUSI:
2616
40.7k
    case OP_MINPLUS:
2617
41.6k
    case OP_MINPLUSI:
2618
2619
41.8k
    case OP_NOTPLUS:
2620
42.0k
    case OP_NOTPLUSI:
2621
42.4k
    case OP_NOTMINPLUS:
2622
43.5k
    case OP_NOTMINPLUSI:
2623
2624
44.3k
    case OP_POSPLUS:
2625
44.6k
    case OP_POSPLUSI:
2626
45.5k
    case OP_NOTPOSPLUS:
2627
46.6k
    case OP_NOTPOSPLUSI:
2628
2629
47.2k
    case OP_EXACT:
2630
47.5k
    case OP_EXACTI:
2631
48.3k
    case OP_NOTEXACT:
2632
48.6k
    case OP_NOTEXACTI:
2633
2634
49.1k
    case OP_TYPEPLUS:
2635
49.5k
    case OP_TYPEMINPLUS:
2636
49.8k
    case OP_TYPEPOSPLUS:
2637
50.4k
    case OP_TYPEEXACT:
2638
2639
50.4k
    return FALSE;
2640
2641
    /* These are going to continue, as they may be empty, but we have to
2642
    fudge the length for the \p and \P cases. */
2643
2644
1.05k
    case OP_TYPESTAR:
2645
2.12k
    case OP_TYPEMINSTAR:
2646
2.80k
    case OP_TYPEPOSSTAR:
2647
11.5k
    case OP_TYPEQUERY:
2648
12.1k
    case OP_TYPEMINQUERY:
2649
13.5k
    case OP_TYPEPOSQUERY:
2650
13.5k
    if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
2651
13.5k
    break;
2652
2653
    /* Same for these */
2654
2655
402
    case OP_TYPEUPTO:
2656
807
    case OP_TYPEMINUPTO:
2657
1.41k
    case OP_TYPEPOSUPTO:
2658
1.41k
    if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)
2659
0
      code += 2;
2660
1.41k
    break;
2661
2662
    /* End of branch */
2663
2664
142k
    case OP_KET:
2665
143k
    case OP_KETRMAX:
2666
144k
    case OP_KETRMIN:
2667
144k
    case OP_KETRPOS:
2668
170k
    case OP_ALT:
2669
170k
    return TRUE;
2670
2671
    /* In UTF-8 mode, STAR, MINSTAR, POSSTAR, QUERY, MINQUERY, POSQUERY, UPTO,
2672
    MINUPTO, and POSUPTO and their caseless and negative versions may be
2673
    followed by a multibyte character. */
2674
2675
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2676
    case OP_STAR:
2677
    case OP_STARI:
2678
    case OP_NOTSTAR:
2679
    case OP_NOTSTARI:
2680
2681
    case OP_MINSTAR:
2682
    case OP_MINSTARI:
2683
    case OP_NOTMINSTAR:
2684
    case OP_NOTMINSTARI:
2685
2686
    case OP_POSSTAR:
2687
    case OP_POSSTARI:
2688
    case OP_NOTPOSSTAR:
2689
    case OP_NOTPOSSTARI:
2690
2691
    case OP_QUERY:
2692
    case OP_QUERYI:
2693
    case OP_NOTQUERY:
2694
    case OP_NOTQUERYI:
2695
2696
    case OP_MINQUERY:
2697
    case OP_MINQUERYI:
2698
    case OP_NOTMINQUERY:
2699
    case OP_NOTMINQUERYI:
2700
2701
    case OP_POSQUERY:
2702
    case OP_POSQUERYI:
2703
    case OP_NOTPOSQUERY:
2704
    case OP_NOTPOSQUERYI:
2705
2706
    if (utf && HAS_EXTRALEN(code[1])) code += GET_EXTRALEN(code[1]);
2707
    break;
2708
2709
    case OP_UPTO:
2710
    case OP_UPTOI:
2711
    case OP_NOTUPTO:
2712
    case OP_NOTUPTOI:
2713
2714
    case OP_MINUPTO:
2715
    case OP_MINUPTOI:
2716
    case OP_NOTMINUPTO:
2717
    case OP_NOTMINUPTOI:
2718
2719
    case OP_POSUPTO:
2720
    case OP_POSUPTOI:
2721
    case OP_NOTPOSUPTO:
2722
    case OP_NOTPOSUPTOI:
2723
2724
    if (utf && HAS_EXTRALEN(code[1 + IMM2_SIZE])) code += GET_EXTRALEN(code[1 + IMM2_SIZE]);
2725
    break;
2726
#endif
2727
2728
    /* MARK, and PRUNE/SKIP/THEN with an argument must skip over the argument
2729
    string. */
2730
2731
1.61k
    case OP_MARK:
2732
2.44k
    case OP_PRUNE_ARG:
2733
2.85k
    case OP_SKIP_ARG:
2734
3.70k
    case OP_THEN_ARG:
2735
3.70k
    code += code[1];
2736
3.70k
    break;
2737
2738
    /* None of the remaining opcodes are required to match a character. */
2739
2740
21.2k
    default:
2741
21.2k
    break;
2742
267k
    }
2743
267k
  }
2744
2745
3.28k
return TRUE;
2746
282k
}
2747
2748
2749
2750
/*************************************************
2751
*    Scan compiled regex for non-emptiness       *
2752
*************************************************/
2753
2754
/* This function is called to check for left recursive calls. We want to check
2755
the current branch of the current pattern to see if it could match the empty
2756
string. If it could, we must look outwards for branches at other levels,
2757
stopping when we pass beyond the bracket which is the subject of the recursion.
2758
This function is called only during the real compile, not during the
2759
pre-compile.
2760
2761
Arguments:
2762
  code        points to start of the recursion
2763
  endcode     points to where to stop (current RECURSE item)
2764
  bcptr       points to the chain of current (unclosed) branch starts
2765
  utf         TRUE if in UTF-8 / UTF-16 / UTF-32 mode
2766
  cd          pointers to tables etc
2767
2768
Returns:      TRUE if what is matched could be empty
2769
*/
2770
2771
static BOOL
2772
could_be_empty(const pcre_uchar *code, const pcre_uchar *endcode,
2773
  branch_chain *bcptr, BOOL utf, compile_data *cd)
2774
1.42k
{
2775
2.36k
while (bcptr != NULL && bcptr->current_branch >= code)
2776
2.34k
  {
2777
2.34k
  if (!could_be_empty_branch(bcptr->current_branch, endcode, utf, cd, NULL))
2778
1.40k
    return FALSE;
2779
938
  bcptr = bcptr->outer;
2780
938
  }
2781
20
return TRUE;
2782
1.42k
}
2783
2784
2785
2786
/*************************************************
2787
*        Base opcode of repeated opcodes         *
2788
*************************************************/
2789
2790
/* Returns the base opcode for repeated single character type opcodes. If the
2791
opcode is not a repeated character type, it returns with the original value.
2792
2793
Arguments:  c opcode
2794
Returns:    base opcode for the type
2795
*/
2796
2797
static pcre_uchar
2798
get_repeat_base(pcre_uchar c)
2799
366k
{
2800
366k
return (c > OP_TYPEPOSUPTO)? c :
2801
366k
       (c >= OP_TYPESTAR)?   OP_TYPESTAR :
2802
366k
       (c >= OP_NOTSTARI)?   OP_NOTSTARI :
2803
264k
       (c >= OP_NOTSTAR)?    OP_NOTSTAR :
2804
257k
       (c >= OP_STARI)?      OP_STARI :
2805
251k
                             OP_STAR;
2806
366k
}
2807
2808
2809
2810
#ifdef SUPPORT_UCP
2811
/*************************************************
2812
*        Check a character and a property        *
2813
*************************************************/
2814
2815
/* This function is called by check_auto_possessive() when a property item
2816
is adjacent to a fixed character.
2817
2818
Arguments:
2819
  c            the character
2820
  ptype        the property type
2821
  pdata        the data for the type
2822
  negated      TRUE if it's a negated property (\P or \p{^)
2823
2824
Returns:       TRUE if auto-possessifying is OK
2825
*/
2826
2827
static BOOL
2828
check_char_prop(pcre_uint32 c, unsigned int ptype, unsigned int pdata,
2829
  BOOL negated)
2830
{
2831
const pcre_uint32 *p;
2832
const ucd_record *prop = GET_UCD(c);
2833
2834
switch(ptype)
2835
  {
2836
  case PT_LAMP:
2837
  return (prop->chartype == ucp_Lu ||
2838
          prop->chartype == ucp_Ll ||
2839
          prop->chartype == ucp_Lt) == negated;
2840
2841
  case PT_GC:
2842
  return (pdata == PRIV(ucp_gentype)[prop->chartype]) == negated;
2843
2844
  case PT_PC:
2845
  return (pdata == prop->chartype) == negated;
2846
2847
  case PT_SC:
2848
  return (pdata == prop->script) == negated;
2849
2850
  /* These are specials */
2851
2852
  case PT_ALNUM:
2853
  return (PRIV(ucp_gentype)[prop->chartype] == ucp_L ||
2854
          PRIV(ucp_gentype)[prop->chartype] == ucp_N) == negated;
2855
2856
  /* Perl space used to exclude VT, but from Perl 5.18 it is included, which
2857
  means that Perl space and POSIX space are now identical. PCRE was changed
2858
  at release 8.34. */
2859
2860
  case PT_SPACE:    /* Perl space */
2861
  case PT_PXSPACE:  /* POSIX space */
2862
  switch(c)
2863
    {
2864
    HSPACE_CASES:
2865
    VSPACE_CASES:
2866
    return negated;
2867
2868
    default:
2869
    return (PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == negated;
2870
    }
2871
  break;  /* Control never reaches here */
2872
2873
  case PT_WORD:
2874
  return (PRIV(ucp_gentype)[prop->chartype] == ucp_L ||
2875
          PRIV(ucp_gentype)[prop->chartype] == ucp_N ||
2876
          c == CHAR_UNDERSCORE) == negated;
2877
2878
  case PT_CLIST:
2879
  p = PRIV(ucd_caseless_sets) + prop->caseset;
2880
  for (;;)
2881
    {
2882
    if (c < *p) return !negated;
2883
    if (c == *p++) return negated;
2884
    }
2885
  break;  /* Control never reaches here */
2886
  }
2887
2888
return FALSE;
2889
}
2890
#endif  /* SUPPORT_UCP */
2891
2892
2893
2894
/*************************************************
2895
*        Fill the character property list        *
2896
*************************************************/
2897
2898
/* Checks whether the code points to an opcode that can take part in auto-
2899
possessification, and if so, fills a list with its properties.
2900
2901
Arguments:
2902
  code        points to start of expression
2903
  utf         TRUE if in UTF-8 / UTF-16 / UTF-32 mode
2904
  fcc         points to case-flipping table
2905
  list        points to output list
2906
              list[0] will be filled with the opcode
2907
              list[1] will be non-zero if this opcode
2908
                can match an empty character string
2909
              list[2..7] depends on the opcode
2910
2911
Returns:      points to the start of the next opcode if *code is accepted
2912
              NULL if *code is not accepted
2913
*/
2914
2915
static const pcre_uchar *
2916
get_chr_property_list(const pcre_uchar *code, BOOL utf,
2917
  const pcre_uint8 *fcc, pcre_uint32 *list)
2918
1.49M
{
2919
1.49M
pcre_uchar c = *code;
2920
1.49M
pcre_uchar base;
2921
1.49M
const pcre_uchar *end;
2922
1.49M
pcre_uint32 chr;
2923
2924
#ifdef SUPPORT_UCP
2925
pcre_uint32 *clist_dest;
2926
const pcre_uint32 *clist_src;
2927
#else
2928
1.49M
((void)utf); /* Suppress "unused parameter" compiler warning */
2929
1.49M
#endif
2930
2931
1.49M
list[0] = c;
2932
1.49M
list[1] = FALSE;
2933
1.49M
code++;
2934
2935
1.49M
if (c >= OP_STAR && c <= OP_TYPEPOSUPTO)
2936
183k
  {
2937
183k
  base = get_repeat_base(c);
2938
183k
  c -= (base - OP_STAR);
2939
2940
183k
  if (c == OP_UPTO || c == OP_MINUPTO || c == OP_EXACT || c == OP_POSUPTO)
2941
10.6k
    code += IMM2_SIZE;
2942
2943
183k
  list[1] = (c != OP_PLUS && c != OP_MINPLUS && c != OP_EXACT && c != OP_POSPLUS);
2944
2945
183k
  switch(base)
2946
183k
    {
2947
112k
    case OP_STAR:
2948
112k
    list[0] = OP_CHAR;
2949
112k
    break;
2950
2951
9.99k
    case OP_STARI:
2952
9.99k
    list[0] = OP_CHARI;
2953
9.99k
    break;
2954
2955
1.80k
    case OP_NOTSTAR:
2956
1.80k
    list[0] = OP_NOT;
2957
1.80k
    break;
2958
2959
3.30k
    case OP_NOTSTARI:
2960
3.30k
    list[0] = OP_NOTI;
2961
3.30k
    break;
2962
2963
55.9k
    case OP_TYPESTAR:
2964
55.9k
    list[0] = *code;
2965
55.9k
    code++;
2966
55.9k
    break;
2967
183k
    }
2968
183k
  c = list[0];
2969
183k
  }
2970
2971
1.49M
switch(c)
2972
1.49M
  {
2973
1.43k
  case OP_NOT_DIGIT:
2974
6.28k
  case OP_DIGIT:
2975
8.18k
  case OP_NOT_WHITESPACE:
2976
10.7k
  case OP_WHITESPACE:
2977
12.6k
  case OP_NOT_WORDCHAR:
2978
27.0k
  case OP_WORDCHAR:
2979
46.3k
  case OP_ANY:
2980
47.8k
  case OP_ALLANY:
2981
49.3k
  case OP_ANYNL:
2982
52.8k
  case OP_NOT_HSPACE:
2983
58.8k
  case OP_HSPACE:
2984
70.1k
  case OP_NOT_VSPACE:
2985
171k
  case OP_VSPACE:
2986
171k
  case OP_EXTUNI:
2987
171k
  case OP_EODN:
2988
172k
  case OP_EOD:
2989
204k
  case OP_DOLL:
2990
205k
  case OP_DOLLM:
2991
205k
  return code;
2992
2993
1.21M
  case OP_CHAR:
2994
1.21M
  case OP_NOT:
2995
1.21M
  GETCHARINCTEST(chr, code);
2996
1.21M
  list[2] = chr;
2997
1.21M
  list[3] = NOTACHAR;
2998
1.21M
  return code;
2999
3000
27.0k
  case OP_CHARI:
3001
30.4k
  case OP_NOTI:
3002
30.4k
  list[0] = (c == OP_CHARI) ? OP_CHAR : OP_NOT;
3003
30.4k
  GETCHARINCTEST(chr, code);
3004
30.4k
  list[2] = chr;
3005
3006
#ifdef SUPPORT_UCP
3007
  if (chr < 128 || (chr < 256 && !utf))
3008
    list[3] = fcc[chr];
3009
  else
3010
    list[3] = UCD_OTHERCASE(chr);
3011
#elif defined SUPPORT_UTF || !defined COMPILE_PCRE8
3012
  list[3] = (chr < 256) ? fcc[chr] : chr;
3013
#else
3014
30.4k
  list[3] = fcc[chr];
3015
30.4k
#endif
3016
3017
  /* The othercase might be the same value. */
3018
3019
30.4k
  if (chr == list[3])
3020
23.6k
    list[3] = NOTACHAR;
3021
6.76k
  else
3022
6.76k
    list[4] = NOTACHAR;
3023
30.4k
  return code;
3024
3025
#ifdef SUPPORT_UCP
3026
  case OP_PROP:
3027
  case OP_NOTPROP:
3028
  if (code[0] != PT_CLIST)
3029
    {
3030
    list[2] = code[0];
3031
    list[3] = code[1];
3032
    return code + 2;
3033
    }
3034
3035
  /* Convert only if we have enough space. */
3036
3037
  clist_src = PRIV(ucd_caseless_sets) + code[1];
3038
  clist_dest = list + 2;
3039
  code += 2;
3040
3041
  do {
3042
     if (clist_dest >= list + 8)
3043
       {
3044
       /* Early return if there is not enough space. This should never
3045
       happen, since all clists are shorter than 5 character now. */
3046
       list[2] = code[0];
3047
       list[3] = code[1];
3048
       return code;
3049
       }
3050
     *clist_dest++ = *clist_src;
3051
     }
3052
  while(*clist_src++ != NOTACHAR);
3053
3054
  /* All characters are stored. The terminating NOTACHAR
3055
  is copied form the clist itself. */
3056
3057
  list[0] = (c == OP_PROP) ? OP_CHAR : OP_NOT;
3058
  return code;
3059
#endif
3060
3061
3.97k
  case OP_NCLASS:
3062
41.5k
  case OP_CLASS:
3063
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3064
  case OP_XCLASS:
3065
  if (c == OP_XCLASS)
3066
    end = code + GET(code, 0) - 1;
3067
  else
3068
#endif
3069
41.5k
    end = code + 32 / sizeof(pcre_uchar);
3070
3071
41.5k
  switch(*end)
3072
41.5k
    {
3073
4.05k
    case OP_CRSTAR:
3074
4.70k
    case OP_CRMINSTAR:
3075
8.20k
    case OP_CRQUERY:
3076
8.84k
    case OP_CRMINQUERY:
3077
9.49k
    case OP_CRPOSSTAR:
3078
9.73k
    case OP_CRPOSQUERY:
3079
9.73k
    list[1] = TRUE;
3080
9.73k
    end++;
3081
9.73k
    break;
3082
3083
2.30k
    case OP_CRPLUS:
3084
3.09k
    case OP_CRMINPLUS:
3085
3.36k
    case OP_CRPOSPLUS:
3086
3.36k
    end++;
3087
3.36k
    break;
3088
3089
3.23k
    case OP_CRRANGE:
3090
5.12k
    case OP_CRMINRANGE:
3091
23.5k
    case OP_CRPOSRANGE:
3092
23.5k
    list[1] = (GET2(end, 1) == 0);
3093
23.5k
    end += 1 + 2 * IMM2_SIZE;
3094
23.5k
    break;
3095
41.5k
    }
3096
41.5k
  list[2] = (pcre_uint32)(end - code);
3097
41.5k
  return end;
3098
1.49M
  }
3099
2.60k
return NULL;    /* Opcode not accepted */
3100
1.49M
}
3101
3102
3103
3104
/*************************************************
3105
*    Scan further character sets for match       *
3106
*************************************************/
3107
3108
/* Checks whether the base and the current opcode have a common character, in
3109
which case the base cannot be possessified.
3110
3111
Arguments:
3112
  code        points to the byte code
3113
  utf         TRUE in UTF-8 / UTF-16 / UTF-32 mode
3114
  cd          static compile data
3115
  base_list   the data list of the base opcode
3116
3117
Returns:      TRUE if the auto-possessification is possible
3118
*/
3119
3120
static BOOL
3121
compare_opcodes(const pcre_uchar *code, BOOL utf, const compile_data *cd,
3122
  const pcre_uint32 *base_list, const pcre_uchar *base_end, int *rec_limit)
3123
3.23M
{
3124
3.23M
pcre_uchar c;
3125
3.23M
pcre_uint32 list[8];
3126
3.23M
const pcre_uint32 *chr_ptr;
3127
3.23M
const pcre_uint32 *ochr_ptr;
3128
3.23M
const pcre_uint32 *list_ptr;
3129
3.23M
const pcre_uchar *next_code;
3130
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3131
const pcre_uchar *xclass_flags;
3132
#endif
3133
3.23M
const pcre_uint8 *class_bitset;
3134
3.23M
const pcre_uint8 *set1, *set2, *set_end;
3135
3.23M
pcre_uint32 chr;
3136
3.23M
BOOL accepted, invert_bits;
3137
3.23M
BOOL entered_a_group = FALSE;
3138
3139
3.23M
if (*rec_limit == 0) return FALSE;
3140
3.23M
--(*rec_limit);
3141
3142
/* Note: the base_list[1] contains whether the current opcode has greedy
3143
(represented by a non-zero value) quantifier. This is a different from
3144
other character type lists, which stores here that the character iterator
3145
matches to an empty string (also represented by a non-zero value). */
3146
3147
3.23M
for(;;)
3148
7.55M
  {
3149
  /* All operations move the code pointer forward.
3150
  Therefore infinite recursions are not possible. */
3151
3152
7.55M
  c = *code;
3153
3154
  /* Skip over callouts */
3155
3156
7.55M
  if (c == OP_CALLOUT)
3157
293
    {
3158
293
    code += PRIV(OP_lengths)[c];
3159
293
    continue;
3160
293
    }
3161
3162
7.55M
  if (c == OP_ALT)
3163
2.33M
    {
3164
2.83M
    do code += GET(code, 1); while (*code == OP_ALT);
3165
2.33M
    c = *code;
3166
2.33M
    }
3167
3168
7.55M
  switch(c)
3169
7.55M
    {
3170
305k
    case OP_END:
3171
306k
    case OP_KETRPOS:
3172
    /* TRUE only in greedy case. The non-greedy case could be replaced by
3173
    an OP_EXACT, but it is probably not worth it. (And note that OP_EXACT
3174
    uses more memory, which we cannot get at this stage.) */
3175
3176
306k
    return base_list[1] != 0;
3177
3178
3.22M
    case OP_KET:
3179
    /* If the bracket is capturing, and referenced by an OP_RECURSE, or
3180
    it is an atomic sub-pattern (assert, once, etc.) the non-greedy case
3181
    cannot be converted to a possessive form. */
3182
3183
3.22M
    if (base_list[1] == 0) return FALSE;
3184
3185
3.21M
    switch(*(code - GET(code, 1)))
3186
3.21M
      {
3187
364
      case OP_ASSERT:
3188
955
      case OP_ASSERT_NOT:
3189
1.73k
      case OP_ASSERTBACK:
3190
2.25k
      case OP_ASSERTBACK_NOT:
3191
4.10k
      case OP_ONCE:
3192
4.94k
      case OP_ONCE_NC:
3193
      /* Atomic sub-patterns and assertions can always auto-possessify their
3194
      last iterator. However, if the group was entered as a result of checking
3195
      a previous iterator, this is not possible. */
3196
3197
4.94k
      return !entered_a_group;
3198
3.21M
      }
3199
3200
3.21M
    code += PRIV(OP_lengths)[c];
3201
3.21M
    continue;
3202
3203
1.33k
    case OP_ONCE:
3204
1.97k
    case OP_ONCE_NC:
3205
146k
    case OP_BRA:
3206
2.47M
    case OP_CBRA:
3207
2.47M
    next_code = code + GET(code, 1);
3208
2.47M
    code += PRIV(OP_lengths)[c];
3209
3210
4.04M
    while (*next_code == OP_ALT)
3211
2.96M
      {
3212
2.96M
      if (!compare_opcodes(code, utf, cd, base_list, base_end, rec_limit))
3213
1.39M
        return FALSE;
3214
1.56M
      code = next_code + 1 + LINK_SIZE;
3215
1.56M
      next_code += GET(next_code, 1);
3216
1.56M
      }
3217
3218
1.08M
    entered_a_group = TRUE;
3219
1.08M
    continue;
3220
3221
159k
    case OP_BRAZERO:
3222
160k
    case OP_BRAMINZERO:
3223
3224
160k
    next_code = code + 1;
3225
160k
    if (*next_code != OP_BRA && *next_code != OP_CBRA
3226
160k
        && *next_code != OP_ONCE && *next_code != OP_ONCE_NC) return FALSE;
3227
3228
162k
    do next_code += GET(next_code, 1); while (*next_code == OP_ALT);
3229
3230
    /* The bracket content will be checked by the
3231
    OP_BRA/OP_CBRA case above. */
3232
159k
    next_code += 1 + LINK_SIZE;
3233
159k
    if (!compare_opcodes(next_code, utf, cd, base_list, base_end, rec_limit))
3234
154k
      return FALSE;
3235
3236
4.97k
    code += PRIV(OP_lengths)[c];
3237
4.97k
    continue;
3238
3239
1.37M
    default:
3240
1.37M
    break;
3241
7.55M
    }
3242
3243
  /* Check for a supported opcode, and load its properties. */
3244
3245
1.37M
  code = get_chr_property_list(code, utf, cd->fcc, list);
3246
1.37M
  if (code == NULL) return FALSE;    /* Unsupported */
3247
3248
  /* If either opcode is a small character list, set pointers for comparing
3249
  characters from that list with another list, or with a property. */
3250
3251
1.37M
  if (base_list[0] == OP_CHAR)
3252
1.32M
    {
3253
1.32M
    chr_ptr = base_list + 2;
3254
1.32M
    list_ptr = list;
3255
1.32M
    }
3256
50.8k
  else if (list[0] == OP_CHAR)
3257
28.5k
    {
3258
28.5k
    chr_ptr = list + 2;
3259
28.5k
    list_ptr = base_list;
3260
28.5k
    }
3261
3262
  /* Character bitsets can also be compared to certain opcodes. */
3263
3264
22.3k
  else if (base_list[0] == OP_CLASS || list[0] == OP_CLASS
3265
22.3k
#ifdef COMPILE_PCRE8
3266
      /* In 8 bit, non-UTF mode, OP_CLASS and OP_NCLASS are the same. */
3267
22.3k
      || (!utf && (base_list[0] == OP_NCLASS || list[0] == OP_NCLASS))
3268
22.3k
#endif
3269
22.3k
      )
3270
6.83k
    {
3271
6.83k
#ifdef COMPILE_PCRE8
3272
6.83k
    if (base_list[0] == OP_CLASS || (!utf && base_list[0] == OP_NCLASS))
3273
#else
3274
    if (base_list[0] == OP_CLASS)
3275
#endif
3276
4.15k
      {
3277
4.15k
      set1 = (pcre_uint8 *)(base_end - base_list[2]);
3278
4.15k
      list_ptr = list;
3279
4.15k
      }
3280
2.67k
    else
3281
2.67k
      {
3282
2.67k
      set1 = (pcre_uint8 *)(code - list[2]);
3283
2.67k
      list_ptr = base_list;
3284
2.67k
      }
3285
3286
6.83k
    invert_bits = FALSE;
3287
6.83k
    switch(list_ptr[0])
3288
6.83k
      {
3289
2.11k
      case OP_CLASS:
3290
2.87k
      case OP_NCLASS:
3291
2.87k
      set2 = (pcre_uint8 *)
3292
2.87k
        ((list_ptr == list ? code : base_end) - list_ptr[2]);
3293
2.87k
      break;
3294
3295
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3296
      case OP_XCLASS:
3297
      xclass_flags = (list_ptr == list ? code : base_end) - list_ptr[2] + LINK_SIZE;
3298
      if ((*xclass_flags & XCL_HASPROP) != 0) return FALSE;
3299
      if ((*xclass_flags & XCL_MAP) == 0)
3300
        {
3301
        /* No bits are set for characters < 256. */
3302
        if (list[1] == 0) return (*xclass_flags & XCL_NOT) == 0;
3303
        /* Might be an empty repeat. */
3304
        continue;
3305
        }
3306
      set2 = (pcre_uint8 *)(xclass_flags + 1);
3307
      break;
3308
#endif
3309
3310
517
      case OP_NOT_DIGIT:
3311
517
      invert_bits = TRUE;
3312
      /* Fall through */
3313
1.36k
      case OP_DIGIT:
3314
1.36k
      set2 = (pcre_uint8 *)(cd->cbits + cbit_digit);
3315
1.36k
      break;
3316
3317
310
      case OP_NOT_WHITESPACE:
3318
310
      invert_bits = TRUE;
3319
      /* Fall through */
3320
1.39k
      case OP_WHITESPACE:
3321
1.39k
      set2 = (pcre_uint8 *)(cd->cbits + cbit_space);
3322
1.39k
      break;
3323
3324
294
      case OP_NOT_WORDCHAR:
3325
294
      invert_bits = TRUE;
3326
      /* Fall through */
3327
675
      case OP_WORDCHAR:
3328
675
      set2 = (pcre_uint8 *)(cd->cbits + cbit_word);
3329
675
      break;
3330
3331
524
      default:
3332
524
      return FALSE;
3333
6.83k
      }
3334
3335
    /* Because the sets are unaligned, we need
3336
    to perform byte comparison here. */
3337
6.30k
    set_end = set1 + 32;
3338
6.30k
    if (invert_bits)
3339
1.12k
      {
3340
1.12k
      do
3341
15.9k
        {
3342
15.9k
        if ((*set1++ & ~(*set2++)) != 0) return FALSE;
3343
15.9k
        }
3344
15.2k
      while (set1 < set_end);
3345
1.12k
      }
3346
5.18k
    else
3347
5.18k
      {
3348
5.18k
      do
3349
58.4k
        {
3350
58.4k
        if ((*set1++ & *set2++) != 0) return FALSE;
3351
58.4k
        }
3352
54.3k
      while (set1 < set_end);
3353
5.18k
      }
3354
3355
1.43k
    if (list[1] == 0) return TRUE;
3356
    /* Might be an empty repeat. */
3357
757
    continue;
3358
1.43k
    }
3359
3360
  /* Some property combinations also acceptable. Unicode property opcodes are
3361
  processed specially; the rest can be handled with a lookup table. */
3362
3363
15.4k
  else
3364
15.4k
    {
3365
15.4k
    pcre_uint32 leftop, rightop;
3366
3367
15.4k
    leftop = base_list[0];
3368
15.4k
    rightop = list[0];
3369
3370
#ifdef SUPPORT_UCP
3371
    accepted = FALSE; /* Always set in non-unicode case. */
3372
    if (leftop == OP_PROP || leftop == OP_NOTPROP)
3373
      {
3374
      if (rightop == OP_EOD)
3375
        accepted = TRUE;
3376
      else if (rightop == OP_PROP || rightop == OP_NOTPROP)
3377
        {
3378
        int n;
3379
        const pcre_uint8 *p;
3380
        BOOL same = leftop == rightop;
3381
        BOOL lisprop = leftop == OP_PROP;
3382
        BOOL risprop = rightop == OP_PROP;
3383
        BOOL bothprop = lisprop && risprop;
3384
3385
        /* There's a table that specifies how each combination is to be
3386
        processed:
3387
          0   Always return FALSE (never auto-possessify)
3388
          1   Character groups are distinct (possessify if both are OP_PROP)
3389
          2   Check character categories in the same group (general or particular)
3390
          3   Return TRUE if the two opcodes are not the same
3391
          ... see comments below
3392
        */
3393
3394
        n = propposstab[base_list[2]][list[2]];
3395
        switch(n)
3396
          {
3397
          case 0: break;
3398
          case 1: accepted = bothprop; break;
3399
          case 2: accepted = (base_list[3] == list[3]) != same; break;
3400
          case 3: accepted = !same; break;
3401
3402
          case 4:  /* Left general category, right particular category */
3403
          accepted = risprop && catposstab[base_list[3]][list[3]] == same;
3404
          break;
3405
3406
          case 5:  /* Right general category, left particular category */
3407
          accepted = lisprop && catposstab[list[3]][base_list[3]] == same;
3408
          break;
3409
3410
          /* This code is logically tricky. Think hard before fiddling with it.
3411
          The posspropstab table has four entries per row. Each row relates to
3412
          one of PCRE's special properties such as ALNUM or SPACE or WORD.
3413
          Only WORD actually needs all four entries, but using repeats for the
3414
          others means they can all use the same code below.
3415
3416
          The first two entries in each row are Unicode general categories, and
3417
          apply always, because all the characters they include are part of the
3418
          PCRE character set. The third and fourth entries are a general and a
3419
          particular category, respectively, that include one or more relevant
3420
          characters. One or the other is used, depending on whether the check
3421
          is for a general or a particular category. However, in both cases the
3422
          category contains more characters than the specials that are defined
3423
          for the property being tested against. Therefore, it cannot be used
3424
          in a NOTPROP case.
3425
3426
          Example: the row for WORD contains ucp_L, ucp_N, ucp_P, ucp_Po.
3427
          Underscore is covered by ucp_P or ucp_Po. */
3428
3429
          case 6:  /* Left alphanum vs right general category */
3430
          case 7:  /* Left space vs right general category */
3431
          case 8:  /* Left word vs right general category */
3432
          p = posspropstab[n-6];
3433
          accepted = risprop && lisprop ==
3434
            (list[3] != p[0] &&
3435
             list[3] != p[1] &&
3436
            (list[3] != p[2] || !lisprop));
3437
          break;
3438
3439
          case 9:   /* Right alphanum vs left general category */
3440
          case 10:  /* Right space vs left general category */
3441
          case 11:  /* Right word vs left general category */
3442
          p = posspropstab[n-9];
3443
          accepted = lisprop && risprop ==
3444
            (base_list[3] != p[0] &&
3445
             base_list[3] != p[1] &&
3446
            (base_list[3] != p[2] || !risprop));
3447
          break;
3448
3449
          case 12:  /* Left alphanum vs right particular category */
3450
          case 13:  /* Left space vs right particular category */
3451
          case 14:  /* Left word vs right particular category */
3452
          p = posspropstab[n-12];
3453
          accepted = risprop && lisprop ==
3454
            (catposstab[p[0]][list[3]] &&
3455
             catposstab[p[1]][list[3]] &&
3456
            (list[3] != p[3] || !lisprop));
3457
          break;
3458
3459
          case 15:  /* Right alphanum vs left particular category */
3460
          case 16:  /* Right space vs left particular category */
3461
          case 17:  /* Right word vs left particular category */
3462
          p = posspropstab[n-15];
3463
          accepted = lisprop && risprop ==
3464
            (catposstab[p[0]][base_list[3]] &&
3465
             catposstab[p[1]][base_list[3]] &&
3466
            (base_list[3] != p[3] || !risprop));
3467
          break;
3468
          }
3469
        }
3470
      }
3471
3472
    else
3473
#endif  /* SUPPORT_UCP */
3474
3475
15.4k
    accepted = leftop >= FIRST_AUTOTAB_OP && leftop <= LAST_AUTOTAB_LEFT_OP &&
3476
15.4k
           rightop >= FIRST_AUTOTAB_OP && rightop <= LAST_AUTOTAB_RIGHT_OP &&
3477
15.4k
           autoposstab[leftop - FIRST_AUTOTAB_OP][rightop - FIRST_AUTOTAB_OP];
3478
3479
15.4k
    if (!accepted) return FALSE;
3480
3481
3.67k
    if (list[1] == 0) return TRUE;
3482
    /* Might be an empty repeat. */
3483
605
    continue;
3484
3.67k
    }
3485
3486
  /* Control reaches here only if one of the items is a small character list.
3487
  All characters are checked against the other side. */
3488
3489
1.35M
  do
3490
1.36M
    {
3491
1.36M
    chr = *chr_ptr;
3492
3493
1.36M
    switch(list_ptr[0])
3494
1.36M
      {
3495
1.15M
      case OP_CHAR:
3496
1.15M
      ochr_ptr = list_ptr + 2;
3497
1.15M
      do
3498
1.16M
        {
3499
1.16M
        if (chr == *ochr_ptr) return FALSE;
3500
1.14M
        ochr_ptr++;
3501
1.14M
        }
3502
1.15M
      while(*ochr_ptr != NOTACHAR);
3503
1.14M
      break;
3504
3505
1.14M
      case OP_NOT:
3506
2.76k
      ochr_ptr = list_ptr + 2;
3507
2.76k
      do
3508
3.59k
        {
3509
3.59k
        if (chr == *ochr_ptr)
3510
1.20k
          break;
3511
2.39k
        ochr_ptr++;
3512
2.39k
        }
3513
2.76k
      while(*ochr_ptr != NOTACHAR);
3514
2.76k
      if (*ochr_ptr == NOTACHAR) return FALSE;   /* Not found */
3515
1.20k
      break;
3516
3517
      /* Note that OP_DIGIT etc. are generated only when PCRE_UCP is *not*
3518
      set. When it is set, \d etc. are converted into OP_(NOT_)PROP codes. */
3519
3520
3.69k
      case OP_DIGIT:
3521
3.69k
      if (chr < 256 && (cd->ctypes[chr] & ctype_digit) != 0) return FALSE;
3522
3.06k
      break;
3523
3524
3.06k
      case OP_NOT_DIGIT:
3525
847
      if (chr > 255 || (cd->ctypes[chr] & ctype_digit) == 0) return FALSE;
3526
305
      break;
3527
3528
1.23k
      case OP_WHITESPACE:
3529
1.23k
      if (chr < 256 && (cd->ctypes[chr] & ctype_space) != 0) return FALSE;
3530
533
      break;
3531
3532
1.45k
      case OP_NOT_WHITESPACE:
3533
1.45k
      if (chr > 255 || (cd->ctypes[chr] & ctype_space) == 0) return FALSE;
3534
587
      break;
3535
3536
1.50k
      case OP_WORDCHAR:
3537
1.50k
      if (chr < 255 && (cd->ctypes[chr] & ctype_word) != 0) return FALSE;
3538
975
      break;
3539
3540
1.05k
      case OP_NOT_WORDCHAR:
3541
1.05k
      if (chr > 255 || (cd->ctypes[chr] & ctype_word) == 0) return FALSE;
3542
439
      break;
3543
3544
5.70k
      case OP_HSPACE:
3545
5.70k
      switch(chr)
3546
5.70k
        {
3547
4.36k
        HSPACE_CASES: return FALSE;
3548
1.34k
        default: break;
3549
5.70k
        }
3550
1.34k
      break;
3551
3552
2.43k
      case OP_NOT_HSPACE:
3553
2.43k
      switch(chr)
3554
2.43k
        {
3555
1.49k
        HSPACE_CASES: break;
3556
941
        default: return FALSE;
3557
2.43k
        }
3558
1.49k
      break;
3559
3560
1.49k
      case OP_ANYNL:
3561
102k
      case OP_VSPACE:
3562
102k
      switch(chr)
3563
102k
        {
3564
2.07k
        VSPACE_CASES: return FALSE;
3565
99.9k
        default: break;
3566
102k
        }
3567
99.9k
      break;
3568
3569
99.9k
      case OP_NOT_VSPACE:
3570
11.1k
      switch(chr)
3571
11.1k
        {
3572
10.4k
        VSPACE_CASES: break;
3573
643
        default: return FALSE;
3574
11.1k
        }
3575
10.4k
      break;
3576
3577
32.6k
      case OP_DOLL:
3578
32.9k
      case OP_EODN:
3579
32.9k
      switch (chr)
3580
32.9k
        {
3581
263
        case CHAR_CR:
3582
508
        case CHAR_LF:
3583
879
        case CHAR_VT:
3584
1.17k
        case CHAR_FF:
3585
1.54k
        case CHAR_NEL:
3586
1.54k
#ifndef EBCDIC
3587
1.54k
        case 0x2028:
3588
1.54k
        case 0x2029:
3589
1.54k
#endif  /* Not EBCDIC */
3590
1.54k
        return FALSE;
3591
32.9k
        }
3592
31.4k
      break;
3593
3594
31.4k
      case OP_EOD:    /* Can always possessify before \z */
3595
557
      break;
3596
3597
#ifdef SUPPORT_UCP
3598
      case OP_PROP:
3599
      case OP_NOTPROP:
3600
      if (!check_char_prop(chr, list_ptr[2], list_ptr[3],
3601
            list_ptr[0] == OP_NOTPROP))
3602
        return FALSE;
3603
      break;
3604
#endif
3605
3606
709
      case OP_NCLASS:
3607
709
      if (chr > 255) return FALSE;
3608
      /* Fall through */
3609
3610
29.9k
      case OP_CLASS:
3611
29.9k
      if (chr > 255) break;
3612
29.9k
      class_bitset = (pcre_uint8 *)
3613
29.9k
        ((list_ptr == list ? code : base_end) - list_ptr[2]);
3614
29.9k
      if ((class_bitset[chr >> 3] & (1U << (chr & 7))) != 0) return FALSE;
3615
29.2k
      break;
3616
3617
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3618
      case OP_XCLASS:
3619
      if (PRIV(xclass)(chr, (list_ptr == list ? code : base_end) -
3620
          list_ptr[2] + LINK_SIZE, utf)) return FALSE;
3621
      break;
3622
#endif
3623
3624
29.2k
      default:
3625
7.10k
      return FALSE;
3626
1.36M
      }
3627
3628
1.32M
    chr_ptr++;
3629
1.32M
    }
3630
1.35M
  while(*chr_ptr != NOTACHAR);
3631
3632
  /* At least one character must be matched from this opcode. */
3633
3634
1.31M
  if (list[1] == 0) return TRUE;
3635
1.31M
  }
3636
3637
/* Control never reaches here. There used to be a fail-save return FALSE; here,
3638
but some compilers complain about an unreachable statement. */
3639
3640
3.23M
}
3641
3642
3643
3644
/*************************************************
3645
*    Scan compiled regex for auto-possession     *
3646
*************************************************/
3647
3648
/* Replaces single character iterations with their possessive alternatives
3649
if appropriate. This function modifies the compiled opcode!
3650
3651
Arguments:
3652
  code        points to start of the byte code
3653
  utf         TRUE in UTF-8 / UTF-16 / UTF-32 mode
3654
  cd          static compile data
3655
3656
Returns:      nothing
3657
*/
3658
3659
static void
3660
auto_possessify(pcre_uchar *code, BOOL utf, const compile_data *cd)
3661
5.58k
{
3662
5.58k
register pcre_uchar c;
3663
5.58k
const pcre_uchar *end;
3664
5.58k
pcre_uchar *repeat_opcode;
3665
5.58k
pcre_uint32 list[8];
3666
5.58k
int rec_limit;
3667
3668
5.58k
for (;;)
3669
3.13M
  {
3670
3.13M
  c = *code;
3671
3672
  /* When a pattern with bad UTF-8 encoding is compiled with NO_UTF_CHECK,
3673
  it may compile without complaining, but may get into a loop here if the code
3674
  pointer points to a bad value. This is, of course a documentated possibility,
3675
  when NO_UTF_CHECK is set, so it isn't a bug, but we can detect this case and
3676
  just give up on this optimization. */
3677
3678
3.13M
  if (c >= OP_TABLE_LENGTH) return;
3679
3680
3.13M
  if (c >= OP_STAR && c <= OP_TYPEPOSUPTO)
3681
182k
    {
3682
182k
    c -= get_repeat_base(c) - OP_STAR;
3683
182k
    end = (c <= OP_MINUPTO) ?
3684
103k
      get_chr_property_list(code, utf, cd->fcc, list) : NULL;
3685
182k
    list[1] = c == OP_STAR || c == OP_PLUS || c == OP_QUERY || c == OP_UPTO;
3686
3687
182k
    rec_limit = 1000;
3688
182k
    if (end != NULL && compare_opcodes(end, utf, cd, list, end, &rec_limit))
3689
42.7k
      {
3690
42.7k
      switch(c)
3691
42.7k
        {
3692
10.9k
        case OP_STAR:
3693
10.9k
        *code += OP_POSSTAR - OP_STAR;
3694
10.9k
        break;
3695
3696
329
        case OP_MINSTAR:
3697
329
        *code += OP_POSSTAR - OP_MINSTAR;
3698
329
        break;
3699
3700
8.83k
        case OP_PLUS:
3701
8.83k
        *code += OP_POSPLUS - OP_PLUS;
3702
8.83k
        break;
3703
3704
974
        case OP_MINPLUS:
3705
974
        *code += OP_POSPLUS - OP_MINPLUS;
3706
974
        break;
3707
3708
19.0k
        case OP_QUERY:
3709
19.0k
        *code += OP_POSQUERY - OP_QUERY;
3710
19.0k
        break;
3711
3712
959
        case OP_MINQUERY:
3713
959
        *code += OP_POSQUERY - OP_MINQUERY;
3714
959
        break;
3715
3716
1.03k
        case OP_UPTO:
3717
1.03k
        *code += OP_POSUPTO - OP_UPTO;
3718
1.03k
        break;
3719
3720
529
        case OP_MINUPTO:
3721
529
        *code += OP_POSUPTO - OP_MINUPTO;
3722
529
        break;
3723
42.7k
        }
3724
42.7k
      }
3725
182k
    c = *code;
3726
182k
    }
3727
2.95M
  else if (c == OP_CLASS || c == OP_NCLASS || c == OP_XCLASS)
3728
24.7k
    {
3729
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3730
    if (c == OP_XCLASS)
3731
      repeat_opcode = code + GET(code, 1);
3732
    else
3733
#endif
3734
24.7k
      repeat_opcode = code + 1 + (32 / sizeof(pcre_uchar));
3735
3736
24.7k
    c = *repeat_opcode;
3737
24.7k
    if (c >= OP_CRSTAR && c <= OP_CRMINRANGE)
3738
13.4k
      {
3739
      /* end must not be NULL. */
3740
13.4k
      end = get_chr_property_list(code, utf, cd->fcc, list);
3741
3742
13.4k
      list[1] = (c & 1) == 0;
3743
3744
13.4k
      rec_limit = 1000;
3745
13.4k
      if (compare_opcodes(end, utf, cd, list, end, &rec_limit))
3746
7.88k
        {
3747
7.88k
        switch (c)
3748
7.88k
          {
3749
696
          case OP_CRSTAR:
3750
1.02k
          case OP_CRMINSTAR:
3751
1.02k
          *repeat_opcode = OP_CRPOSSTAR;
3752
1.02k
          break;
3753
3754
1.18k
          case OP_CRPLUS:
3755
1.44k
          case OP_CRMINPLUS:
3756
1.44k
          *repeat_opcode = OP_CRPOSPLUS;
3757
1.44k
          break;
3758
3759
1.48k
          case OP_CRQUERY:
3760
1.72k
          case OP_CRMINQUERY:
3761
1.72k
          *repeat_opcode = OP_CRPOSQUERY;
3762
1.72k
          break;
3763
3764
2.12k
          case OP_CRRANGE:
3765
3.67k
          case OP_CRMINRANGE:
3766
3.67k
          *repeat_opcode = OP_CRPOSRANGE;
3767
3.67k
          break;
3768
7.88k
          }
3769
7.88k
        }
3770
13.4k
      }
3771
24.7k
    c = *code;
3772
24.7k
    }
3773
3774
3.13M
  switch(c)
3775
3.13M
    {
3776
5.58k
    case OP_END:
3777
5.58k
    return;
3778
3779
6.35k
    case OP_TYPESTAR:
3780
8.88k
    case OP_TYPEMINSTAR:
3781
13.1k
    case OP_TYPEPLUS:
3782
14.0k
    case OP_TYPEMINPLUS:
3783
26.0k
    case OP_TYPEQUERY:
3784
26.8k
    case OP_TYPEMINQUERY:
3785
31.2k
    case OP_TYPEPOSSTAR:
3786
33.0k
    case OP_TYPEPOSPLUS:
3787
38.5k
    case OP_TYPEPOSQUERY:
3788
38.5k
    if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;
3789
38.5k
    break;
3790
3791
437
    case OP_TYPEUPTO:
3792
1.02k
    case OP_TYPEMINUPTO:
3793
5.84k
    case OP_TYPEEXACT:
3794
7.10k
    case OP_TYPEPOSUPTO:
3795
7.10k
    if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)
3796
0
      code += 2;
3797
7.10k
    break;
3798
3799
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
3800
    case OP_XCLASS:
3801
    code += GET(code, 1);
3802
    break;
3803
#endif
3804
3805
2.54k
    case OP_MARK:
3806
4.52k
    case OP_PRUNE_ARG:
3807
7.44k
    case OP_SKIP_ARG:
3808
9.47k
    case OP_THEN_ARG:
3809
9.47k
    code += code[1];
3810
9.47k
    break;
3811
3.13M
    }
3812
3813
  /* Add in the fixed length from the table */
3814
3815
3.13M
  code += PRIV(OP_lengths)[c];
3816
3817
  /* In UTF-8 mode, opcodes that are followed by a character may be followed by
3818
  a multi-byte character. The length in the table is a minimum, so we have to
3819
  arrange to skip the extra bytes. */
3820
3821
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
3822
  if (utf) switch(c)
3823
    {
3824
    case OP_CHAR:
3825
    case OP_CHARI:
3826
    case OP_NOT:
3827
    case OP_NOTI:
3828
    case OP_STAR:
3829
    case OP_MINSTAR:
3830
    case OP_PLUS:
3831
    case OP_MINPLUS:
3832
    case OP_QUERY:
3833
    case OP_MINQUERY:
3834
    case OP_UPTO:
3835
    case OP_MINUPTO:
3836
    case OP_EXACT:
3837
    case OP_POSSTAR:
3838
    case OP_POSPLUS:
3839
    case OP_POSQUERY:
3840
    case OP_POSUPTO:
3841
    case OP_STARI:
3842
    case OP_MINSTARI:
3843
    case OP_PLUSI:
3844
    case OP_MINPLUSI:
3845
    case OP_QUERYI:
3846
    case OP_MINQUERYI:
3847
    case OP_UPTOI:
3848
    case OP_MINUPTOI:
3849
    case OP_EXACTI:
3850
    case OP_POSSTARI:
3851
    case OP_POSPLUSI:
3852
    case OP_POSQUERYI:
3853
    case OP_POSUPTOI:
3854
    case OP_NOTSTAR:
3855
    case OP_NOTMINSTAR:
3856
    case OP_NOTPLUS:
3857
    case OP_NOTMINPLUS:
3858
    case OP_NOTQUERY:
3859
    case OP_NOTMINQUERY:
3860
    case OP_NOTUPTO:
3861
    case OP_NOTMINUPTO:
3862
    case OP_NOTEXACT:
3863
    case OP_NOTPOSSTAR:
3864
    case OP_NOTPOSPLUS:
3865
    case OP_NOTPOSQUERY:
3866
    case OP_NOTPOSUPTO:
3867
    case OP_NOTSTARI:
3868
    case OP_NOTMINSTARI:
3869
    case OP_NOTPLUSI:
3870
    case OP_NOTMINPLUSI:
3871
    case OP_NOTQUERYI:
3872
    case OP_NOTMINQUERYI:
3873
    case OP_NOTUPTOI:
3874
    case OP_NOTMINUPTOI:
3875
    case OP_NOTEXACTI:
3876
    case OP_NOTPOSSTARI:
3877
    case OP_NOTPOSPLUSI:
3878
    case OP_NOTPOSQUERYI:
3879
    case OP_NOTPOSUPTOI:
3880
    if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);
3881
    break;
3882
    }
3883
#else
3884
3.13M
  (void)(utf);  /* Keep compiler happy by referencing function argument */
3885
3.13M
#endif
3886
3.13M
  }
3887
5.58k
}
3888
3889
3890
3891
/*************************************************
3892
*           Check for POSIX class syntax         *
3893
*************************************************/
3894
3895
/* This function is called when the sequence "[:" or "[." or "[=" is
3896
encountered in a character class. It checks whether this is followed by a
3897
sequence of characters terminated by a matching ":]" or ".]" or "=]". If we
3898
reach an unescaped ']' without the special preceding character, return FALSE.
3899
3900
Originally, this function only recognized a sequence of letters between the
3901
terminators, but it seems that Perl recognizes any sequence of characters,
3902
though of course unknown POSIX names are subsequently rejected. Perl gives an
3903
"Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE
3904
didn't consider this to be a POSIX class. Likewise for [:1234:].
3905
3906
The problem in trying to be exactly like Perl is in the handling of escapes. We
3907
have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX
3908
class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code
3909
below handles the special cases \\ and \], but does not try to do any other
3910
escape processing. This makes it different from Perl for cases such as
3911
[:l\ower:] where Perl recognizes it as the POSIX class "lower" but PCRE does
3912
not recognize "l\ower". This is a lesser evil than not diagnosing bad classes
3913
when Perl does, I think.
3914
3915
A user pointed out that PCRE was rejecting [:a[:digit:]] whereas Perl was not.
3916
It seems that the appearance of a nested POSIX class supersedes an apparent
3917
external class. For example, [:a[:digit:]b:] matches "a", "b", ":", or
3918
a digit.
3919
3920
In Perl, unescaped square brackets may also appear as part of class names. For
3921
example, [:a[:abc]b:] gives unknown POSIX class "[:abc]b:]". However, for
3922
[:a[:abc]b][b:] it gives unknown POSIX class "[:abc]b][b:]", which does not
3923
seem right at all. PCRE does not allow closing square brackets in POSIX class
3924
names.
3925
3926
Arguments:
3927
  ptr      pointer to the initial [
3928
  endptr   where to return the end pointer
3929
3930
Returns:   TRUE or FALSE
3931
*/
3932
3933
static BOOL
3934
check_posix_syntax(const pcre_uchar *ptr, const pcre_uchar **endptr)
3935
6.38k
{
3936
6.38k
pcre_uchar terminator;          /* Don't combine these lines; the Solaris cc */
3937
6.38k
terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
3938
2.49M
for (++ptr; *ptr != CHAR_NULL; ptr++)
3939
2.49M
  {
3940
2.49M
  if (*ptr == CHAR_BACKSLASH &&
3941
2.49M
      (ptr[1] == CHAR_RIGHT_SQUARE_BRACKET ||
3942
26.2k
       ptr[1] == CHAR_BACKSLASH))
3943
757
    ptr++;
3944
2.49M
  else if ((*ptr == CHAR_LEFT_SQUARE_BRACKET && ptr[1] == terminator) ||
3945
2.49M
            *ptr == CHAR_RIGHT_SQUARE_BRACKET) return FALSE;
3946
2.49M
  else if (*ptr == terminator && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)
3947
1.24k
    {
3948
1.24k
    *endptr = ptr;
3949
1.24k
    return TRUE;
3950
1.24k
    }
3951
2.49M
  }
3952
101
return FALSE;
3953
6.38k
}
3954
3955
3956
3957
3958
/*************************************************
3959
*          Check POSIX class name                *
3960
*************************************************/
3961
3962
/* This function is called to check the name given in a POSIX-style class entry
3963
such as [:alnum:].
3964
3965
Arguments:
3966
  ptr        points to the first letter
3967
  len        the length of the name
3968
3969
Returns:     a value representing the name, or -1 if unknown
3970
*/
3971
3972
static int
3973
check_posix_name(const pcre_uchar *ptr, int len)
3974
1.23k
{
3975
1.23k
const char *pn = posix_names;
3976
1.23k
register int yield = 0;
3977
10.0k
while (posix_name_lengths[yield] != 0)
3978
10.0k
  {
3979
10.0k
  if (len == posix_name_lengths[yield] &&
3980
10.0k
    STRNCMP_UC_C8(ptr, pn, (unsigned int)len) == 0) return yield;
3981
8.83k
  pn += posix_name_lengths[yield] + 1;
3982
8.83k
  yield++;
3983
8.83k
  }
3984
61
return -1;
3985
1.23k
}
3986
3987
3988
/*************************************************
3989
*    Adjust OP_RECURSE items in repeated group   *
3990
*************************************************/
3991
3992
/* OP_RECURSE items contain an offset from the start of the regex to the group
3993
that is referenced. This means that groups can be replicated for fixed
3994
repetition simply by copying (because the recursion is allowed to refer to
3995
earlier groups that are outside the current group). However, when a group is
3996
optional (i.e. the minimum quantifier is zero), OP_BRAZERO or OP_SKIPZERO is
3997
inserted before it, after it has been compiled. This means that any OP_RECURSE
3998
items within it that refer to the group itself or any contained groups have to
3999
have their offsets adjusted. That one of the jobs of this function. Before it
4000
is called, the partially compiled regex must be temporarily terminated with
4001
OP_END.
4002
4003
This function has been extended to cope with forward references for recursions
4004
and subroutine calls. It must check the list of such references for the
4005
group we are dealing with. If it finds that one of the recursions in the
4006
current group is on this list, it does not adjust the value in the reference
4007
(which is a group number). After the group has been scanned, all the offsets in
4008
the forward reference list for the group are adjusted.
4009
4010
Arguments:
4011
  group      points to the start of the group
4012
  adjust     the amount by which the group is to be moved
4013
  utf        TRUE in UTF-8 / UTF-16 / UTF-32 mode
4014
  cd         contains pointers to tables etc.
4015
  save_hwm_offset   the hwm forward reference offset at the start of the group
4016
4017
Returns:     nothing
4018
*/
4019
4020
static void
4021
adjust_recurse(pcre_uchar *group, int adjust, BOOL utf, compile_data *cd,
4022
  size_t save_hwm_offset)
4023
18.7k
{
4024
18.7k
int offset;
4025
18.7k
pcre_uchar *hc;
4026
18.7k
pcre_uchar *ptr = group;
4027
4028
55.3k
while ((ptr = (pcre_uchar *)find_recurse(ptr, utf)) != NULL)
4029
36.5k
  {
4030
19.0M
  for (hc = (pcre_uchar *)cd->start_workspace + save_hwm_offset; hc < cd->hwm;
4031
18.9M
       hc += LINK_SIZE)
4032
18.9M
    {
4033
18.9M
    offset = (int)GET(hc, 0);
4034
18.9M
    if (cd->start_code + offset == ptr + 1) break;
4035
18.9M
    }
4036
4037
  /* If we have not found this recursion on the forward reference list, adjust
4038
  the recursion's offset if it's after the start of this group. */
4039
4040
36.5k
  if (hc >= cd->hwm)
4041
17.2k
    {
4042
17.2k
    offset = (int)GET(ptr, 1);
4043
17.2k
    if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
4044
17.2k
    }
4045
4046
36.5k
  ptr += 1 + LINK_SIZE;
4047
36.5k
  }
4048
4049
/* Now adjust all forward reference offsets for the group. */
4050
4051
39.2k
for (hc = (pcre_uchar *)cd->start_workspace + save_hwm_offset; hc < cd->hwm;
4052
20.5k
     hc += LINK_SIZE)
4053
20.5k
  {
4054
20.5k
  offset = (int)GET(hc, 0);
4055
20.5k
  PUT(hc, 0, offset + adjust);
4056
20.5k
  }
4057
18.7k
}
4058
4059
4060
4061
/*************************************************
4062
*        Insert an automatic callout point       *
4063
*************************************************/
4064
4065
/* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
4066
callout points before each pattern item.
4067
4068
Arguments:
4069
  code           current code pointer
4070
  ptr            current pattern pointer
4071
  cd             pointers to tables etc
4072
4073
Returns:         new code pointer
4074
*/
4075
4076
static pcre_uchar *
4077
auto_callout(pcre_uchar *code, const pcre_uchar *ptr, compile_data *cd)
4078
0
{
4079
0
*code++ = OP_CALLOUT;
4080
0
*code++ = 255;
4081
0
PUT(code, 0, (int)(ptr - cd->start_pattern));  /* Pattern offset */
4082
0
PUT(code, LINK_SIZE, 0);                       /* Default length */
4083
0
return code + 2 * LINK_SIZE;
4084
0
}
4085
4086
4087
4088
/*************************************************
4089
*         Complete a callout item                *
4090
*************************************************/
4091
4092
/* A callout item contains the length of the next item in the pattern, which
4093
we can't fill in till after we have reached the relevant point. This is used
4094
for both automatic and manual callouts.
4095
4096
Arguments:
4097
  previous_callout   points to previous callout item
4098
  ptr                current pattern pointer
4099
  cd                 pointers to tables etc
4100
4101
Returns:             nothing
4102
*/
4103
4104
static void
4105
complete_callout(pcre_uchar *previous_callout, const pcre_uchar *ptr, compile_data *cd)
4106
662
{
4107
662
int length = (int)(ptr - cd->start_pattern - GET(previous_callout, 2));
4108
662
PUT(previous_callout, 2 + LINK_SIZE, length);
4109
662
}
4110
4111
4112
4113
#ifdef SUPPORT_UCP
4114
/*************************************************
4115
*           Get othercase range                  *
4116
*************************************************/
4117
4118
/* This function is passed the start and end of a class range, in UTF-8 mode
4119
with UCP support. It searches up the characters, looking for ranges of
4120
characters in the "other" case. Each call returns the next one, updating the
4121
start address. A character with multiple other cases is returned on its own
4122
with a special return value.
4123
4124
Arguments:
4125
  cptr        points to starting character value; updated
4126
  d           end value
4127
  ocptr       where to put start of othercase range
4128
  odptr       where to put end of othercase range
4129
4130
Yield:        -1 when no more
4131
               0 when a range is returned
4132
              >0 the CASESET offset for char with multiple other cases
4133
                in this case, ocptr contains the original
4134
*/
4135
4136
static int
4137
get_othercase_range(pcre_uint32 *cptr, pcre_uint32 d, pcre_uint32 *ocptr,
4138
  pcre_uint32 *odptr)
4139
{
4140
pcre_uint32 c, othercase, next;
4141
unsigned int co;
4142
4143
/* Find the first character that has an other case. If it has multiple other
4144
cases, return its case offset value. */
4145
4146
for (c = *cptr; c <= d; c++)
4147
  {
4148
  if ((co = UCD_CASESET(c)) != 0)
4149
    {
4150
    *ocptr = c++;   /* Character that has the set */
4151
    *cptr = c;      /* Rest of input range */
4152
    return (int)co;
4153
    }
4154
  if ((othercase = UCD_OTHERCASE(c)) != c) break;
4155
  }
4156
4157
if (c > d) return -1;  /* Reached end of range */
4158
4159
/* Found a character that has a single other case. Search for the end of the
4160
range, which is either the end of the input range, or a character that has zero
4161
or more than one other cases. */
4162
4163
*ocptr = othercase;
4164
next = othercase + 1;
4165
4166
for (++c; c <= d; c++)
4167
  {
4168
  if ((co = UCD_CASESET(c)) != 0 || UCD_OTHERCASE(c) != next) break;
4169
  next++;
4170
  }
4171
4172
*odptr = next - 1;     /* End of othercase range */
4173
*cptr = c;             /* Rest of input range */
4174
return 0;
4175
}
4176
#endif  /* SUPPORT_UCP */
4177
4178
4179
4180
/*************************************************
4181
*        Add a character or range to a class     *
4182
*************************************************/
4183
4184
/* This function packages up the logic of adding a character or range of
4185
characters to a class. The character values in the arguments will be within the
4186
valid values for the current mode (8-bit, 16-bit, UTF, etc). This function is
4187
mutually recursive with the function immediately below.
4188
4189
Arguments:
4190
  classbits     the bit map for characters < 256
4191
  uchardptr     points to the pointer for extra data
4192
  options       the options word
4193
  cd            contains pointers to tables etc.
4194
  start         start of range character
4195
  end           end of range character
4196
4197
Returns:        the number of < 256 characters added
4198
                the pointer to extra data is updated
4199
*/
4200
4201
static int
4202
add_to_class(pcre_uint8 *classbits, pcre_uchar **uchardptr, int options,
4203
  compile_data *cd, pcre_uint32 start, pcre_uint32 end)
4204
1.24M
{
4205
1.24M
pcre_uint32 c;
4206
1.24M
pcre_uint32 classbits_end = (end <= 0xff ? end : 0xff);
4207
1.24M
int n8 = 0;
4208
4209
1.24M
((void)uchardptr);
4210
1.24M
((void)propposstab);
4211
1.24M
((void)catposstab);
4212
1.24M
((void)posspropstab);
4213
4214
/* If caseless matching is required, scan the range and process alternate
4215
cases. In Unicode, there are 8-bit characters that have alternate cases that
4216
are greater than 255 and vice-versa. Sometimes we can just extend the original
4217
range. */
4218
4219
1.24M
if ((options & PCRE_CASELESS) != 0)
4220
45.2k
  {
4221
#ifdef SUPPORT_UCP
4222
  if ((options & PCRE_UTF8) != 0)
4223
    {
4224
    int rc;
4225
    pcre_uint32 oc, od;
4226
4227
    options &= ~PCRE_CASELESS;   /* Remove for recursive calls */
4228
    c = start;
4229
4230
    while ((rc = get_othercase_range(&c, end, &oc, &od)) >= 0)
4231
      {
4232
      /* Handle a single character that has more than one other case. */
4233
4234
      if (rc > 0) n8 += add_list_to_class(classbits, uchardptr, options, cd,
4235
        PRIV(ucd_caseless_sets) + rc, oc);
4236
4237
      /* Do nothing if the other case range is within the original range. */
4238
4239
      else if (oc >= start && od <= end) continue;
4240
4241
      /* Extend the original range if there is overlap, noting that if oc < c, we
4242
      can't have od > end because a subrange is always shorter than the basic
4243
      range. Otherwise, use a recursive call to add the additional range. */
4244
4245
      else if (oc < start && od >= start - 1) start = oc; /* Extend downwards */
4246
      else if (od > end && oc <= end + 1)
4247
        {
4248
        end = od;       /* Extend upwards */
4249
        if (end > classbits_end) classbits_end = (end <= 0xff ? end : 0xff);
4250
        }
4251
      else n8 += add_to_class(classbits, uchardptr, options, cd, oc, od);
4252
      }
4253
    }
4254
  else
4255
#endif  /* SUPPORT_UCP */
4256
4257
  /* Not UTF-mode, or no UCP */
4258
4259
92.7k
  for (c = start; c <= classbits_end; c++)
4260
47.5k
    {
4261
47.5k
    SETBIT(classbits, cd->fcc[c]);
4262
47.5k
    n8++;
4263
47.5k
    }
4264
45.2k
  }
4265
4266
/* Now handle the original range. Adjust the final value according to the bit
4267
length - this means that the same lists of (e.g.) horizontal spaces can be used
4268
in all cases. */
4269
4270
1.24M
#if defined COMPILE_PCRE8
4271
#ifdef SUPPORT_UTF
4272
  if ((options & PCRE_UTF8) == 0)
4273
#endif
4274
1.24M
  if (end > 0xff) end = 0xff;
4275
4276
#elif defined COMPILE_PCRE16
4277
#ifdef SUPPORT_UTF
4278
  if ((options & PCRE_UTF16) == 0)
4279
#endif
4280
  if (end > 0xffff) end = 0xffff;
4281
4282
#endif /* COMPILE_PCRE[8|16] */
4283
4284
/* Use the bitmap for characters < 256. Otherwise use extra data.*/
4285
4286
9.52M
for (c = start; c <= classbits_end; c++)
4287
8.28M
  {
4288
  /* Regardless of start, c will always be <= 255. */
4289
8.28M
  SETBIT(classbits, c);
4290
8.28M
  n8++;
4291
8.28M
  }
4292
4293
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4294
if (start <= 0xff) start = 0xff + 1;
4295
4296
if (end >= start)
4297
  {
4298
  pcre_uchar *uchardata = *uchardptr;
4299
#ifdef SUPPORT_UTF
4300
  if ((options & PCRE_UTF8) != 0)  /* All UTFs use the same flag bit */
4301
    {
4302
    if (start < end)
4303
      {
4304
      *uchardata++ = XCL_RANGE;
4305
      uchardata += PRIV(ord2utf)(start, uchardata);
4306
      uchardata += PRIV(ord2utf)(end, uchardata);
4307
      }
4308
    else if (start == end)
4309
      {
4310
      *uchardata++ = XCL_SINGLE;
4311
      uchardata += PRIV(ord2utf)(start, uchardata);
4312
      }
4313
    }
4314
  else
4315
#endif  /* SUPPORT_UTF */
4316
4317
  /* Without UTF support, character values are constrained by the bit length,
4318
  and can only be > 256 for 16-bit and 32-bit libraries. */
4319
4320
#ifdef COMPILE_PCRE8
4321
    {}
4322
#else
4323
  if (start < end)
4324
    {
4325
    *uchardata++ = XCL_RANGE;
4326
    *uchardata++ = start;
4327
    *uchardata++ = end;
4328
    }
4329
  else if (start == end)
4330
    {
4331
    *uchardata++ = XCL_SINGLE;
4332
    *uchardata++ = start;
4333
    }
4334
#endif
4335
4336
  *uchardptr = uchardata;   /* Updata extra data pointer */
4337
  }
4338
#endif /* SUPPORT_UTF || !COMPILE_PCRE8 */
4339
4340
1.24M
return n8;    /* Number of 8-bit characters */
4341
1.24M
}
4342
4343
4344
4345
4346
/*************************************************
4347
*        Add a list of characters to a class     *
4348
*************************************************/
4349
4350
/* This function is used for adding a list of case-equivalent characters to a
4351
class, and also for adding a list of horizontal or vertical whitespace. If the
4352
list is in order (which it should be), ranges of characters are detected and
4353
handled appropriately. This function is mutually recursive with the function
4354
above.
4355
4356
Arguments:
4357
  classbits     the bit map for characters < 256
4358
  uchardptr     points to the pointer for extra data
4359
  options       the options word
4360
  cd            contains pointers to tables etc.
4361
  p             points to row of 32-bit values, terminated by NOTACHAR
4362
  except        character to omit; this is used when adding lists of
4363
                  case-equivalent characters to avoid including the one we
4364
                  already know about
4365
4366
Returns:        the number of < 256 characters added
4367
                the pointer to extra data is updated
4368
*/
4369
4370
static int
4371
add_list_to_class(pcre_uint8 *classbits, pcre_uchar **uchardptr, int options,
4372
  compile_data *cd, const pcre_uint32 *p, unsigned int except)
4373
5.14k
{
4374
5.14k
int n8 = 0;
4375
22.9k
while (p[0] < NOTACHAR)
4376
17.8k
  {
4377
17.8k
  int n = 0;
4378
17.8k
  if (p[0] != except)
4379
17.8k
    {
4380
40.8k
    while(p[n+1] == p[0] + n + 1) n++;
4381
17.8k
    n8 += add_to_class(classbits, uchardptr, options, cd, p[0], p[n]);
4382
17.8k
    }
4383
17.8k
  p += n + 1;
4384
17.8k
  }
4385
5.14k
return n8;
4386
5.14k
}
4387
4388
4389
4390
/*************************************************
4391
*    Add characters not in a list to a class     *
4392
*************************************************/
4393
4394
/* This function is used for adding the complement of a list of horizontal or
4395
vertical whitespace to a class. The list must be in order.
4396
4397
Arguments:
4398
  classbits     the bit map for characters < 256
4399
  uchardptr     points to the pointer for extra data
4400
  options       the options word
4401
  cd            contains pointers to tables etc.
4402
  p             points to row of 32-bit values, terminated by NOTACHAR
4403
4404
Returns:        the number of < 256 characters added
4405
                the pointer to extra data is updated
4406
*/
4407
4408
static int
4409
add_not_list_to_class(pcre_uint8 *classbits, pcre_uchar **uchardptr,
4410
  int options, compile_data *cd, const pcre_uint32 *p)
4411
28.4k
{
4412
28.4k
BOOL utf = (options & PCRE_UTF8) != 0;
4413
28.4k
int n8 = 0;
4414
28.4k
if (p[0] > 0)
4415
28.4k
  n8 += add_to_class(classbits, uchardptr, options, cd, 0, p[0] - 1);
4416
274k
while (p[0] < NOTACHAR)
4417
245k
  {
4418
520k
  while (p[1] == p[0] + 1) p++;
4419
245k
  n8 += add_to_class(classbits, uchardptr, options, cd, p[0] + 1,
4420
245k
    (p[1] == NOTACHAR) ? (utf ? 0x10ffffu : 0xffffffffu) : p[1] - 1);
4421
245k
  p++;
4422
245k
  }
4423
28.4k
return n8;
4424
28.4k
}
4425
4426
4427
4428
/*************************************************
4429
*           Compile one branch                   *
4430
*************************************************/
4431
4432
/* Scan the pattern, compiling it into the a vector. If the options are
4433
changed during the branch, the pointer is used to change the external options
4434
bits. This function is used during the pre-compile phase when we are trying
4435
to find out the amount of memory needed, as well as during the real compile
4436
phase. The value of lengthptr distinguishes the two phases.
4437
4438
Arguments:
4439
  optionsptr        pointer to the option bits
4440
  codeptr           points to the pointer to the current code point
4441
  ptrptr            points to the current pattern pointer
4442
  errorcodeptr      points to error code variable
4443
  firstcharptr      place to put the first required character
4444
  firstcharflagsptr place to put the first character flags, or a negative number
4445
  reqcharptr        place to put the last required character
4446
  reqcharflagsptr   place to put the last required character flags, or a negative number
4447
  bcptr             points to current branch chain
4448
  cond_depth        conditional nesting depth
4449
  cd                contains pointers to tables etc.
4450
  lengthptr         NULL during the real compile phase
4451
                    points to length accumulator during pre-compile phase
4452
4453
Returns:            TRUE on success
4454
                    FALSE, with *errorcodeptr set non-zero on error
4455
*/
4456
4457
static BOOL
4458
compile_branch(int *optionsptr, pcre_uchar **codeptr,
4459
  const pcre_uchar **ptrptr, int *errorcodeptr,
4460
  pcre_uint32 *firstcharptr, pcre_int32 *firstcharflagsptr,
4461
  pcre_uint32 *reqcharptr, pcre_int32 *reqcharflagsptr,
4462
  branch_chain *bcptr, int cond_depth,
4463
  compile_data *cd, int *lengthptr)
4464
617k
{
4465
617k
int repeat_type, op_type;
4466
617k
int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
4467
617k
int bravalue = 0;
4468
617k
int greedy_default, greedy_non_default;
4469
617k
pcre_uint32 firstchar, reqchar;
4470
617k
pcre_int32 firstcharflags, reqcharflags;
4471
617k
pcre_uint32 zeroreqchar, zerofirstchar;
4472
617k
pcre_int32 zeroreqcharflags, zerofirstcharflags;
4473
617k
pcre_int32 req_caseopt, reqvary, tempreqvary;
4474
617k
int options = *optionsptr;               /* May change dynamically */
4475
617k
int after_manual_callout = 0;
4476
617k
int length_prevgroup = 0;
4477
617k
register pcre_uint32 c;
4478
617k
int escape;
4479
617k
register pcre_uchar *code = *codeptr;
4480
617k
pcre_uchar *last_code = code;
4481
617k
pcre_uchar *orig_code = code;
4482
617k
pcre_uchar *tempcode;
4483
617k
BOOL inescq = FALSE;
4484
617k
BOOL groupsetfirstchar = FALSE;
4485
617k
const pcre_uchar *ptr = *ptrptr;
4486
617k
const pcre_uchar *tempptr;
4487
617k
const pcre_uchar *nestptr = NULL;
4488
617k
pcre_uchar *previous = NULL;
4489
617k
pcre_uchar *previous_callout = NULL;
4490
617k
size_t item_hwm_offset = 0;
4491
617k
pcre_uint8 classbits[32];
4492
4493
/* We can fish out the UTF-8 setting once and for all into a BOOL, but we
4494
must not do this for other options (e.g. PCRE_EXTENDED) because they may change
4495
dynamically as we process the pattern. */
4496
4497
#ifdef SUPPORT_UTF
4498
/* PCRE_UTF[16|32] have the same value as PCRE_UTF8. */
4499
BOOL utf = (options & PCRE_UTF8) != 0;
4500
#ifndef COMPILE_PCRE32
4501
pcre_uchar utf_chars[6];
4502
#endif
4503
#else
4504
617k
BOOL utf = FALSE;
4505
617k
#endif
4506
4507
/* Helper variables for OP_XCLASS opcode (for characters > 255). We define
4508
class_uchardata always so that it can be passed to add_to_class() always,
4509
though it will not be used in non-UTF 8-bit cases. This avoids having to supply
4510
alternative calls for the different cases. */
4511
4512
617k
pcre_uchar *class_uchardata;
4513
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4514
BOOL xclass;
4515
pcre_uchar *class_uchardata_base;
4516
#endif
4517
4518
#ifdef PCRE_DEBUG
4519
if (lengthptr != NULL) DPRINTF((">> start branch\n"));
4520
#endif
4521
4522
/* Set up the default and non-default settings for greediness */
4523
4524
617k
greedy_default = ((options & PCRE_UNGREEDY) != 0);
4525
617k
greedy_non_default = greedy_default ^ 1;
4526
4527
/* Initialize no first byte, no required byte. REQ_UNSET means "no char
4528
matching encountered yet". It gets changed to REQ_NONE if we hit something that
4529
matches a non-fixed char first char; reqchar just remains unset if we never
4530
find one.
4531
4532
When we hit a repeat whose minimum is zero, we may have to adjust these values
4533
to take the zero repeat into account. This is implemented by setting them to
4534
zerofirstbyte and zeroreqchar when such a repeat is encountered. The individual
4535
item types that can be repeated set these backoff variables appropriately. */
4536
4537
617k
firstchar = reqchar = zerofirstchar = zeroreqchar = 0;
4538
617k
firstcharflags = reqcharflags = zerofirstcharflags = zeroreqcharflags = REQ_UNSET;
4539
4540
/* The variable req_caseopt contains either the REQ_CASELESS value
4541
or zero, according to the current setting of the caseless flag. The
4542
REQ_CASELESS leaves the lower 28 bit empty. It is added into the
4543
firstchar or reqchar variables to record the case status of the
4544
value. This is used only for ASCII characters. */
4545
4546
617k
req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS:0;
4547
4548
/* Switch on next character until the end of the branch */
4549
4550
2.25M
for (;; ptr++)
4551
2.86M
  {
4552
2.86M
  BOOL negate_class;
4553
2.86M
  BOOL should_flip_negation;
4554
2.86M
  BOOL possessive_quantifier;
4555
2.86M
  BOOL is_quantifier;
4556
2.86M
  BOOL is_recurse;
4557
2.86M
  BOOL reset_bracount;
4558
2.86M
  int class_has_8bitchar;
4559
2.86M
  int class_one_char;
4560
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4561
  BOOL xclass_has_prop;
4562
#endif
4563
2.86M
  int newoptions;
4564
2.86M
  int recno;
4565
2.86M
  int refsign;
4566
2.86M
  int skipbytes;
4567
2.86M
  pcre_uint32 subreqchar, subfirstchar;
4568
2.86M
  pcre_int32 subreqcharflags, subfirstcharflags;
4569
2.86M
  int terminator;
4570
2.86M
  unsigned int mclength;
4571
2.86M
  unsigned int tempbracount;
4572
2.86M
  pcre_uint32 ec;
4573
2.86M
  pcre_uchar mcbuffer[8];
4574
4575
  /* Come here to restart the loop without advancing the pointer. */
4576
4577
2.87M
  REDO_LOOP:
4578
4579
  /* Get next character in the pattern */
4580
4581
2.87M
  c = *ptr;
4582
4583
  /* If we are at the end of a nested substitution, revert to the outer level
4584
  string. Nesting only happens one level deep. */
4585
4586
2.87M
  if (c == CHAR_NULL && nestptr != NULL)
4587
552
    {
4588
552
    ptr = nestptr;
4589
552
    nestptr = NULL;
4590
552
    c = *ptr;
4591
552
    }
4592
4593
  /* If we are in the pre-compile phase, accumulate the length used for the
4594
  previous cycle of this loop. */
4595
4596
2.87M
  if (lengthptr != NULL)
4597
2.03M
    {
4598
#ifdef PCRE_DEBUG
4599
    if (code > cd->hwm) cd->hwm = code;                 /* High water info */
4600
#endif
4601
2.03M
    if (code > cd->start_workspace + cd->workspace_size -
4602
2.03M
        WORK_SIZE_SAFETY_MARGIN)                       /* Check for overrun */
4603
1
      {
4604
1
      *errorcodeptr = (code >= cd->start_workspace + cd->workspace_size)?
4605
1
        ERR52 : ERR87;
4606
1
      goto FAILED;
4607
1
      }
4608
4609
    /* There is at least one situation where code goes backwards: this is the
4610
    case of a zero quantifier after a class (e.g. [ab]{0}). At compile time,
4611
    the class is simply eliminated. However, it is created first, so we have to
4612
    allow memory for it. Therefore, don't ever reduce the length at this point.
4613
    */
4614
4615
2.03M
    if (code < last_code) code = last_code;
4616
4617
    /* Paranoid check for integer overflow */
4618
4619
2.03M
    if (OFLOW_MAX - *lengthptr < code - last_code)
4620
10
      {
4621
10
      *errorcodeptr = ERR20;
4622
10
      goto FAILED;
4623
10
      }
4624
4625
2.03M
    *lengthptr += (int)(code - last_code);
4626
2.03M
    DPRINTF(("length=%d added %d c=%c (0x%x)\n", *lengthptr,
4627
2.03M
      (int)(code - last_code), c, c));
4628
4629
    /* If "previous" is set and it is not at the start of the work space, move
4630
    it back to there, in order to avoid filling up the work space. Otherwise,
4631
    if "previous" is NULL, reset the current code pointer to the start. */
4632
4633
2.03M
    if (previous != NULL)
4634
1.43M
      {
4635
1.43M
      if (previous > orig_code)
4636
1.00M
        {
4637
1.00M
        memmove(orig_code, previous, IN_UCHARS(code - previous));
4638
1.00M
        code -= previous - orig_code;
4639
1.00M
        previous = orig_code;
4640
1.00M
        }
4641
1.43M
      }
4642
603k
    else code = orig_code;
4643
4644
    /* Remember where this code item starts so we can pick up the length
4645
    next time round. */
4646
4647
2.03M
    last_code = code;
4648
2.03M
    }
4649
4650
  /* In the real compile phase, just check the workspace used by the forward
4651
  reference list. */
4652
4653
837k
  else if (cd->hwm > cd->start_workspace + cd->workspace_size)
4654
0
    {
4655
0
    *errorcodeptr = ERR52;
4656
0
    goto FAILED;
4657
0
    }
4658
4659
  /* If in \Q...\E, check for the end; if not, we have a literal. Otherwise an
4660
  isolated \E is ignored. */
4661
4662
2.87M
  if (c != CHAR_NULL)
4663
2.85M
    {
4664
2.85M
    if (c == CHAR_BACKSLASH && ptr[1] == CHAR_E)
4665
1.10k
      {
4666
1.10k
      inescq = FALSE;
4667
1.10k
      ptr++;
4668
1.10k
      continue;
4669
1.10k
      }
4670
2.85M
    else if (inescq)
4671
2.46k
      {
4672
2.46k
      if (previous_callout != NULL)
4673
429
        {
4674
429
        if (lengthptr == NULL)  /* Don't attempt in pre-compile phase */
4675
213
          complete_callout(previous_callout, ptr, cd);
4676
429
        previous_callout = NULL;
4677
429
        }
4678
2.46k
      if ((options & PCRE_AUTO_CALLOUT) != 0)
4679
0
        {
4680
0
        previous_callout = code;
4681
0
        code = auto_callout(code, ptr, cd);
4682
0
        }
4683
2.46k
      goto NORMAL_CHAR;
4684
2.46k
      }
4685
4686
    /* Check for the start of a \Q...\E sequence. We must do this here rather
4687
    than later in case it is immediately followed by \E, which turns it into a
4688
    "do nothing" sequence. */
4689
4690
2.85M
    if (c == CHAR_BACKSLASH && ptr[1] == CHAR_Q)
4691
712
      {
4692
712
      inescq = TRUE;
4693
712
      ptr++;
4694
712
      continue;
4695
712
      }
4696
2.85M
    }
4697
4698
  /* In extended mode, skip white space and comments. */
4699
4700
2.86M
  if ((options & PCRE_EXTENDED) != 0)
4701
40.7k
    {
4702
40.7k
    const pcre_uchar *wscptr = ptr;
4703
43.3k
    while (MAX_255(c) && (cd->ctypes[c] & ctype_space) != 0) c = *(++ptr);
4704
40.7k
    if (c == CHAR_NUMBER_SIGN)
4705
1.86k
      {
4706
1.86k
      ptr++;
4707
5.49k
      while (*ptr != CHAR_NULL)
4708
5.42k
        {
4709
5.42k
        if (IS_NEWLINE(ptr))         /* For non-fixed-length newline cases, */
4710
1.79k
          {                          /* IS_NEWLINE sets cd->nllen. */
4711
1.79k
          ptr += cd->nllen;
4712
1.79k
          break;
4713
1.79k
          }
4714
3.63k
        ptr++;
4715
#ifdef SUPPORT_UTF
4716
        if (utf) FORWARDCHAR(ptr);
4717
#endif
4718
3.63k
        }
4719
1.86k
      }
4720
4721
    /* If we skipped any characters, restart the loop. Otherwise, we didn't see
4722
    a comment. */
4723
4724
40.7k
    if (ptr > wscptr) goto REDO_LOOP;
4725
40.7k
    }
4726
4727
  /* Skip over (?# comments. We need to do this here because we want to know if
4728
  the next thing is a quantifier, and these comments may come between an item
4729
  and its quantifier. */
4730
4731
2.86M
  if (c == CHAR_LEFT_PARENTHESIS && ptr[1] == CHAR_QUESTION_MARK &&
4732
2.86M
      ptr[2] == CHAR_NUMBER_SIGN)
4733
260
    {
4734
260
    ptr += 3;
4735
5.63k
    while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
4736
260
    if (*ptr == CHAR_NULL)
4737
12
      {
4738
12
      *errorcodeptr = ERR18;
4739
12
      goto FAILED;
4740
12
      }
4741
248
    continue;
4742
260
    }
4743
4744
  /* See if the next thing is a quantifier. */
4745
4746
2.86M
  is_quantifier =
4747
2.86M
    c == CHAR_ASTERISK || c == CHAR_PLUS || c == CHAR_QUESTION_MARK ||
4748
2.86M
    (c == CHAR_LEFT_CURLY_BRACKET && is_counted_repeat(ptr+1));
4749
4750
  /* Fill in length of a previous callout, except when the next thing is a
4751
  quantifier or when processing a property substitution string in UCP mode. */
4752
4753
2.86M
  if (!is_quantifier && previous_callout != NULL && nestptr == NULL &&
4754
2.86M
       after_manual_callout-- <= 0)
4755
984
    {
4756
984
    if (lengthptr == NULL)      /* Don't attempt in pre-compile phase */
4757
449
      complete_callout(previous_callout, ptr, cd);
4758
984
    previous_callout = NULL;
4759
984
    }
4760
4761
  /* Create auto callout, except for quantifiers, or while processing property
4762
  strings that are substituted for \w etc in UCP mode. */
4763
4764
2.86M
  if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier && nestptr == NULL)
4765
0
    {
4766
0
    previous_callout = code;
4767
0
    code = auto_callout(code, ptr, cd);
4768
0
    }
4769
4770
  /* Process the next pattern item. */
4771
4772
2.86M
  switch(c)
4773
2.86M
    {
4774
    /* ===================================================================*/
4775
13.1k
    case CHAR_NULL:                /* The branch terminates at string end */
4776
115k
    case CHAR_VERTICAL_LINE:       /* or | or ) */
4777
601k
    case CHAR_RIGHT_PARENTHESIS:
4778
601k
    *firstcharptr = firstchar;
4779
601k
    *firstcharflagsptr = firstcharflags;
4780
601k
    *reqcharptr = reqchar;
4781
601k
    *reqcharflagsptr = reqcharflags;
4782
601k
    *codeptr = code;
4783
601k
    *ptrptr = ptr;
4784
601k
    if (lengthptr != NULL)
4785
442k
      {
4786
442k
      if (OFLOW_MAX - *lengthptr < code - last_code)
4787
0
        {
4788
0
        *errorcodeptr = ERR20;
4789
0
        goto FAILED;
4790
0
        }
4791
442k
      *lengthptr += (int)(code - last_code);   /* To include callout length */
4792
442k
      DPRINTF((">> end branch\n"));
4793
442k
      }
4794
601k
    return TRUE;
4795
4796
4797
    /* ===================================================================*/
4798
    /* Handle single-character metacharacters. In multiline mode, ^ disables
4799
    the setting of any following char as a first character. */
4800
4801
86.0k
    case CHAR_CIRCUMFLEX_ACCENT:
4802
86.0k
    previous = NULL;
4803
86.0k
    if ((options & PCRE_MULTILINE) != 0)
4804
32.4k
      {
4805
32.4k
      if (firstcharflags == REQ_UNSET)
4806
8.27k
        zerofirstcharflags = firstcharflags = REQ_NONE;
4807
32.4k
      *code++ = OP_CIRCM;
4808
32.4k
      }
4809
53.6k
    else *code++ = OP_CIRC;
4810
86.0k
    break;
4811
4812
9.17k
    case CHAR_DOLLAR_SIGN:
4813
9.17k
    previous = NULL;
4814
9.17k
    *code++ = ((options & PCRE_MULTILINE) != 0)? OP_DOLLM : OP_DOLL;
4815
9.17k
    break;
4816
4817
    /* There can never be a first char if '.' is first, whatever happens about
4818
    repeats. The value of reqchar doesn't change either. */
4819
4820
34.0k
    case CHAR_DOT:
4821
34.0k
    if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
4822
34.0k
    zerofirstchar = firstchar;
4823
34.0k
    zerofirstcharflags = firstcharflags;
4824
34.0k
    zeroreqchar = reqchar;
4825
34.0k
    zeroreqcharflags = reqcharflags;
4826
34.0k
    previous = code;
4827
34.0k
    item_hwm_offset = cd->hwm - cd->start_workspace;
4828
34.0k
    *code++ = ((options & PCRE_DOTALL) != 0)? OP_ALLANY: OP_ANY;
4829
34.0k
    break;
4830
4831
4832
    /* ===================================================================*/
4833
    /* Character classes. If the included characters are all < 256, we build a
4834
    32-byte bitmap of the permitted characters, except in the special case
4835
    where there is only one such character. For negated classes, we build the
4836
    map as usual, then invert it at the end. However, we use a different opcode
4837
    so that data characters > 255 can be handled correctly.
4838
4839
    If the class contains characters outside the 0-255 range, a different
4840
    opcode is compiled. It may optionally have a bit map for characters < 256,
4841
    but those above are are explicitly listed afterwards. A flag byte tells
4842
    whether the bitmap is present, and whether this is a negated class or not.
4843
4844
    In JavaScript compatibility mode, an isolated ']' causes an error. In
4845
    default (Perl) mode, it is treated as a data character. */
4846
4847
17.4k
    case CHAR_RIGHT_SQUARE_BRACKET:
4848
17.4k
    if ((cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
4849
0
      {
4850
0
      *errorcodeptr = ERR64;
4851
0
      goto FAILED;
4852
0
      }
4853
17.4k
    goto NORMAL_CHAR;
4854
4855
    /* In another (POSIX) regex library, the ugly syntax [[:<:]] and [[:>:]] is
4856
    used for "start of word" and "end of word". As these are otherwise illegal
4857
    sequences, we don't break anything by recognizing them. They are replaced
4858
    by \b(?=\w) and \b(?<=\w) respectively. Sequences like [a[:<:]] are
4859
    erroneous and are handled by the normal code below. */
4860
4861
19.7k
    case CHAR_LEFT_SQUARE_BRACKET:
4862
19.7k
    if (STRNCMP_UC_C8(ptr+1, STRING_WEIRD_STARTWORD, 6) == 0)
4863
324
      {
4864
324
      nestptr = ptr + 7;
4865
324
      ptr = sub_start_of_word;
4866
324
      goto REDO_LOOP;
4867
324
      }
4868
4869
19.4k
    if (STRNCMP_UC_C8(ptr+1, STRING_WEIRD_ENDWORD, 6) == 0)
4870
228
      {
4871
228
      nestptr = ptr + 7;
4872
228
      ptr = sub_end_of_word;
4873
228
      goto REDO_LOOP;
4874
228
      }
4875
4876
    /* Handle a real character class. */
4877
4878
19.2k
    previous = code;
4879
19.2k
    item_hwm_offset = cd->hwm - cd->start_workspace;
4880
4881
    /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
4882
    they are encountered at the top level, so we'll do that too. */
4883
4884
19.2k
    if ((ptr[1] == CHAR_COLON || ptr[1] == CHAR_DOT ||
4885
19.2k
         ptr[1] == CHAR_EQUALS_SIGN) &&
4886
19.2k
        check_posix_syntax(ptr, &tempptr))
4887
7
      {
4888
7
      *errorcodeptr = (ptr[1] == CHAR_COLON)? ERR13 : ERR31;
4889
7
      goto FAILED;
4890
7
      }
4891
4892
    /* If the first character is '^', set the negation flag and skip it. Also,
4893
    if the first few characters (either before or after ^) are \Q\E or \E we
4894
    skip them too. This makes for compatibility with Perl. */
4895
4896
19.2k
    negate_class = FALSE;
4897
19.2k
    for (;;)
4898
24.6k
      {
4899
24.6k
      c = *(++ptr);
4900
24.6k
      if (c == CHAR_BACKSLASH)
4901
1.51k
        {
4902
1.51k
        if (ptr[1] == CHAR_E)
4903
244
          ptr++;
4904
1.26k
        else if (STRNCMP_UC_C8(ptr + 1, STR_Q STR_BACKSLASH STR_E, 3) == 0)
4905
253
          ptr += 3;
4906
1.01k
        else
4907
1.01k
          break;
4908
1.51k
        }
4909
23.1k
      else if (!negate_class && c == CHAR_CIRCUMFLEX_ACCENT)
4910
4.91k
        negate_class = TRUE;
4911
18.2k
      else break;
4912
24.6k
      }
4913
4914
    /* Empty classes are allowed in JavaScript compatibility mode. Otherwise,
4915
    an initial ']' is taken as a data character -- the code below handles
4916
    that. In JS mode, [] must always fail, so generate OP_FAIL, whereas
4917
    [^] must match any character, so generate OP_ALLANY. */
4918
4919
19.2k
    if (c == CHAR_RIGHT_SQUARE_BRACKET &&
4920
19.2k
        (cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
4921
0
      {
4922
0
      *code++ = negate_class? OP_ALLANY : OP_FAIL;
4923
0
      if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
4924
0
      zerofirstchar = firstchar;
4925
0
      zerofirstcharflags = firstcharflags;
4926
0
      break;
4927
0
      }
4928
4929
    /* If a class contains a negative special such as \S, we need to flip the
4930
    negation flag at the end, so that support for characters > 255 works
4931
    correctly (they are all included in the class). */
4932
4933
19.2k
    should_flip_negation = FALSE;
4934
4935
    /* Extended class (xclass) will be used when characters > 255
4936
    might match. */
4937
4938
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4939
    xclass = FALSE;
4940
    class_uchardata = code + LINK_SIZE + 2;   /* For XCLASS items */
4941
    class_uchardata_base = class_uchardata;   /* Save the start */
4942
#endif
4943
4944
    /* For optimization purposes, we track some properties of the class:
4945
    class_has_8bitchar will be non-zero if the class contains at least one <
4946
    256 character; class_one_char will be 1 if the class contains just one
4947
    character; xclass_has_prop will be TRUE if unicode property checks
4948
    are present in the class. */
4949
4950
19.2k
    class_has_8bitchar = 0;
4951
19.2k
    class_one_char = 0;
4952
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4953
    xclass_has_prop = FALSE;
4954
#endif
4955
4956
    /* Initialize the 32-char bit map to all zeros. We build the map in a
4957
    temporary bit of memory, in case the class contains fewer than two
4958
    8-bit characters because in that case the compiled code doesn't use the bit
4959
    map. */
4960
4961
19.2k
    memset(classbits, 0, 32 * sizeof(pcre_uint8));
4962
4963
    /* Process characters until ] is reached. By writing this as a "do" it
4964
    means that an initial ] is taken as a data character. At the start of the
4965
    loop, c contains the first byte of the character. */
4966
4967
19.2k
    if (c != CHAR_NULL) do
4968
1.65M
      {
4969
1.65M
      const pcre_uchar *oldptr;
4970
4971
#ifdef SUPPORT_UTF
4972
      if (utf && HAS_EXTRALEN(c))
4973
        {                           /* Braces are required because the */
4974
        GETCHARLEN(c, ptr, ptr);    /* macro generates multiple statements */
4975
        }
4976
#endif
4977
4978
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
4979
      /* In the pre-compile phase, accumulate the length of any extra
4980
      data and reset the pointer. This is so that very large classes that
4981
      contain a zillion > 255 characters no longer overwrite the work space
4982
      (which is on the stack). We have to remember that there was XCLASS data,
4983
      however. */
4984
4985
      if (class_uchardata > class_uchardata_base) xclass = TRUE;
4986
4987
      if (lengthptr != NULL && class_uchardata > class_uchardata_base)
4988
        {
4989
        *lengthptr += (int)(class_uchardata - class_uchardata_base);
4990
        class_uchardata = class_uchardata_base;
4991
        }
4992
#endif
4993
4994
      /* Inside \Q...\E everything is literal except \E */
4995
4996
1.65M
      if (inescq)
4997
7.74k
        {
4998
7.74k
        if (c == CHAR_BACKSLASH && ptr[1] == CHAR_E)  /* If we are at \E */
4999
358
          {
5000
358
          inescq = FALSE;                   /* Reset literal state */
5001
358
          ptr++;                            /* Skip the 'E' */
5002
358
          continue;                         /* Carry on with next */
5003
358
          }
5004
7.38k
        goto CHECK_RANGE;                   /* Could be range if \E follows */
5005
7.74k
        }
5006
5007
      /* Handle POSIX class names. Perl allows a negation extension of the
5008
      form [:^name:]. A square bracket that doesn't match the syntax is
5009
      treated as a literal. We also recognize the POSIX constructions
5010
      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
5011
      5.6 and 5.8 do. */
5012
5013
1.64M
      if (c == CHAR_LEFT_SQUARE_BRACKET &&
5014
1.64M
          (ptr[1] == CHAR_COLON || ptr[1] == CHAR_DOT ||
5015
24.4k
           ptr[1] == CHAR_EQUALS_SIGN) && check_posix_syntax(ptr, &tempptr))
5016
1.23k
        {
5017
1.23k
        BOOL local_negate = FALSE;
5018
1.23k
        int posix_class, taboffset, tabopt;
5019
1.23k
        register const pcre_uint8 *cbits = cd->cbits;
5020
1.23k
        pcre_uint8 pbits[32];
5021
5022
1.23k
        if (ptr[1] != CHAR_COLON)
5023
2
          {
5024
2
          *errorcodeptr = ERR31;
5025
2
          goto FAILED;
5026
2
          }
5027
5028
1.23k
        ptr += 2;
5029
1.23k
        if (*ptr == CHAR_CIRCUMFLEX_ACCENT)
5030
208
          {
5031
208
          local_negate = TRUE;
5032
208
          should_flip_negation = TRUE;  /* Note negative special */
5033
208
          ptr++;
5034
208
          }
5035
5036
1.23k
        posix_class = check_posix_name(ptr, (int)(tempptr - ptr));
5037
1.23k
        if (posix_class < 0)
5038
61
          {
5039
61
          *errorcodeptr = ERR30;
5040
61
          goto FAILED;
5041
61
          }
5042
5043
        /* If matching is caseless, upper and lower are converted to
5044
        alpha. This relies on the fact that the class table starts with
5045
        alpha, lower, upper as the first 3 entries. */
5046
5047
1.17k
        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
5048
200
          posix_class = 0;
5049
5050
        /* When PCRE_UCP is set, some of the POSIX classes are converted to
5051
        different escape sequences that use Unicode properties \p or \P. Others
5052
        that are not available via \p or \P generate XCL_PROP/XCL_NOTPROP
5053
        directly. */
5054
5055
#ifdef SUPPORT_UCP
5056
        if ((options & PCRE_UCP) != 0)
5057
          {
5058
          unsigned int ptype = 0;
5059
          int pc = posix_class + ((local_negate)? POSIX_SUBSIZE/2 : 0);
5060
5061
          /* The posix_substitutes table specifies which POSIX classes can be
5062
          converted to \p or \P items. */
5063
5064
          if (posix_substitutes[pc] != NULL)
5065
            {
5066
            nestptr = tempptr + 1;
5067
            ptr = posix_substitutes[pc] - 1;
5068
            continue;
5069
            }
5070
5071
          /* There are three other classes that generate special property calls
5072
          that are recognized only in an XCLASS. */
5073
5074
          else switch(posix_class)
5075
            {
5076
            case PC_GRAPH:
5077
            ptype = PT_PXGRAPH;
5078
            /* Fall through */
5079
            case PC_PRINT:
5080
            if (ptype == 0) ptype = PT_PXPRINT;
5081
            /* Fall through */
5082
            case PC_PUNCT:
5083
            if (ptype == 0) ptype = PT_PXPUNCT;
5084
            *class_uchardata++ = local_negate? XCL_NOTPROP : XCL_PROP;
5085
            *class_uchardata++ = ptype;
5086
            *class_uchardata++ = 0;
5087
            xclass_has_prop = TRUE;
5088
            ptr = tempptr + 1;
5089
            continue;
5090
5091
            /* For the other POSIX classes (ascii, cntrl, xdigit) we are going
5092
            to fall through to the non-UCP case and build a bit map for
5093
            characters with code points less than 256. If we are in a negated
5094
            POSIX class, characters with code points greater than 255 must
5095
            either all match or all not match. In the special case where we
5096
            have not yet generated any xclass data, and this is the final item
5097
            in the overall class, we need do nothing: later on, the opcode
5098
            OP_NCLASS will be used to indicate that characters greater than 255
5099
            are acceptable. If we have already seen an xclass item or one may
5100
            follow (we have to assume that it might if this is not the end of
5101
            the class), explicitly list all wide codepoints, which will then
5102
            either not match or match, depending on whether the class is or is
5103
            not negated. */
5104
5105
            default:
5106
            if (local_negate &&
5107
                (xclass || tempptr[2] != CHAR_RIGHT_SQUARE_BRACKET))
5108
              {
5109
              *class_uchardata++ = XCL_RANGE;
5110
              class_uchardata += PRIV(ord2utf)(0x100, class_uchardata);
5111
              class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);
5112
              }
5113
            break;
5114
            }
5115
          }
5116
#endif
5117
        /* In the non-UCP case, or when UCP makes no difference, we build the
5118
        bit map for the POSIX class in a chunk of local store because we may be
5119
        adding and subtracting from it, and we don't want to subtract bits that
5120
        may be in the main map already. At the end we or the result into the
5121
        bit map that is being built. */
5122
5123
1.17k
        posix_class *= 3;
5124
5125
        /* Copy in the first table (always present) */
5126
5127
1.17k
        memcpy(pbits, cbits + posix_class_maps[posix_class],
5128
1.17k
          32 * sizeof(pcre_uint8));
5129
5130
        /* If there is a second table, add or remove it as required. */
5131
5132
1.17k
        taboffset = posix_class_maps[posix_class + 1];
5133
1.17k
        tabopt = posix_class_maps[posix_class + 2];
5134
5135
1.17k
        if (taboffset >= 0)
5136
436
          {
5137
436
          if (tabopt >= 0)
5138
7.35k
            for (c = 0; c < 32; c++) pbits[c] |= cbits[c + taboffset];
5139
213
          else
5140
7.02k
            for (c = 0; c < 32; c++) pbits[c] &= ~cbits[c + taboffset];
5141
436
          }
5142
5143
        /* Now see if we need to remove any special characters. An option
5144
        value of 1 removes vertical space and 2 removes underscore. */
5145
5146
1.17k
        if (tabopt < 0) tabopt = -tabopt;
5147
1.17k
        if (tabopt == 1) pbits[1] &= ~0x3c;
5148
951
          else if (tabopt == 2) pbits[11] &= 0x7f;
5149
5150
        /* Add the POSIX table or its complement into the main table that is
5151
        being built and we are done. */
5152
5153
1.17k
        if (local_negate)
5154
6.73k
          for (c = 0; c < 32; c++) classbits[c] |= ~pbits[c];
5155
968
        else
5156
31.9k
          for (c = 0; c < 32; c++) classbits[c] |= pbits[c];
5157
5158
1.17k
        ptr = tempptr + 1;
5159
        /* Every class contains at least one < 256 character. */
5160
1.17k
        class_has_8bitchar = 1;
5161
        /* Every class contains at least two characters. */
5162
1.17k
        class_one_char = 2;
5163
1.17k
        continue;    /* End of POSIX syntax handling */
5164
1.23k
        }
5165
5166
      /* Backslash may introduce a single character, or it may introduce one
5167
      of the specials, which just set a flag. The sequence \b is a special
5168
      case. Inside a class (and only there) it is treated as backspace. We
5169
      assume that other escapes have more than one character in them, so
5170
      speculatively set both class_has_8bitchar and class_one_char bigger
5171
      than one. Unrecognized escapes fall through and are either treated
5172
      as literal characters (by default), or are faulted if
5173
      PCRE_EXTRA is set. */
5174
5175
1.64M
      if (c == CHAR_BACKSLASH)
5176
797k
        {
5177
797k
        escape = check_escape(&ptr, &ec, errorcodeptr, cd->bracount, options,
5178
797k
          TRUE);
5179
797k
        if (*errorcodeptr != 0) goto FAILED;
5180
797k
        if (escape == 0) c = ec;
5181
727k
        else if (escape == ESC_b) c = CHAR_BS; /* \b is backspace in a class */
5182
727k
        else if (escape == ESC_N)          /* \N is not supported in a class */
5183
1
          {
5184
1
          *errorcodeptr = ERR71;
5185
1
          goto FAILED;
5186
1
          }
5187
727k
        else if (escape == ESC_Q)            /* Handle start of quoted string */
5188
861
          {
5189
861
          if (ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E)
5190
309
            {
5191
309
            ptr += 2; /* avoid empty string */
5192
309
            }
5193
552
          else inescq = TRUE;
5194
861
          continue;
5195
861
          }
5196
726k
        else if (escape == ESC_E) continue;  /* Ignore orphan \E */
5197
5198
726k
        else
5199
726k
          {
5200
726k
          register const pcre_uint8 *cbits = cd->cbits;
5201
          /* Every class contains at least two < 256 characters. */
5202
726k
          class_has_8bitchar++;
5203
          /* Every class contains at least two characters. */
5204
726k
          class_one_char += 2;
5205
5206
726k
          switch (escape)
5207
726k
            {
5208
#ifdef SUPPORT_UCP
5209
            case ESC_du:     /* These are the values given for \d etc */
5210
            case ESC_DU:     /* when PCRE_UCP is set. We replace the */
5211
            case ESC_wu:     /* escape sequence with an appropriate \p */
5212
            case ESC_WU:     /* or \P to test Unicode properties instead */
5213
            case ESC_su:     /* of the default ASCII testing. */
5214
            case ESC_SU:
5215
            nestptr = ptr;
5216
            ptr = substitutes[escape - ESC_DU] - 1;  /* Just before substitute */
5217
            class_has_8bitchar--;                /* Undo! */
5218
            continue;
5219
#endif
5220
228
            case ESC_d:
5221
7.52k
            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
5222
228
            continue;
5223
5224
257
            case ESC_D:
5225
257
            should_flip_negation = TRUE;
5226
8.48k
            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
5227
257
            continue;
5228
5229
207
            case ESC_w:
5230
6.83k
            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
5231
207
            continue;
5232
5233
784
            case ESC_W:
5234
784
            should_flip_negation = TRUE;
5235
25.8k
            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
5236
784
            continue;
5237
5238
            /* Perl 5.004 onwards omitted VT from \s, but restored it at Perl
5239
            5.18. Before PCRE 8.34, we had to preserve the VT bit if it was
5240
            previously set by something earlier in the character class.
5241
            Luckily, the value of CHAR_VT is 0x0b in both ASCII and EBCDIC, so
5242
            we could just adjust the appropriate bit. From PCRE 8.34 we no
5243
            longer treat \s and \S specially. */
5244
5245
660k
            case ESC_s:
5246
21.7M
            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
5247
660k
            continue;
5248
5249
307
            case ESC_S:
5250
307
            should_flip_negation = TRUE;
5251
10.1k
            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
5252
307
            continue;
5253
5254
            /* The rest apply in both UCP and non-UCP cases. */
5255
5256
402
            case ESC_h:
5257
402
            (void)add_list_to_class(classbits, &class_uchardata, options, cd,
5258
402
              PRIV(hspace_list), NOTACHAR);
5259
402
            continue;
5260
5261
26.7k
            case ESC_H:
5262
26.7k
            (void)add_not_list_to_class(classbits, &class_uchardata, options,
5263
26.7k
              cd, PRIV(hspace_list));
5264
26.7k
            continue;
5265
5266
4.74k
            case ESC_v:
5267
4.74k
            (void)add_list_to_class(classbits, &class_uchardata, options, cd,
5268
4.74k
              PRIV(vspace_list), NOTACHAR);
5269
4.74k
            continue;
5270
5271
1.73k
            case ESC_V:
5272
1.73k
            (void)add_not_list_to_class(classbits, &class_uchardata, options,
5273
1.73k
              cd, PRIV(vspace_list));
5274
1.73k
            continue;
5275
5276
1
            case ESC_p:
5277
2
            case ESC_P:
5278
#ifdef SUPPORT_UCP
5279
              {
5280
              BOOL negated;
5281
              unsigned int ptype = 0, pdata = 0;
5282
              if (!get_ucp(&ptr, &negated, &ptype, &pdata, errorcodeptr))
5283
                goto FAILED;
5284
              *class_uchardata++ = ((escape == ESC_p) != negated)?
5285
                XCL_PROP : XCL_NOTPROP;
5286
              *class_uchardata++ = ptype;
5287
              *class_uchardata++ = pdata;
5288
              xclass_has_prop = TRUE;
5289
              class_has_8bitchar--;                /* Undo! */
5290
              continue;
5291
              }
5292
#else
5293
2
            *errorcodeptr = ERR45;
5294
2
            goto FAILED;
5295
0
#endif
5296
            /* Unrecognized escapes are faulted if PCRE is running in its
5297
            strict mode. By default, for compatibility with Perl, they are
5298
            treated as literals. */
5299
5300
30.7k
            default:
5301
30.7k
            if ((options & PCRE_EXTRA) != 0)
5302
1
              {
5303
1
              *errorcodeptr = ERR7;
5304
1
              goto FAILED;
5305
1
              }
5306
30.7k
            class_has_8bitchar--;    /* Undo the speculative increase. */
5307
30.7k
            class_one_char -= 2;     /* Undo the speculative increase. */
5308
30.7k
            c = *ptr;                /* Get the final character and fall through */
5309
30.7k
            break;
5310
726k
            }
5311
726k
          }
5312
5313
        /* Fall through if the escape just defined a single character (c >= 0).
5314
        This may be greater than 256. */
5315
5316
100k
        escape = 0;
5317
5318
100k
        }   /* End of backslash handling */
5319
5320
      /* A character may be followed by '-' to form a range. However, Perl does
5321
      not permit ']' to be the end of the range. A '-' character at the end is
5322
      treated as a literal. Perl ignores orphaned \E sequences entirely. The
5323
      code for handling \Q and \E is messy. */
5324
5325
953k
      CHECK_RANGE:
5326
954k
      while (ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E)
5327
1.07k
        {
5328
1.07k
        inescq = FALSE;
5329
1.07k
        ptr += 2;
5330
1.07k
        }
5331
953k
      oldptr = ptr;
5332
5333
      /* Remember if \r or \n were explicitly used */
5334
5335
953k
      if (c == CHAR_CR || c == CHAR_NL) cd->external_flags |= PCRE_HASCRORLF;
5336
5337
      /* Check for range */
5338
5339
953k
      if (!inescq && ptr[1] == CHAR_MINUS)
5340
5.02k
        {
5341
5.02k
        pcre_uint32 d;
5342
5.02k
        ptr += 2;
5343
5.22k
        while (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_E) ptr += 2;
5344
5345
        /* If we hit \Q (not followed by \E) at this point, go into escaped
5346
        mode. */
5347
5348
5.22k
        while (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_Q)
5349
908
          {
5350
908
          ptr += 2;
5351
908
          if (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_E)
5352
200
            { ptr += 2; continue; }
5353
708
          inescq = TRUE;
5354
708
          break;
5355
908
          }
5356
5357
        /* Minus (hyphen) at the end of a class is treated as a literal, so put
5358
        back the pointer and jump to handle the character that preceded it. */
5359
5360
5.02k
        if (*ptr == CHAR_NULL || (!inescq && *ptr == CHAR_RIGHT_SQUARE_BRACKET))
5361
309
          {
5362
309
          ptr = oldptr;
5363
309
          goto CLASS_SINGLE_CHARACTER;
5364
309
          }
5365
5366
        /* Otherwise, we have a potential range; pick up the next character */
5367
5368
#ifdef SUPPORT_UTF
5369
        if (utf)
5370
          {                           /* Braces are required because the */
5371
          GETCHARLEN(d, ptr, ptr);    /* macro generates multiple statements */
5372
          }
5373
        else
5374
#endif
5375
4.71k
        d = *ptr;  /* Not UTF-8 mode */
5376
5377
        /* The second part of a range can be a single-character escape
5378
        sequence, but not any of the other escapes. Perl treats a hyphen as a
5379
        literal in such circumstances. However, in Perl's warning mode, a
5380
        warning is given, so PCRE now faults it as it is almost certainly a
5381
        mistake on the user's part. */
5382
5383
4.71k
        if (!inescq)
5384
4.01k
          {
5385
4.01k
          if (d == CHAR_BACKSLASH)
5386
576
            {
5387
576
            int descape;
5388
576
            descape = check_escape(&ptr, &d, errorcodeptr, cd->bracount, options, TRUE);
5389
576
            if (*errorcodeptr != 0) goto FAILED;
5390
5391
            /* 0 means a character was put into d; \b is backspace; any other
5392
            special causes an error. */
5393
5394
573
            if (descape != 0)
5395
279
              {
5396
279
              if (descape == ESC_b) d = CHAR_BS; else
5397
5
                {
5398
5
                *errorcodeptr = ERR83;
5399
5
                goto FAILED;
5400
5
                }
5401
279
              }
5402
573
            }
5403
5404
          /* A hyphen followed by a POSIX class is treated in the same way. */
5405
5406
3.43k
          else if (d == CHAR_LEFT_SQUARE_BRACKET &&
5407
3.43k
                   (ptr[1] == CHAR_COLON || ptr[1] == CHAR_DOT ||
5408
978
                    ptr[1] == CHAR_EQUALS_SIGN) &&
5409
3.43k
                   check_posix_syntax(ptr, &tempptr))
5410
1
            {
5411
1
            *errorcodeptr = ERR83;
5412
1
            goto FAILED;
5413
1
            }
5414
4.01k
          }
5415
5416
        /* Check that the two values are in the correct order. Optimize
5417
        one-character ranges. */
5418
5419
4.70k
        if (d < c)
5420
15
          {
5421
15
          *errorcodeptr = ERR8;
5422
15
          goto FAILED;
5423
15
          }
5424
4.69k
        if (d == c) goto CLASS_SINGLE_CHARACTER;  /* A few lines below */
5425
5426
        /* We have found a character range, so single character optimizations
5427
        cannot be done anymore. Any value greater than 1 indicates that there
5428
        is more than one character. */
5429
5430
4.29k
        class_one_char = 2;
5431
5432
        /* Remember an explicit \r or \n, and add the range to the class. */
5433
5434
4.29k
        if (d == CHAR_CR || d == CHAR_NL) cd->external_flags |= PCRE_HASCRORLF;
5435
5436
4.29k
        class_has_8bitchar +=
5437
4.29k
          add_to_class(classbits, &class_uchardata, options, cd, c, d);
5438
5439
4.29k
        continue;   /* Go get the next char in the class */
5440
4.69k
        }
5441
5442
      /* Handle a single character - we can get here for a normal non-escape
5443
      char, or after \ that introduces a single character or for an apparent
5444
      range that isn't. Only the value 1 matters for class_one_char, so don't
5445
      increase it if it is already 2 or more ... just in case there's a class
5446
      with a zillion characters in it. */
5447
5448
949k
      CLASS_SINGLE_CHARACTER:
5449
949k
      if (class_one_char < 2) class_one_char++;
5450
5451
      /* If xclass_has_prop is false and class_one_char is 1, we have the first
5452
      single character in the class, and there have been no prior ranges, or
5453
      XCLASS items generated by escapes. If this is the final character in the
5454
      class, we can optimize by turning the item into a 1-character OP_CHAR[I]
5455
      if it's positive, or OP_NOT[I] if it's negative. In the positive case, it
5456
      can cause firstchar to be set. Otherwise, there can be no first char if
5457
      this item is first, whatever repeat count may follow. In the case of
5458
      reqchar, save the previous value for reinstating. */
5459
5460
949k
      if (!inescq &&
5461
#ifdef SUPPORT_UCP
5462
          !xclass_has_prop &&
5463
#endif
5464
949k
          class_one_char == 1 && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)
5465
4.35k
        {
5466
4.35k
        ptr++;
5467
4.35k
        zeroreqchar = reqchar;
5468
4.35k
        zeroreqcharflags = reqcharflags;
5469
5470
4.35k
        if (negate_class)
5471
2.90k
          {
5472
#ifdef SUPPORT_UCP
5473
          int d;
5474
#endif
5475
2.90k
          if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
5476
2.90k
          zerofirstchar = firstchar;
5477
2.90k
          zerofirstcharflags = firstcharflags;
5478
5479
          /* For caseless UTF-8 mode when UCP support is available, check
5480
          whether this character has more than one other case. If so, generate
5481
          a special OP_NOTPROP item instead of OP_NOTI. */
5482
5483
#ifdef SUPPORT_UCP
5484
          if (utf && (options & PCRE_CASELESS) != 0 &&
5485
              (d = UCD_CASESET(c)) != 0)
5486
            {
5487
            *code++ = OP_NOTPROP;
5488
            *code++ = PT_CLIST;
5489
            *code++ = d;
5490
            }
5491
          else
5492
#endif
5493
          /* Char has only one other case, or UCP not available */
5494
5495
2.90k
            {
5496
2.90k
            *code++ = ((options & PCRE_CASELESS) != 0)? OP_NOTI: OP_NOT;
5497
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5498
            if (utf && c > MAX_VALUE_FOR_SINGLE_CHAR)
5499
              code += PRIV(ord2utf)(c, code);
5500
            else
5501
#endif
5502
2.90k
              *code++ = c;
5503
2.90k
            }
5504
5505
          /* We are finished with this character class */
5506
5507
2.90k
          goto END_CLASS;
5508
2.90k
          }
5509
5510
        /* For a single, positive character, get the value into mcbuffer, and
5511
        then we can handle this with the normal one-character code. */
5512
5513
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5514
        if (utf && c > MAX_VALUE_FOR_SINGLE_CHAR)
5515
          mclength = PRIV(ord2utf)(c, mcbuffer);
5516
        else
5517
#endif
5518
1.44k
          {
5519
1.44k
          mcbuffer[0] = c;
5520
1.44k
          mclength = 1;
5521
1.44k
          }
5522
1.44k
        goto ONE_CHAR;
5523
4.35k
        }       /* End of 1-char optimization */
5524
5525
      /* There is more than one character in the class, or an XCLASS item
5526
      has been generated. Add this character to the class. */
5527
5528
944k
      class_has_8bitchar +=
5529
944k
        add_to_class(classbits, &class_uchardata, options, cd, c, c);
5530
944k
      }
5531
5532
    /* Loop until ']' reached. This "while" is the end of the "do" far above.
5533
    If we are at the end of an internal nested string, revert to the outer
5534
    string. */
5535
5536
1.64M
    while (((c = *(++ptr)) != CHAR_NULL ||
5537
1.64M
           (nestptr != NULL &&
5538
295
             (ptr = nestptr, nestptr = NULL, c = *(++ptr)) != CHAR_NULL)) &&
5539
1.64M
           (c != CHAR_RIGHT_SQUARE_BRACKET || inescq));
5540
5541
    /* Check for missing terminating ']' */
5542
5543
14.7k
    if (c == CHAR_NULL)
5544
336
      {
5545
336
      *errorcodeptr = ERR6;
5546
336
      goto FAILED;
5547
336
      }
5548
5549
    /* We will need an XCLASS if data has been placed in class_uchardata. In
5550
    the second phase this is a sufficient test. However, in the pre-compile
5551
    phase, class_uchardata gets emptied to prevent workspace overflow, so it
5552
    only if the very last character in the class needs XCLASS will it contain
5553
    anything at this point. For this reason, xclass gets set TRUE above when
5554
    uchar_classdata is emptied, and that's why this code is the way it is here
5555
    instead of just doing a test on class_uchardata below. */
5556
5557
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
5558
    if (class_uchardata > class_uchardata_base) xclass = TRUE;
5559
#endif
5560
5561
    /* If this is the first thing in the branch, there can be no first char
5562
    setting, whatever the repeat count. Any reqchar setting must remain
5563
    unchanged after any kind of repeat. */
5564
5565
14.4k
    if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
5566
14.4k
    zerofirstchar = firstchar;
5567
14.4k
    zerofirstcharflags = firstcharflags;
5568
14.4k
    zeroreqchar = reqchar;
5569
14.4k
    zeroreqcharflags = reqcharflags;
5570
5571
    /* If there are characters with values > 255, we have to compile an
5572
    extended class, with its own opcode, unless there was a negated special
5573
    such as \S in the class, and PCRE_UCP is not set, because in that case all
5574
    characters > 255 are in the class, so any that were explicitly given as
5575
    well can be ignored. If (when there are explicit characters > 255 that must
5576
    be listed) there are no characters < 256, we can omit the bitmap in the
5577
    actual compiled code. */
5578
5579
#ifdef SUPPORT_UTF
5580
    if (xclass && (xclass_has_prop || !should_flip_negation ||
5581
        (options & PCRE_UCP) != 0))
5582
#elif !defined COMPILE_PCRE8
5583
    if (xclass && (xclass_has_prop || !should_flip_negation))
5584
#endif
5585
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
5586
      {
5587
      /* For non-UCP wide characters, in a non-negative class containing \S or
5588
      similar (should_flip_negation is set), all characters greater than 255
5589
      must be in the class. */
5590
5591
      if (
5592
#if defined COMPILE_PCRE8
5593
           utf &&
5594
#endif
5595
           should_flip_negation && !negate_class && (options & PCRE_UCP) == 0)
5596
        {
5597
        *class_uchardata++ = XCL_RANGE;
5598
        if (utf)   /* Will always be utf in the 8-bit library */
5599
          {
5600
          class_uchardata += PRIV(ord2utf)(0x100, class_uchardata);
5601
          class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);
5602
          }
5603
        else       /* Can only happen for the 16-bit & 32-bit libraries */
5604
          {
5605
#if defined COMPILE_PCRE16
5606
          *class_uchardata++ = 0x100;
5607
          *class_uchardata++ = 0xffffu;
5608
#elif defined COMPILE_PCRE32
5609
          *class_uchardata++ = 0x100;
5610
          *class_uchardata++ = 0xffffffffu;
5611
#endif
5612
          }
5613
        }
5614
5615
      *class_uchardata++ = XCL_END;    /* Marks the end of extra data */
5616
      *code++ = OP_XCLASS;
5617
      code += LINK_SIZE;
5618
      *code = negate_class? XCL_NOT:0;
5619
      if (xclass_has_prop) *code |= XCL_HASPROP;
5620
5621
      /* If the map is required, move up the extra data to make room for it;
5622
      otherwise just move the code pointer to the end of the extra data. */
5623
5624
      if (class_has_8bitchar > 0)
5625
        {
5626
        *code++ |= XCL_MAP;
5627
        memmove(code + (32 / sizeof(pcre_uchar)), code,
5628
          IN_UCHARS(class_uchardata - code));
5629
        if (negate_class && !xclass_has_prop)
5630
          for (c = 0; c < 32; c++) classbits[c] = ~classbits[c];
5631
        memcpy(code, classbits, 32);
5632
        code = class_uchardata + (32 / sizeof(pcre_uchar));
5633
        }
5634
      else code = class_uchardata;
5635
5636
      /* Now fill in the complete length of the item */
5637
5638
      PUT(previous, 1, (int)(code - previous));
5639
      break;   /* End of class handling */
5640
      }
5641
5642
    /* Even though any XCLASS list is now discarded, we must allow for
5643
    its memory. */
5644
5645
    if (lengthptr != NULL)
5646
      *lengthptr += (int)(class_uchardata - class_uchardata_base);
5647
#endif
5648
5649
    /* If there are no characters > 255, or they are all to be included or
5650
    excluded, set the opcode to OP_CLASS or OP_NCLASS, depending on whether the
5651
    whole class was negated and whether there were negative specials such as \S
5652
    (non-UCP) in the class. Then copy the 32-byte map into the code vector,
5653
    negating it if necessary. */
5654
5655
14.4k
    *code++ = (negate_class == should_flip_negation) ? OP_CLASS : OP_NCLASS;
5656
14.4k
    if (lengthptr == NULL)    /* Save time in the pre-compile phase */
5657
6.57k
      {
5658
6.57k
      if (negate_class)
5659
31.8k
        for (c = 0; c < 32; c++) classbits[c] = ~classbits[c];
5660
6.57k
      memcpy(code, classbits, 32);
5661
6.57k
      }
5662
14.4k
    code += 32 / sizeof(pcre_uchar);
5663
5664
17.3k
    END_CLASS:
5665
17.3k
    break;
5666
5667
5668
    /* ===================================================================*/
5669
    /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
5670
    has been tested above. */
5671
5672
43.0k
    case CHAR_LEFT_CURLY_BRACKET:
5673
43.0k
    if (!is_quantifier) goto NORMAL_CHAR;
5674
18.3k
    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorcodeptr);
5675
18.3k
    if (*errorcodeptr != 0) goto FAILED;
5676
18.3k
    goto REPEAT;
5677
5678
28.0k
    case CHAR_ASTERISK:
5679
28.0k
    repeat_min = 0;
5680
28.0k
    repeat_max = -1;
5681
28.0k
    goto REPEAT;
5682
5683
44.2k
    case CHAR_PLUS:
5684
44.2k
    repeat_min = 1;
5685
44.2k
    repeat_max = -1;
5686
44.2k
    goto REPEAT;
5687
5688
33.6k
    case CHAR_QUESTION_MARK:
5689
33.6k
    repeat_min = 0;
5690
33.6k
    repeat_max = 1;
5691
5692
124k
    REPEAT:
5693
124k
    if (previous == NULL)
5694
68
      {
5695
68
      *errorcodeptr = ERR9;
5696
68
      goto FAILED;
5697
68
      }
5698
5699
124k
    if (repeat_min == 0)
5700
64.4k
      {
5701
64.4k
      firstchar = zerofirstchar;    /* Adjust for zero repeat */
5702
64.4k
      firstcharflags = zerofirstcharflags;
5703
64.4k
      reqchar = zeroreqchar;        /* Ditto */
5704
64.4k
      reqcharflags = zeroreqcharflags;
5705
64.4k
      }
5706
5707
    /* Remember whether this is a variable length repeat */
5708
5709
124k
    reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
5710
5711
124k
    op_type = 0;                    /* Default single-char op codes */
5712
124k
    possessive_quantifier = FALSE;  /* Default not possessive quantifier */
5713
5714
    /* Save start of previous item, in case we have to move it up in order to
5715
    insert something before it. */
5716
5717
124k
    tempcode = previous;
5718
5719
    /* Before checking for a possessive quantifier, we must skip over
5720
    whitespace and comments in extended mode because Perl allows white space at
5721
    this point. */
5722
5723
124k
    if ((options & PCRE_EXTENDED) != 0)
5724
2.30k
      {
5725
2.30k
      const pcre_uchar *p = ptr + 1;
5726
2.30k
      for (;;)
5727
3.06k
        {
5728
3.55k
        while (MAX_255(*p) && (cd->ctypes[*p] & ctype_space) != 0) p++;
5729
3.06k
        if (*p != CHAR_NUMBER_SIGN) break;
5730
763
        p++;
5731
4.25k
        while (*p != CHAR_NULL)
5732
4.20k
          {
5733
4.20k
          if (IS_NEWLINE(p))         /* For non-fixed-length newline cases, */
5734
716
            {                        /* IS_NEWLINE sets cd->nllen. */
5735
716
            p += cd->nllen;
5736
716
            break;
5737
716
            }
5738
3.48k
          p++;
5739
#ifdef SUPPORT_UTF
5740
          if (utf) FORWARDCHAR(p);
5741
#endif
5742
3.48k
          }           /* Loop for comment characters */
5743
763
        }             /* Loop for multiple comments */
5744
2.30k
      ptr = p - 1;    /* Character before the next significant one. */
5745
2.30k
      }
5746
5747
    /* We also need to skip over (?# comments, which are not dependent on
5748
    extended mode. */
5749
5750
124k
    if (ptr[1] == CHAR_LEFT_PARENTHESIS && ptr[2] == CHAR_QUESTION_MARK &&
5751
124k
        ptr[3] == CHAR_NUMBER_SIGN)
5752
230
      {
5753
230
      ptr += 4;
5754
1.04k
      while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
5755
230
      if (*ptr == CHAR_NULL)
5756
11
        {
5757
11
        *errorcodeptr = ERR18;
5758
11
        goto FAILED;
5759
11
        }
5760
230
      }
5761
5762
    /* If the next character is '+', we have a possessive quantifier. This
5763
    implies greediness, whatever the setting of the PCRE_UNGREEDY option.
5764
    If the next character is '?' this is a minimizing repeat, by default,
5765
    but if PCRE_UNGREEDY is set, it works the other way round. We change the
5766
    repeat type to the non-default. */
5767
5768
124k
    if (ptr[1] == CHAR_PLUS)
5769
14.6k
      {
5770
14.6k
      repeat_type = 0;                  /* Force greedy */
5771
14.6k
      possessive_quantifier = TRUE;
5772
14.6k
      ptr++;
5773
14.6k
      }
5774
109k
    else if (ptr[1] == CHAR_QUESTION_MARK)
5775
6.88k
      {
5776
6.88k
      repeat_type = greedy_non_default;
5777
6.88k
      ptr++;
5778
6.88k
      }
5779
102k
    else repeat_type = greedy_default;
5780
5781
    /* If previous was a recursion call, wrap it in atomic brackets so that
5782
    previous becomes the atomic group. All recursions were so wrapped in the
5783
    past, but it no longer happens for non-repeated recursions. In fact, the
5784
    repeated ones could be re-implemented independently so as not to need this,
5785
    but for the moment we rely on the code for repeating groups. */
5786
5787
124k
    if (*previous == OP_RECURSE)
5788
3.68k
      {
5789
3.68k
      memmove(previous + 1 + LINK_SIZE, previous, IN_UCHARS(1 + LINK_SIZE));
5790
3.68k
      *previous = OP_ONCE;
5791
3.68k
      PUT(previous, 1, 2 + 2*LINK_SIZE);
5792
3.68k
      previous[2 + 2*LINK_SIZE] = OP_KET;
5793
3.68k
      PUT(previous, 3 + 2*LINK_SIZE, 2 + 2*LINK_SIZE);
5794
3.68k
      code += 2 + 2 * LINK_SIZE;
5795
3.68k
      length_prevgroup = 3 + 3*LINK_SIZE;
5796
5797
      /* When actually compiling, we need to check whether this was a forward
5798
      reference, and if so, adjust the offset. */
5799
5800
3.68k
      if (lengthptr == NULL && cd->hwm >= cd->start_workspace + LINK_SIZE)
5801
1.02k
        {
5802
1.02k
        int offset = GET(cd->hwm, -LINK_SIZE);
5803
1.02k
        if (offset == previous + 1 - cd->start_code)
5804
451
          PUT(cd->hwm, -LINK_SIZE, offset + 1 + LINK_SIZE);
5805
1.02k
        }
5806
3.68k
      }
5807
5808
    /* Now handle repetition for the different types of item. */
5809
5810
    /* If previous was a character or negated character match, abolish the item
5811
    and generate a repeat item instead. If a char item has a minimum of more
5812
    than one, ensure that it is set in reqchar - it might not be if a sequence
5813
    such as x{3} is the first thing in a branch because the x will have gone
5814
    into firstchar instead.  */
5815
5816
124k
    if (*previous == OP_CHAR || *previous == OP_CHARI
5817
124k
        || *previous == OP_NOT || *previous == OP_NOTI)
5818
59.4k
      {
5819
59.4k
      switch (*previous)
5820
59.4k
        {
5821
0
        default: /* Make compiler happy. */
5822
38.4k
        case OP_CHAR:  op_type = OP_STAR - OP_STAR; break;
5823
18.6k
        case OP_CHARI: op_type = OP_STARI - OP_STAR; break;
5824
1.40k
        case OP_NOT:   op_type = OP_NOTSTAR - OP_STAR; break;
5825
891
        case OP_NOTI:  op_type = OP_NOTSTARI - OP_STAR; break;
5826
59.4k
        }
5827
5828
      /* Deal with UTF characters that take up more than one character. It's
5829
      easier to write this out separately than try to macrify it. Use c to
5830
      hold the length of the character in bytes, plus UTF_LENGTH to flag that
5831
      it's a length rather than a small character. */
5832
5833
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5834
      if (utf && NOT_FIRSTCHAR(code[-1]))
5835
        {
5836
        pcre_uchar *lastchar = code - 1;
5837
        BACKCHAR(lastchar);
5838
        c = (int)(code - lastchar);     /* Length of UTF-8 character */
5839
        memcpy(utf_chars, lastchar, IN_UCHARS(c)); /* Save the char */
5840
        c |= UTF_LENGTH;                /* Flag c as a length */
5841
        }
5842
      else
5843
#endif /* SUPPORT_UTF */
5844
5845
      /* Handle the case of a single charater - either with no UTF support, or
5846
      with UTF disabled, or for a single character UTF character. */
5847
59.4k
        {
5848
59.4k
        c = code[-1];
5849
59.4k
        if (*previous <= OP_CHARI && repeat_min > 1)
5850
3.74k
          {
5851
3.74k
          reqchar = c;
5852
3.74k
          reqcharflags = req_caseopt | cd->req_varyopt;
5853
3.74k
          }
5854
59.4k
        }
5855
5856
59.4k
      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
5857
59.4k
      }
5858
5859
    /* If previous was a character type match (\d or similar), abolish it and
5860
    create a suitable repeat item. The code is shared with single-character
5861
    repeats by setting op_type to add a suitable offset into repeat_type. Note
5862
    the the Unicode property types will be present only when SUPPORT_UCP is
5863
    defined, but we don't wrap the little bits of code here because it just
5864
    makes it horribly messy. */
5865
5866
64.8k
    else if (*previous < OP_EODN)
5867
15.7k
      {
5868
15.7k
      pcre_uchar *oldcode;
5869
15.7k
      int prop_type, prop_value;
5870
15.7k
      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
5871
15.7k
      c = *previous;
5872
5873
75.1k
      OUTPUT_SINGLE_REPEAT:
5874
75.1k
      if (*previous == OP_PROP || *previous == OP_NOTPROP)
5875
0
        {
5876
0
        prop_type = previous[1];
5877
0
        prop_value = previous[2];
5878
0
        }
5879
75.1k
      else prop_type = prop_value = -1;
5880
5881
75.1k
      oldcode = code;
5882
75.1k
      code = previous;                  /* Usually overwrite previous item */
5883
5884
      /* If the maximum is zero then the minimum must also be zero; Perl allows
5885
      this case, so we do too - by simply omitting the item altogether. */
5886
5887
75.1k
      if (repeat_max == 0) goto END_REPEAT;
5888
5889
      /* Combine the op_type with the repeat_type */
5890
5891
74.8k
      repeat_type += op_type;
5892
5893
      /* A minimum of zero is handled either as the special case * or ?, or as
5894
      an UPTO, with the maximum given. */
5895
5896
74.8k
      if (repeat_min == 0)
5897
43.9k
        {
5898
43.9k
        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
5899
23.7k
          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
5900
557
        else
5901
557
          {
5902
557
          *code++ = OP_UPTO + repeat_type;
5903
557
          PUT2INC(code, 0, repeat_max);
5904
557
          }
5905
43.9k
        }
5906
5907
      /* A repeat minimum of 1 is optimized into some special cases. If the
5908
      maximum is unlimited, we use OP_PLUS. Otherwise, the original item is
5909
      left in place and, if the maximum is greater than 1, we use OP_UPTO with
5910
      one less than the maximum. */
5911
5912
30.9k
      else if (repeat_min == 1)
5913
25.9k
        {
5914
25.9k
        if (repeat_max == -1)
5915
24.2k
          *code++ = OP_PLUS + repeat_type;
5916
1.66k
        else
5917
1.66k
          {
5918
1.66k
          code = oldcode;                 /* leave previous item in place */
5919
1.66k
          if (repeat_max == 1) goto END_REPEAT;
5920
1.32k
          *code++ = OP_UPTO + repeat_type;
5921
1.32k
          PUT2INC(code, 0, repeat_max - 1);
5922
1.32k
          }
5923
25.9k
        }
5924
5925
      /* The case {n,n} is just an EXACT, while the general case {n,m} is
5926
      handled as an EXACT followed by an UPTO. */
5927
5928
5.00k
      else
5929
5.00k
        {
5930
5.00k
        *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
5931
5.00k
        PUT2INC(code, 0, repeat_min);
5932
5933
        /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
5934
        we have to insert the character for the previous code. For a repeated
5935
        Unicode property match, there are two extra bytes that define the
5936
        required property. In UTF-8 mode, long characters have their length in
5937
        c, with the UTF_LENGTH bit as a flag. */
5938
5939
5.00k
        if (repeat_max < 0)
5940
272
          {
5941
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5942
          if (utf && (c & UTF_LENGTH) != 0)
5943
            {
5944
            memcpy(code, utf_chars, IN_UCHARS(c & 7));
5945
            code += c & 7;
5946
            }
5947
          else
5948
#endif
5949
272
            {
5950
272
            *code++ = c;
5951
272
            if (prop_type >= 0)
5952
0
              {
5953
0
              *code++ = prop_type;
5954
0
              *code++ = prop_value;
5955
0
              }
5956
272
            }
5957
272
          *code++ = OP_STAR + repeat_type;
5958
272
          }
5959
5960
        /* Else insert an UPTO if the max is greater than the min, again
5961
        preceded by the character, for the previously inserted code. If the
5962
        UPTO is just for 1 instance, we can use QUERY instead. */
5963
5964
4.72k
        else if (repeat_max != repeat_min)
5965
1.26k
          {
5966
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5967
          if (utf && (c & UTF_LENGTH) != 0)
5968
            {
5969
            memcpy(code, utf_chars, IN_UCHARS(c & 7));
5970
            code += c & 7;
5971
            }
5972
          else
5973
#endif
5974
1.26k
          *code++ = c;
5975
1.26k
          if (prop_type >= 0)
5976
0
            {
5977
0
            *code++ = prop_type;
5978
0
            *code++ = prop_value;
5979
0
            }
5980
1.26k
          repeat_max -= repeat_min;
5981
5982
1.26k
          if (repeat_max == 1)
5983
517
            {
5984
517
            *code++ = OP_QUERY + repeat_type;
5985
517
            }
5986
748
          else
5987
748
            {
5988
748
            *code++ = OP_UPTO + repeat_type;
5989
748
            PUT2INC(code, 0, repeat_max);
5990
748
            }
5991
1.26k
          }
5992
5.00k
        }
5993
5994
      /* The character or character type itself comes last in all cases. */
5995
5996
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
5997
      if (utf && (c & UTF_LENGTH) != 0)
5998
        {
5999
        memcpy(code, utf_chars, IN_UCHARS(c & 7));
6000
        code += c & 7;
6001
        }
6002
      else
6003
#endif
6004
74.5k
      *code++ = c;
6005
6006
      /* For a repeated Unicode property match, there are two extra bytes that
6007
      define the required property. */
6008
6009
#ifdef SUPPORT_UCP
6010
      if (prop_type >= 0)
6011
        {
6012
        *code++ = prop_type;
6013
        *code++ = prop_value;
6014
        }
6015
#endif
6016
74.5k
      }
6017
6018
    /* If previous was a character class or a back reference, we put the repeat
6019
    stuff after it, but just skip the item if the repeat was {0,0}. */
6020
6021
49.1k
    else if (*previous == OP_CLASS || *previous == OP_NCLASS ||
6022
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
6023
             *previous == OP_XCLASS ||
6024
#endif
6025
49.1k
             *previous == OP_REF   || *previous == OP_REFI ||
6026
49.1k
             *previous == OP_DNREF || *previous == OP_DNREFI)
6027
13.6k
      {
6028
13.6k
      if (repeat_max == 0)
6029
514
        {
6030
514
        code = previous;
6031
514
        goto END_REPEAT;
6032
514
        }
6033
6034
13.1k
      if (repeat_min == 0 && repeat_max == -1)
6035
2.05k
        *code++ = OP_CRSTAR + repeat_type;
6036
11.1k
      else if (repeat_min == 1 && repeat_max == -1)
6037
4.40k
        *code++ = OP_CRPLUS + repeat_type;
6038
6.71k
      else if (repeat_min == 0 && repeat_max == 1)
6039
5.25k
        *code++ = OP_CRQUERY + repeat_type;
6040
1.45k
      else
6041
1.45k
        {
6042
1.45k
        *code++ = OP_CRRANGE + repeat_type;
6043
1.45k
        PUT2INC(code, 0, repeat_min);
6044
1.45k
        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
6045
1.45k
        PUT2INC(code, 0, repeat_max);
6046
1.45k
        }
6047
13.1k
      }
6048
6049
    /* If previous was a bracket group, we may have to replicate it in certain
6050
    cases. Note that at this point we can encounter only the "basic" bracket
6051
    opcodes such as BRA and CBRA, as this is the place where they get converted
6052
    into the more special varieties such as BRAPOS and SBRA. A test for >=
6053
    OP_ASSERT and <= OP_COND includes ASSERT, ASSERT_NOT, ASSERTBACK,
6054
    ASSERTBACK_NOT, ONCE, ONCE_NC, BRA, BRAPOS, CBRA, CBRAPOS, and COND.
6055
    Originally, PCRE did not allow repetition of assertions, but now it does,
6056
    for Perl compatibility. */
6057
6058
35.4k
    else if (*previous >= OP_ASSERT && *previous <= OP_COND)
6059
35.4k
      {
6060
35.4k
      register int i;
6061
35.4k
      int len = (int)(code - previous);
6062
35.4k
      size_t base_hwm_offset = item_hwm_offset;
6063
35.4k
      pcre_uchar *bralink = NULL;
6064
35.4k
      pcre_uchar *brazeroptr = NULL;
6065
6066
      /* Repeating a DEFINE group is pointless, but Perl allows the syntax, so
6067
      we just ignore the repeat. */
6068
6069
35.4k
      if (*previous == OP_COND && previous[LINK_SIZE+1] == OP_DEF)
6070
197
        goto END_REPEAT;
6071
6072
      /* There is no sense in actually repeating assertions. The only potential
6073
      use of repetition is in cases when the assertion is optional. Therefore,
6074
      if the minimum is greater than zero, just ignore the repeat. If the
6075
      maximum is not zero or one, set it to 1. */
6076
6077
35.2k
      if (*previous < OP_ONCE)    /* Assertion */
6078
2.01k
        {
6079
2.01k
        if (repeat_min > 0) goto END_REPEAT;
6080
1.19k
        if (repeat_max < 0 || repeat_max > 1) repeat_max = 1;
6081
1.19k
        }
6082
6083
      /* The case of a zero minimum is special because of the need to stick
6084
      OP_BRAZERO in front of it, and because the group appears once in the
6085
      data, whereas in other cases it appears the minimum number of times. For
6086
      this reason, it is simplest to treat this case separately, as otherwise
6087
      the code gets far too messy. There are several special subcases when the
6088
      minimum is zero. */
6089
6090
34.4k
      if (repeat_min == 0)
6091
11.9k
        {
6092
        /* If the maximum is also zero, we used to just omit the group from the
6093
        output altogether, like this:
6094
6095
        ** if (repeat_max == 0)
6096
        **   {
6097
        **   code = previous;
6098
        **   goto END_REPEAT;
6099
        **   }
6100
6101
        However, that fails when a group or a subgroup within it is referenced
6102
        as a subroutine from elsewhere in the pattern, so now we stick in
6103
        OP_SKIPZERO in front of it so that it is skipped on execution. As we
6104
        don't have a list of which groups are referenced, we cannot do this
6105
        selectively.
6106
6107
        If the maximum is 1 or unlimited, we just have to stick in the BRAZERO
6108
        and do no more at this point. However, we do need to adjust any
6109
        OP_RECURSE calls inside the group that refer to the group itself or any
6110
        internal or forward referenced group, because the offset is from the
6111
        start of the whole regex. Temporarily terminate the pattern while doing
6112
        this. */
6113
6114
11.9k
        if (repeat_max <= 1)    /* Covers 0, 1, and unlimited */
6115
11.5k
          {
6116
11.5k
          *code = OP_END;
6117
11.5k
          adjust_recurse(previous, 1, utf, cd, item_hwm_offset);
6118
11.5k
          memmove(previous + 1, previous, IN_UCHARS(len));
6119
11.5k
          code++;
6120
11.5k
          if (repeat_max == 0)
6121
461
            {
6122
461
            *previous++ = OP_SKIPZERO;
6123
461
            goto END_REPEAT;
6124
461
            }
6125
11.0k
          brazeroptr = previous;    /* Save for possessive optimizing */
6126
11.0k
          *previous++ = OP_BRAZERO + repeat_type;
6127
11.0k
          }
6128
6129
        /* If the maximum is greater than 1 and limited, we have to replicate
6130
        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
6131
        The first one has to be handled carefully because it's the original
6132
        copy, which has to be moved up. The remainder can be handled by code
6133
        that is common with the non-zero minimum case below. We have to
6134
        adjust the value or repeat_max, since one less copy is required. Once
6135
        again, we may have to adjust any OP_RECURSE calls inside the group. */
6136
6137
379
        else
6138
379
          {
6139
379
          int offset;
6140
379
          *code = OP_END;
6141
379
          adjust_recurse(previous, 2 + LINK_SIZE, utf, cd, item_hwm_offset);
6142
379
          memmove(previous + 2 + LINK_SIZE, previous, IN_UCHARS(len));
6143
379
          code += 2 + LINK_SIZE;
6144
379
          *previous++ = OP_BRAZERO + repeat_type;
6145
379
          *previous++ = OP_BRA;
6146
6147
          /* We chain together the bracket offset fields that have to be
6148
          filled in later when the ends of the brackets are reached. */
6149
6150
379
          offset = (bralink == NULL)? 0 : (int)(previous - bralink);
6151
379
          bralink = previous;
6152
379
          PUTINC(previous, 0, offset);
6153
379
          }
6154
6155
11.4k
        repeat_max--;
6156
11.4k
        }
6157
6158
      /* If the minimum is greater than zero, replicate the group as many
6159
      times as necessary, and adjust the maximum to the number of subsequent
6160
      copies that we need. If we set a first char from the group, and didn't
6161
      set a required char, copy the latter from the former. If there are any
6162
      forward reference subroutine calls in the group, there will be entries on
6163
      the workspace list; replicate these with an appropriate increment. */
6164
6165
22.5k
      else
6166
22.5k
        {
6167
22.5k
        if (repeat_min > 1)
6168
7.44k
          {
6169
          /* In the pre-compile phase, we don't actually do the replication. We
6170
          just adjust the length as if we had. Do some paranoid checks for
6171
          potential integer overflow. The INT64_OR_DOUBLE type is a 64-bit
6172
          integer type when available, otherwise double. */
6173
6174
7.44k
          if (lengthptr != NULL)
6175
4.01k
            {
6176
4.01k
            int delta = (repeat_min - 1)*length_prevgroup;
6177
4.01k
            if ((INT64_OR_DOUBLE)(repeat_min - 1)*
6178
4.01k
                  (INT64_OR_DOUBLE)length_prevgroup >
6179
4.01k
                    (INT64_OR_DOUBLE)INT_MAX ||
6180
4.01k
                OFLOW_MAX - *lengthptr < delta)
6181
30
              {
6182
30
              *errorcodeptr = ERR20;
6183
30
              goto FAILED;
6184
30
              }
6185
3.98k
            *lengthptr += delta;
6186
3.98k
            }
6187
6188
          /* This is compiling for real. If there is a set first byte for
6189
          the group, and we have not yet set a "required byte", set it. Make
6190
          sure there is enough workspace for copying forward references before
6191
          doing the copy. */
6192
6193
3.42k
          else
6194
3.42k
            {
6195
3.42k
            if (groupsetfirstchar && reqcharflags < 0)
6196
387
              {
6197
387
              reqchar = firstchar;
6198
387
              reqcharflags = firstcharflags;
6199
387
              }
6200
6201
684k
            for (i = 1; i < repeat_min; i++)
6202
680k
              {
6203
680k
              pcre_uchar *hc;
6204
680k
              size_t this_hwm_offset = cd->hwm - cd->start_workspace;
6205
680k
              memcpy(code, previous, IN_UCHARS(len));
6206
6207
680k
              while (cd->hwm > cd->start_workspace + cd->workspace_size -
6208
680k
                     WORK_SIZE_SAFETY_MARGIN -
6209
680k
                     (this_hwm_offset - base_hwm_offset))
6210
16
                {
6211
16
                *errorcodeptr = expand_workspace(cd);
6212
16
                if (*errorcodeptr != 0) goto FAILED;
6213
16
                }
6214
6215
680k
              for (hc = (pcre_uchar *)cd->start_workspace + base_hwm_offset;
6216
750k
                   hc < (pcre_uchar *)cd->start_workspace + this_hwm_offset;
6217
680k
                   hc += LINK_SIZE)
6218
69.4k
                {
6219
69.4k
                PUT(cd->hwm, 0, GET(hc, 0) + len);
6220
69.4k
                cd->hwm += LINK_SIZE;
6221
69.4k
                }
6222
680k
              base_hwm_offset = this_hwm_offset;
6223
680k
              code += len;
6224
680k
              }
6225
3.42k
            }
6226
7.44k
          }
6227
6228
22.5k
        if (repeat_max > 0) repeat_max -= repeat_min;
6229
22.5k
        }
6230
6231
      /* This code is common to both the zero and non-zero minimum cases. If
6232
      the maximum is limited, it replicates the group in a nested fashion,
6233
      remembering the bracket starts on a stack. In the case of a zero minimum,
6234
      the first one was set up above. In all cases the repeat_max now specifies
6235
      the number of additional copies needed. Again, we must remember to
6236
      replicate entries on the forward reference list. */
6237
6238
33.9k
      if (repeat_max >= 0)
6239
13.2k
        {
6240
        /* In the pre-compile phase, we don't actually do the replication. We
6241
        just adjust the length as if we had. For each repetition we must add 1
6242
        to the length for BRAZERO and for all but the last repetition we must
6243
        add 2 + 2*LINKSIZE to allow for the nesting that occurs. Do some
6244
        paranoid checks to avoid integer overflow. The INT64_OR_DOUBLE type is
6245
        a 64-bit integer type when available, otherwise double. */
6246
6247
13.2k
        if (lengthptr != NULL && repeat_max > 0)
6248
723
          {
6249
723
          int delta = repeat_max * (length_prevgroup + 1 + 2 + 2*LINK_SIZE) -
6250
723
                      2 - 2*LINK_SIZE;   /* Last one doesn't nest */
6251
723
          if ((INT64_OR_DOUBLE)repeat_max *
6252
723
                (INT64_OR_DOUBLE)(length_prevgroup + 1 + 2 + 2*LINK_SIZE)
6253
723
                  > (INT64_OR_DOUBLE)INT_MAX ||
6254
723
              OFLOW_MAX - *lengthptr < delta)
6255
31
            {
6256
31
            *errorcodeptr = ERR20;
6257
31
            goto FAILED;
6258
31
            }
6259
692
          *lengthptr += delta;
6260
692
          }
6261
6262
        /* This is compiling for real */
6263
6264
34.8k
        else for (i = repeat_max - 1; i >= 0; i--)
6265
22.3k
          {
6266
22.3k
          pcre_uchar *hc;
6267
22.3k
          size_t this_hwm_offset = cd->hwm - cd->start_workspace;
6268
6269
22.3k
          *code++ = OP_BRAZERO + repeat_type;
6270
6271
          /* All but the final copy start a new nesting, maintaining the
6272
          chain of brackets outstanding. */
6273
6274
22.3k
          if (i != 0)
6275
21.8k
            {
6276
21.8k
            int offset;
6277
21.8k
            *code++ = OP_BRA;
6278
21.8k
            offset = (bralink == NULL)? 0 : (int)(code - bralink);
6279
21.8k
            bralink = code;
6280
21.8k
            PUTINC(code, 0, offset);
6281
21.8k
            }
6282
6283
22.3k
          memcpy(code, previous, IN_UCHARS(len));
6284
6285
          /* Ensure there is enough workspace for forward references before
6286
          copying them. */
6287
6288
22.3k
          while (cd->hwm > cd->start_workspace + cd->workspace_size -
6289
22.3k
                 WORK_SIZE_SAFETY_MARGIN -
6290
22.3k
                 (this_hwm_offset - base_hwm_offset))
6291
4
            {
6292
4
            *errorcodeptr = expand_workspace(cd);
6293
4
            if (*errorcodeptr != 0) goto FAILED;
6294
4
            }
6295
6296
22.3k
          for (hc = (pcre_uchar *)cd->start_workspace + base_hwm_offset;
6297
33.8k
               hc < (pcre_uchar *)cd->start_workspace + this_hwm_offset;
6298
22.3k
               hc += LINK_SIZE)
6299
11.5k
            {
6300
11.5k
            PUT(cd->hwm, 0, GET(hc, 0) + len + ((i != 0)? 2+LINK_SIZE : 1));
6301
11.5k
            cd->hwm += LINK_SIZE;
6302
11.5k
            }
6303
22.3k
          base_hwm_offset = this_hwm_offset;
6304
22.3k
          code += len;
6305
22.3k
          }
6306
6307
        /* Now chain through the pending brackets, and fill in their length
6308
        fields (which are holding the chain links pro tem). */
6309
6310
35.4k
        while (bralink != NULL)
6311
22.2k
          {
6312
22.2k
          int oldlinkoffset;
6313
22.2k
          int offset = (int)(code - bralink + 1);
6314
22.2k
          pcre_uchar *bra = code - offset;
6315
22.2k
          oldlinkoffset = GET(bra, 1);
6316
22.2k
          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
6317
22.2k
          *code++ = OP_KET;
6318
22.2k
          PUTINC(code, 0, offset);
6319
22.2k
          PUT(bra, 1, offset);
6320
22.2k
          }
6321
13.2k
        }
6322
6323
      /* If the maximum is unlimited, set a repeater in the final copy. For
6324
      ONCE brackets, that's all we need to do. However, possessively repeated
6325
      ONCE brackets can be converted into non-capturing brackets, as the
6326
      behaviour of (?:xx)++ is the same as (?>xx)++ and this saves having to
6327
      deal with possessive ONCEs specially.
6328
6329
      Otherwise, when we are doing the actual compile phase, check to see
6330
      whether this group is one that could match an empty string. If so,
6331
      convert the initial operator to the S form (e.g. OP_BRA -> OP_SBRA) so
6332
      that runtime checking can be done. [This check is also applied to ONCE
6333
      groups at runtime, but in a different way.]
6334
6335
      Then, if the quantifier was possessive and the bracket is not a
6336
      conditional, we convert the BRA code to the POS form, and the KET code to
6337
      KETRPOS. (It turns out to be convenient at runtime to detect this kind of
6338
      subpattern at both the start and at the end.) The use of special opcodes
6339
      makes it possible to reduce greatly the stack usage in pcre_exec(). If
6340
      the group is preceded by OP_BRAZERO, convert this to OP_BRAPOSZERO.
6341
6342
      Then, if the minimum number of matches is 1 or 0, cancel the possessive
6343
      flag so that the default action below, of wrapping everything inside
6344
      atomic brackets, does not happen. When the minimum is greater than 1,
6345
      there will be earlier copies of the group, and so we still have to wrap
6346
      the whole thing. */
6347
6348
20.7k
      else
6349
20.7k
        {
6350
20.7k
        pcre_uchar *ketcode = code - 1 - LINK_SIZE;
6351
20.7k
        pcre_uchar *bracode = ketcode - GET(ketcode, 1);
6352
6353
        /* Convert possessive ONCE brackets to non-capturing */
6354
6355
20.7k
        if ((*bracode == OP_ONCE || *bracode == OP_ONCE_NC) &&
6356
20.7k
            possessive_quantifier) *bracode = OP_BRA;
6357
6358
        /* For non-possessive ONCE brackets, all we need to do is to
6359
        set the KET. */
6360
6361
20.7k
        if (*bracode == OP_ONCE || *bracode == OP_ONCE_NC)
6362
1.67k
          *ketcode = OP_KETRMAX + repeat_type;
6363
6364
        /* Handle non-ONCE brackets and possessive ONCEs (which have been
6365
        converted to non-capturing above). */
6366
6367
19.0k
        else
6368
19.0k
          {
6369
          /* In the compile phase, check for empty string matching. */
6370
6371
19.0k
          if (lengthptr == NULL)
6372
8.08k
            {
6373
8.08k
            pcre_uchar *scode = bracode;
6374
8.08k
            do
6375
10.0k
              {
6376
10.0k
              if (could_be_empty_branch(scode, ketcode, utf, cd, NULL))
6377
3.75k
                {
6378
3.75k
                *bracode += OP_SBRA - OP_BRA;
6379
3.75k
                break;
6380
3.75k
                }
6381
6.28k
              scode += GET(scode, 1);
6382
6.28k
              }
6383
8.08k
            while (*scode == OP_ALT);
6384
8.08k
            }
6385
6386
          /* A conditional group with only one branch has an implicit empty
6387
          alternative branch. */
6388
6389
19.0k
          if (*bracode == OP_COND && bracode[GET(bracode,1)] != OP_ALT)
6390
2.06k
            *bracode = OP_SCOND;
6391
6392
          /* Handle possessive quantifiers. */
6393
6394
19.0k
          if (possessive_quantifier)
6395
7.05k
            {
6396
            /* For COND brackets, we wrap the whole thing in a possessively
6397
            repeated non-capturing bracket, because we have not invented POS
6398
            versions of the COND opcodes. Because we are moving code along, we
6399
            must ensure that any pending recursive references are updated. */
6400
6401
7.05k
            if (*bracode == OP_COND || *bracode == OP_SCOND)
6402
1.58k
              {
6403
1.58k
              int nlen = (int)(code - bracode);
6404
1.58k
              *code = OP_END;
6405
1.58k
              adjust_recurse(bracode, 1 + LINK_SIZE, utf, cd, item_hwm_offset);
6406
1.58k
              memmove(bracode + 1 + LINK_SIZE, bracode, IN_UCHARS(nlen));
6407
1.58k
              code += 1 + LINK_SIZE;
6408
1.58k
              nlen += 1 + LINK_SIZE;
6409
1.58k
              *bracode = (*bracode == OP_COND)? OP_BRAPOS : OP_SBRAPOS;
6410
1.58k
              *code++ = OP_KETRPOS;
6411
1.58k
              PUTINC(code, 0, nlen);
6412
1.58k
              PUT(bracode, 1, nlen);
6413
1.58k
              }
6414
6415
            /* For non-COND brackets, we modify the BRA code and use KETRPOS. */
6416
6417
5.47k
            else
6418
5.47k
              {
6419
5.47k
              *bracode += 1;              /* Switch to xxxPOS opcodes */
6420
5.47k
              *ketcode = OP_KETRPOS;
6421
5.47k
              }
6422
6423
            /* If the minimum is zero, mark it as possessive, then unset the
6424
            possessive flag when the minimum is 0 or 1. */
6425
6426
7.05k
            if (brazeroptr != NULL) *brazeroptr = OP_BRAPOSZERO;
6427
7.05k
            if (repeat_min < 2) possessive_quantifier = FALSE;
6428
7.05k
            }
6429
6430
          /* Non-possessive quantifier */
6431
6432
12.0k
          else *ketcode = OP_KETRMAX + repeat_type;
6433
19.0k
          }
6434
20.7k
        }
6435
33.9k
      }
6436
6437
    /* If previous is OP_FAIL, it was generated by an empty class [] in
6438
    JavaScript mode. The other ways in which OP_FAIL can be generated, that is
6439
    by (*FAIL) or (?!) set previous to NULL, which gives a "nothing to repeat"
6440
    error above. We can just ignore the repeat in JS case. */
6441
6442
0
    else if (*previous == OP_FAIL) goto END_REPEAT;
6443
6444
    /* Else there's some kind of shambles */
6445
6446
0
    else
6447
0
      {
6448
0
      *errorcodeptr = ERR11;
6449
0
      goto FAILED;
6450
0
      }
6451
6452
    /* If the character following a repeat is '+', possessive_quantifier is
6453
    TRUE. For some opcodes, there are special alternative opcodes for this
6454
    case. For anything else, we wrap the entire repeated item inside OP_ONCE
6455
    brackets. Logically, the '+' notation is just syntactic sugar, taken from
6456
    Sun's Java package, but the special opcodes can optimize it.
6457
6458
    Some (but not all) possessively repeated subpatterns have already been
6459
    completely handled in the code just above. For them, possessive_quantifier
6460
    is always FALSE at this stage. Note that the repeated item starts at
6461
    tempcode, not at previous, which might be the first part of a string whose
6462
    (former) last char we repeated. */
6463
6464
121k
    if (possessive_quantifier)
6465
7.81k
      {
6466
7.81k
      int len;
6467
6468
      /* Possessifying an EXACT quantifier has no effect, so we can ignore it.
6469
      However, QUERY, STAR, or UPTO may follow (for quantifiers such as {5,6},
6470
      {5,}, or {5,10}). We skip over an EXACT item; if the length of what
6471
      remains is greater than zero, there's a further opcode that can be
6472
      handled. If not, do nothing, leaving the EXACT alone. */
6473
6474
7.81k
      switch(*tempcode)
6475
7.81k
        {
6476
222
        case OP_TYPEEXACT:
6477
222
        tempcode += PRIV(OP_lengths)[*tempcode] +
6478
222
          ((tempcode[1 + IMM2_SIZE] == OP_PROP
6479
222
          || tempcode[1 + IMM2_SIZE] == OP_NOTPROP)? 2 : 0);
6480
222
        break;
6481
6482
        /* CHAR opcodes are used for exacts whose count is 1. */
6483
6484
215
        case OP_CHAR:
6485
683
        case OP_CHARI:
6486
884
        case OP_NOT:
6487
1.08k
        case OP_NOTI:
6488
1.50k
        case OP_EXACT:
6489
1.73k
        case OP_EXACTI:
6490
1.96k
        case OP_NOTEXACT:
6491
2.23k
        case OP_NOTEXACTI:
6492
2.23k
        tempcode += PRIV(OP_lengths)[*tempcode];
6493
#ifdef SUPPORT_UTF
6494
        if (utf && HAS_EXTRALEN(tempcode[-1]))
6495
          tempcode += GET_EXTRALEN(tempcode[-1]);
6496
#endif
6497
2.23k
        break;
6498
6499
        /* For the class opcodes, the repeat operator appears at the end;
6500
        adjust tempcode to point to it. */
6501
6502
519
        case OP_CLASS:
6503
781
        case OP_NCLASS:
6504
781
        tempcode += 1 + 32/sizeof(pcre_uchar);
6505
781
        break;
6506
6507
#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
6508
        case OP_XCLASS:
6509
        tempcode += GET(tempcode, 1);
6510
        break;
6511
#endif
6512
7.81k
        }
6513
6514
      /* If tempcode is equal to code (which points to the end of the repeated
6515
      item), it means we have skipped an EXACT item but there is no following
6516
      QUERY, STAR, or UPTO; the value of len will be 0, and we do nothing. In
6517
      all other cases, tempcode will be pointing to the repeat opcode, and will
6518
      be less than code, so the value of len will be greater than 0. */
6519
6520
7.81k
      len = (int)(code - tempcode);
6521
7.81k
      if (len > 0)
6522
6.73k
        {
6523
6.73k
        unsigned int repcode = *tempcode;
6524
6525
        /* There is a table for possessifying opcodes, all of which are less
6526
        than OP_CALLOUT. A zero entry means there is no possessified version.
6527
        */
6528
6529
6.73k
        if (repcode < OP_CALLOUT && opcode_possessify[repcode] > 0)
6530
4.82k
          *tempcode = opcode_possessify[repcode];
6531
6532
        /* For opcode without a special possessified version, wrap the item in
6533
        ONCE brackets. Because we are moving code along, we must ensure that any
6534
        pending recursive references are updated. */
6535
6536
1.91k
        else
6537
1.91k
          {
6538
1.91k
          *code = OP_END;
6539
1.91k
          adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, item_hwm_offset);
6540
1.91k
          memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len));
6541
1.91k
          code += 1 + LINK_SIZE;
6542
1.91k
          len += 1 + LINK_SIZE;
6543
1.91k
          tempcode[0] = OP_ONCE;
6544
1.91k
          *code++ = OP_KET;
6545
1.91k
          PUTINC(code, 0, len);
6546
1.91k
          PUT(tempcode, 1, len);
6547
1.91k
          }
6548
6.73k
        }
6549
6550
#ifdef NEVER
6551
      if (len > 0) switch (*tempcode)
6552
        {
6553
        case OP_STAR:  *tempcode = OP_POSSTAR; break;
6554
        case OP_PLUS:  *tempcode = OP_POSPLUS; break;
6555
        case OP_QUERY: *tempcode = OP_POSQUERY; break;
6556
        case OP_UPTO:  *tempcode = OP_POSUPTO; break;
6557
6558
        case OP_STARI:  *tempcode = OP_POSSTARI; break;
6559
        case OP_PLUSI:  *tempcode = OP_POSPLUSI; break;
6560
        case OP_QUERYI: *tempcode = OP_POSQUERYI; break;
6561
        case OP_UPTOI:  *tempcode = OP_POSUPTOI; break;
6562
6563
        case OP_NOTSTAR:  *tempcode = OP_NOTPOSSTAR; break;
6564
        case OP_NOTPLUS:  *tempcode = OP_NOTPOSPLUS; break;
6565
        case OP_NOTQUERY: *tempcode = OP_NOTPOSQUERY; break;
6566
        case OP_NOTUPTO:  *tempcode = OP_NOTPOSUPTO; break;
6567
6568
        case OP_NOTSTARI:  *tempcode = OP_NOTPOSSTARI; break;
6569
        case OP_NOTPLUSI:  *tempcode = OP_NOTPOSPLUSI; break;
6570
        case OP_NOTQUERYI: *tempcode = OP_NOTPOSQUERYI; break;
6571
        case OP_NOTUPTOI:  *tempcode = OP_NOTPOSUPTOI; break;
6572
6573
        case OP_TYPESTAR:  *tempcode = OP_TYPEPOSSTAR; break;
6574
        case OP_TYPEPLUS:  *tempcode = OP_TYPEPOSPLUS; break;
6575
        case OP_TYPEQUERY: *tempcode = OP_TYPEPOSQUERY; break;
6576
        case OP_TYPEUPTO:  *tempcode = OP_TYPEPOSUPTO; break;
6577
6578
        case OP_CRSTAR:   *tempcode = OP_CRPOSSTAR; break;
6579
        case OP_CRPLUS:   *tempcode = OP_CRPOSPLUS; break;
6580
        case OP_CRQUERY:  *tempcode = OP_CRPOSQUERY; break;
6581
        case OP_CRRANGE:  *tempcode = OP_CRPOSRANGE; break;
6582
6583
        /* Because we are moving code along, we must ensure that any
6584
        pending recursive references are updated. */
6585
6586
        default:
6587
        *code = OP_END;
6588
        adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, item_hwm_offset);
6589
        memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len));
6590
        code += 1 + LINK_SIZE;
6591
        len += 1 + LINK_SIZE;
6592
        tempcode[0] = OP_ONCE;
6593
        *code++ = OP_KET;
6594
        PUTINC(code, 0, len);
6595
        PUT(tempcode, 1, len);
6596
        break;
6597
        }
6598
#endif
6599
7.81k
      }
6600
6601
    /* In all case we no longer have a previous item. We also set the
6602
    "follows varying string" flag for subsequently encountered reqchars if
6603
    it isn't already set and we have just passed a varying length item. */
6604
6605
124k
    END_REPEAT:
6606
124k
    previous = NULL;
6607
124k
    cd->req_varyopt |= reqvary;
6608
124k
    break;
6609
6610
6611
    /* ===================================================================*/
6612
    /* Start of nested parenthesized sub-expression, or comment or lookahead or
6613
    lookbehind or option setting or condition or all the other extended
6614
    parenthesis forms.  */
6615
6616
523k
    case CHAR_LEFT_PARENTHESIS:
6617
523k
    ptr++;
6618
6619
    /* Now deal with various "verbs" that can be introduced by '*'. */
6620
6621
523k
    if (ptr[0] == CHAR_ASTERISK && (ptr[1] == ':'
6622
4.65k
         || (MAX_255(ptr[1]) && ((cd->ctypes[ptr[1]] & ctype_letter) != 0))))
6623
4.63k
      {
6624
4.63k
      int i, namelen;
6625
4.63k
      int arglen = 0;
6626
4.63k
      const char *vn = verbnames;
6627
4.63k
      const pcre_uchar *name = ptr + 1;
6628
4.63k
      const pcre_uchar *arg = NULL;
6629
4.63k
      previous = NULL;
6630
4.63k
      ptr++;
6631
1.86M
      while (MAX_255(*ptr) && (cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
6632
4.63k
      namelen = (int)(ptr - name);
6633
6634
      /* It appears that Perl allows any characters whatsoever, other than
6635
      a closing parenthesis, to appear in arguments, so we no longer insist on
6636
      letters, digits, and underscores. */
6637
6638
4.63k
      if (*ptr == CHAR_COLON)
6639
2.01k
        {
6640
2.01k
        arg = ++ptr;
6641
1.10M
        while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
6642
2.01k
        arglen = (int)(ptr - arg);
6643
2.01k
        if ((unsigned int)arglen > MAX_MARK)
6644
9
          {
6645
9
          *errorcodeptr = ERR75;
6646
9
          goto FAILED;
6647
9
          }
6648
2.01k
        }
6649
6650
4.62k
      if (*ptr != CHAR_RIGHT_PARENTHESIS)
6651
748
        {
6652
748
        *errorcodeptr = ERR60;
6653
748
        goto FAILED;
6654
748
        }
6655
6656
      /* Scan the table of verb names */
6657
6658
17.9k
      for (i = 0; i < verbcount; i++)
6659
17.9k
        {
6660
17.9k
        if (namelen == verbs[i].len &&
6661
17.9k
            STRNCMP_UC_C8(name, vn, namelen) == 0)
6662
3.81k
          {
6663
3.81k
          int setverb;
6664
6665
          /* Check for open captures before ACCEPT and convert it to
6666
          ASSERT_ACCEPT if in an assertion. */
6667
6668
3.81k
          if (verbs[i].op == OP_ACCEPT)
6669
1.14k
            {
6670
1.14k
            open_capitem *oc;
6671
1.14k
            if (arglen != 0)
6672
1
              {
6673
1
              *errorcodeptr = ERR59;
6674
1
              goto FAILED;
6675
1
              }
6676
1.14k
            cd->had_accept = TRUE;
6677
20.4k
            for (oc = cd->open_caps; oc != NULL; oc = oc->next)
6678
19.2k
              {
6679
19.2k
              if (lengthptr != NULL)
6680
18.4k
                {
6681
18.4k
#ifdef COMPILE_PCRE8
6682
18.4k
                *lengthptr += 1 + IMM2_SIZE;
6683
#elif defined COMPILE_PCRE16
6684
                *lengthptr += 2 + IMM2_SIZE;
6685
#elif defined COMPILE_PCRE32
6686
                *lengthptr += 4 + IMM2_SIZE;
6687
#endif
6688
18.4k
                }
6689
766
              else
6690
766
                {
6691
766
                *code++ = OP_CLOSE;
6692
766
                PUT2INC(code, 0, oc->number);
6693
766
                }
6694
19.2k
              }
6695
1.14k
            setverb = *code++ =
6696
1.14k
              (cd->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT;
6697
6698
            /* Do not set firstchar after *ACCEPT */
6699
1.14k
            if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
6700
1.14k
            }
6701
6702
          /* Handle other cases with/without an argument */
6703
6704
2.67k
          else if (arglen == 0)
6705
786
            {
6706
786
            if (verbs[i].op < 0)   /* Argument is mandatory */
6707
3
              {
6708
3
              *errorcodeptr = ERR66;
6709
3
              goto FAILED;
6710
3
              }
6711
783
            setverb = *code++ = verbs[i].op;
6712
783
            }
6713
6714
1.88k
          else
6715
1.88k
            {
6716
1.88k
            if (verbs[i].op_arg < 0)   /* Argument is forbidden */
6717
1
              {
6718
1
              *errorcodeptr = ERR59;
6719
1
              goto FAILED;
6720
1
              }
6721
1.88k
            setverb = *code++ = verbs[i].op_arg;
6722
1.88k
            if (lengthptr != NULL)    /* In pass 1 just add in the length */
6723
962
              {                       /* to avoid potential workspace */
6724
962
              *lengthptr += arglen;   /* overflow. */
6725
962
              *code++ = 0;
6726
962
              }
6727
925
            else
6728
925
              {
6729
925
              *code++ = arglen;
6730
925
              memcpy(code, arg, IN_UCHARS(arglen));
6731
925
              code += arglen;
6732
925
              }
6733
1.88k
            *code++ = 0;
6734
1.88k
            }
6735
6736
3.81k
          switch (setverb)
6737
3.81k
            {
6738
275
            case OP_THEN:
6739
555
            case OP_THEN_ARG:
6740
555
            cd->external_flags |= PCRE_HASTHEN;
6741
555
            break;
6742
6743
100
            case OP_PRUNE:
6744
368
            case OP_PRUNE_ARG:
6745
590
            case OP_SKIP:
6746
926
            case OP_SKIP_ARG:
6747
926
            cd->had_pruneorskip = TRUE;
6748
926
            break;
6749
3.81k
            }
6750
6751
3.81k
          break;  /* Found verb, exit loop */
6752
3.81k
          }
6753
6754
14.1k
        vn += verbs[i].len + 1;
6755
14.1k
        }
6756
6757
3.87k
      if (i < verbcount) continue;    /* Successfully handled a verb */
6758
60
      *errorcodeptr = ERR60;          /* Verb not recognized */
6759
60
      goto FAILED;
6760
3.87k
      }
6761
6762
    /* Initialize for "real" parentheses */
6763
6764
519k
    newoptions = options;
6765
519k
    skipbytes = 0;
6766
519k
    bravalue = OP_CBRA;
6767
519k
    item_hwm_offset = cd->hwm - cd->start_workspace;
6768
519k
    reset_bracount = FALSE;
6769
6770
    /* Deal with the extended parentheses; all are introduced by '?', and the
6771
    appearance of any of them means that this is not a capturing group. */
6772
6773
519k
    if (*ptr == CHAR_QUESTION_MARK)
6774
126k
      {
6775
126k
      int i, set, unset, namelen;
6776
126k
      int *optset;
6777
126k
      const pcre_uchar *name;
6778
126k
      pcre_uchar *slot;
6779
6780
126k
      switch (*(++ptr))
6781
126k
        {
6782
        /* ------------------------------------------------------------ */
6783
4.57k
        case CHAR_VERTICAL_LINE:  /* Reset capture count for each branch */
6784
4.57k
        reset_bracount = TRUE;
6785
4.57k
        cd->dupgroups = TRUE;     /* Record (?| encountered */
6786
        /* Fall through */
6787
6788
        /* ------------------------------------------------------------ */
6789
5.62k
        case CHAR_COLON:          /* Non-capturing bracket */
6790
5.62k
        bravalue = OP_BRA;
6791
5.62k
        ptr++;
6792
5.62k
        break;
6793
6794
6795
        /* ------------------------------------------------------------ */
6796
11.7k
        case CHAR_LEFT_PARENTHESIS:
6797
11.7k
        bravalue = OP_COND;       /* Conditional group */
6798
11.7k
        tempptr = ptr;
6799
6800
        /* A condition can be an assertion, a number (referring to a numbered
6801
        group's having been set), a name (referring to a named group), or 'R',
6802
        referring to recursion. R<digits> and R&name are also permitted for
6803
        recursion tests.
6804
6805
        There are ways of testing a named group: (?(name)) is used by Python;
6806
        Perl 5.10 onwards uses (?(<name>) or (?('name')).
6807
6808
        There is one unfortunate ambiguity, caused by history. 'R' can be the
6809
        recursive thing or the name 'R' (and similarly for 'R' followed by
6810
        digits). We look for a name first; if not found, we try the other case.
6811
6812
        For compatibility with auto-callouts, we allow a callout to be
6813
        specified before a condition that is an assertion. First, check for the
6814
        syntax of a callout; if found, adjust the temporary pointer that is
6815
        used to check for an assertion condition. That's all that is needed! */
6816
6817
11.7k
        if (ptr[1] == CHAR_QUESTION_MARK && ptr[2] == CHAR_C)
6818
258
          {
6819
453
          for (i = 3;; i++) if (!IS_DIGIT(ptr[i])) break;
6820
258
          if (ptr[i] == CHAR_RIGHT_PARENTHESIS)
6821
235
            tempptr += i + 1;
6822
6823
          /* tempptr should now be pointing to the opening parenthesis of the
6824
          assertion condition. */
6825
6826
258
          if (*tempptr != CHAR_LEFT_PARENTHESIS)
6827
9
            {
6828
9
            *errorcodeptr = ERR28;
6829
9
            goto FAILED;
6830
9
            }
6831
258
          }
6832
6833
        /* For conditions that are assertions, check the syntax, and then exit
6834
        the switch. This will take control down to where bracketed groups,
6835
        including assertions, are processed. */
6836
6837
11.7k
        if (tempptr[1] == CHAR_QUESTION_MARK &&
6838
11.7k
              (tempptr[2] == CHAR_EQUALS_SIGN ||
6839
1.92k
               tempptr[2] == CHAR_EXCLAMATION_MARK ||
6840
1.92k
                 (tempptr[2] == CHAR_LESS_THAN_SIGN &&
6841
733
                   (tempptr[3] == CHAR_EQUALS_SIGN ||
6842
700
                    tempptr[3] == CHAR_EXCLAMATION_MARK))))
6843
1.89k
          {
6844
1.89k
          cd->iscondassert = TRUE;
6845
1.89k
          break;
6846
1.89k
          }
6847
6848
        /* Other conditions use OP_CREF/OP_DNCREF/OP_RREF/OP_DNRREF, and all
6849
        need to skip at least 1+IMM2_SIZE bytes at the start of the group. */
6850
6851
9.85k
        code[1+LINK_SIZE] = OP_CREF;
6852
9.85k
        skipbytes = 1+IMM2_SIZE;
6853
9.85k
        refsign = -1;     /* => not a number */
6854
9.85k
        namelen = -1;     /* => not a name; must set to avoid warning */
6855
9.85k
        name = NULL;      /* Always set to avoid warning */
6856
9.85k
        recno = 0;        /* Always set to avoid warning */
6857
6858
        /* Check for a test for recursion in a named group. */
6859
6860
9.85k
        ptr++;
6861
9.85k
        if (*ptr == CHAR_R && ptr[1] == CHAR_AMPERSAND)
6862
406
          {
6863
406
          terminator = -1;
6864
406
          ptr += 2;
6865
406
          code[1+LINK_SIZE] = OP_RREF;    /* Change the type of test */
6866
406
          }
6867
6868
        /* Check for a test for a named group's having been set, using the Perl
6869
        syntax (?(<name>) or (?('name'), and also allow for the original PCRE
6870
        syntax of (?(name) or for (?(+n), (?(-n), and just (?(n). */
6871
6872
9.44k
        else if (*ptr == CHAR_LESS_THAN_SIGN)
6873
278
          {
6874
278
          terminator = CHAR_GREATER_THAN_SIGN;
6875
278
          ptr++;
6876
278
          }
6877
9.16k
        else if (*ptr == CHAR_APOSTROPHE)
6878
824
          {
6879
824
          terminator = CHAR_APOSTROPHE;
6880
824
          ptr++;
6881
824
          }
6882
8.34k
        else
6883
8.34k
          {
6884
8.34k
          terminator = CHAR_NULL;
6885
8.34k
          if (*ptr == CHAR_MINUS || *ptr == CHAR_PLUS) refsign = *ptr++;
6886
6.66k
            else if (IS_DIGIT(*ptr)) refsign = 0;
6887
8.34k
          }
6888
6889
        /* Handle a number */
6890
6891
9.85k
        if (refsign >= 0)
6892
3.26k
          {
6893
7.62k
          while (IS_DIGIT(*ptr))
6894
4.37k
            {
6895
4.37k
            if (recno > INT_MAX / 10 - 1)  /* Integer overflow */
6896
11
              {
6897
210
              while (IS_DIGIT(*ptr)) ptr++;
6898
11
              *errorcodeptr = ERR61;
6899
11
              goto FAILED;
6900
11
              }
6901
4.36k
            recno = recno * 10 + (int)(*ptr - CHAR_0);
6902
4.36k
            ptr++;
6903
4.36k
            }
6904
3.26k
          }
6905
6906
        /* Otherwise we expect to read a name; anything else is an error. When
6907
        a name is one of a number of duplicates, a different opcode is used and
6908
        it needs more memory. Unfortunately we cannot tell whether a name is a
6909
        duplicate in the first pass, so we have to allow for more memory. */
6910
6911
6.59k
        else
6912
6.59k
          {
6913
6.59k
          if (IS_DIGIT(*ptr))
6914
1
            {
6915
1
            *errorcodeptr = ERR84;
6916
1
            goto FAILED;
6917
1
            }
6918
6.58k
          if (!MAX_255(*ptr) || (cd->ctypes[*ptr] & ctype_word) == 0)
6919
55
            {
6920
55
            *errorcodeptr = ERR28;   /* Assertion expected */
6921
55
            goto FAILED;
6922
55
            }
6923
6.53k
          name = ptr++;
6924
35.1k
          while (MAX_255(*ptr) && (cd->ctypes[*ptr] & ctype_word) != 0)
6925
28.6k
            {
6926
28.6k
            ptr++;
6927
28.6k
            }
6928
6.53k
          namelen = (int)(ptr - name);
6929
6.53k
          if (lengthptr != NULL) skipbytes += IMM2_SIZE;
6930
6.53k
          }
6931
6932
        /* Check the terminator */
6933
6934
9.78k
        if ((terminator > 0 && *ptr++ != (pcre_uchar)terminator) ||
6935
9.78k
            *ptr++ != CHAR_RIGHT_PARENTHESIS)
6936
37
          {
6937
37
          ptr--;                  /* Error offset */
6938
37
          *errorcodeptr = ERR26;  /* Malformed number or name */
6939
37
          goto FAILED;
6940
37
          }
6941
6942
        /* Do no further checking in the pre-compile phase. */
6943
6944
9.74k
        if (lengthptr != NULL) break;
6945
6946
        /* In the real compile we do the work of looking for the actual
6947
        reference. If refsign is not negative, it means we have a number in
6948
        recno. */
6949
6950
4.72k
        if (refsign >= 0)
6951
1.56k
          {
6952
1.56k
          if (recno <= 0)
6953
6
            {
6954
6
            *errorcodeptr = ERR35;
6955
6
            goto FAILED;
6956
6
            }
6957
1.55k
          if (refsign != 0) recno = (refsign == CHAR_MINUS)?
6958
479
            cd->bracount - recno + 1 : recno + cd->bracount;
6959
1.55k
          if (recno <= 0 || recno > cd->final_bracount)
6960
96
            {
6961
96
            *errorcodeptr = ERR15;
6962
96
            goto FAILED;
6963
96
            }
6964
1.46k
          PUT2(code, 2+LINK_SIZE, recno);
6965
1.46k
          if (recno > cd->top_backref) cd->top_backref = recno;
6966
1.46k
          break;
6967
1.55k
          }
6968
6969
        /* Otherwise look for the name. */
6970
6971
3.15k
        slot = cd->name_table;
6972
65.9k
        for (i = 0; i < cd->names_found; i++)
6973
64.2k
          {
6974
64.2k
          if (STRNCMP_UC_UC(name, slot+IMM2_SIZE, namelen) == 0 &&
6975
64.2k
            slot[IMM2_SIZE+namelen] == 0) break;
6976
62.7k
          slot += cd->name_entry_size;
6977
62.7k
          }
6978
6979
        /* Found the named subpattern. If the name is duplicated, add one to
6980
        the opcode to change CREF/RREF into DNCREF/DNRREF and insert
6981
        appropriate data values. Otherwise, just insert the unique subpattern
6982
        number. */
6983
6984
3.15k
        if (i < cd->names_found)
6985
1.50k
          {
6986
1.50k
          int offset = i++;
6987
1.50k
          int count = 1;
6988
1.50k
          recno = GET2(slot, 0);   /* Number from first found */
6989
1.50k
          if (recno > cd->top_backref) cd->top_backref = recno;
6990
14.2k
          for (; i < cd->names_found; i++)
6991
13.6k
            {
6992
13.6k
            slot += cd->name_entry_size;
6993
13.6k
            if (STRNCMP_UC_UC(name, slot+IMM2_SIZE, namelen) != 0 ||
6994
13.6k
              (slot+IMM2_SIZE)[namelen] != 0) break;
6995
12.7k
            count++;
6996
12.7k
            }
6997
6998
1.50k
          if (count > 1)
6999
832
            {
7000
832
            PUT2(code, 2+LINK_SIZE, offset);
7001
832
            PUT2(code, 2+LINK_SIZE+IMM2_SIZE, count);
7002
832
            skipbytes += IMM2_SIZE;
7003
832
            code[1+LINK_SIZE]++;
7004
832
            }
7005
676
          else  /* Not a duplicated name */
7006
676
            {
7007
676
            PUT2(code, 2+LINK_SIZE, recno);
7008
676
            }
7009
1.50k
          }
7010
7011
        /* If terminator == CHAR_NULL it means that the name followed directly
7012
        after the opening parenthesis [e.g. (?(abc)...] and in this case there
7013
        are some further alternatives to try. For the cases where terminator !=
7014
        CHAR_NULL [things like (?(<name>... or (?('name')... or (?(R&name)... ]
7015
        we have now checked all the possibilities, so give an error. */
7016
7017
1.64k
        else if (terminator != CHAR_NULL)
7018
85
          {
7019
85
          *errorcodeptr = ERR15;
7020
85
          goto FAILED;
7021
85
          }
7022
7023
        /* Check for (?(R) for recursion. Allow digits after R to specify a
7024
        specific group number. */
7025
7026
1.56k
        else if (*name == CHAR_R)
7027
1.25k
          {
7028
1.25k
          recno = 0;
7029
12.4k
          for (i = 1; i < namelen; i++)
7030
11.1k
            {
7031
11.1k
            if (!IS_DIGIT(name[i]))
7032
15
              {
7033
15
              *errorcodeptr = ERR15;
7034
15
              goto FAILED;
7035
15
              }
7036
11.1k
            if (recno > INT_MAX / 10 - 1)   /* Integer overflow */
7037
2
              {
7038
2
              *errorcodeptr = ERR61;
7039
2
              goto FAILED;
7040
2
              }
7041
11.1k
            recno = recno * 10 + name[i] - CHAR_0;
7042
11.1k
            }
7043
1.23k
          if (recno == 0) recno = RREF_ANY;
7044
1.23k
          code[1+LINK_SIZE] = OP_RREF;      /* Change test type */
7045
1.23k
          PUT2(code, 2+LINK_SIZE, recno);
7046
1.23k
          }
7047
7048
        /* Similarly, check for the (?(DEFINE) "condition", which is always
7049
        false. */
7050
7051
307
        else if (namelen == 6 && STRNCMP_UC_C8(name, STRING_DEFINE, 6) == 0)
7052
251
          {
7053
251
          code[1+LINK_SIZE] = OP_DEF;
7054
251
          skipbytes = 1;
7055
251
          }
7056
7057
        /* Reference to an unidentified subpattern. */
7058
7059
56
        else
7060
56
          {
7061
56
          *errorcodeptr = ERR15;
7062
56
          goto FAILED;
7063
56
          }
7064
2.99k
        break;
7065
7066
7067
        /* ------------------------------------------------------------ */
7068
6.92k
        case CHAR_EQUALS_SIGN:                 /* Positive lookahead */
7069
6.92k
        bravalue = OP_ASSERT;
7070
6.92k
        cd->assert_depth += 1;
7071
6.92k
        ptr++;
7072
6.92k
        break;
7073
7074
        /* Optimize (?!) to (*FAIL) unless it is quantified - which is a weird
7075
        thing to do, but Perl allows all assertions to be quantified, and when
7076
        they contain capturing parentheses there may be a potential use for
7077
        this feature. Not that that applies to a quantified (?!) but we allow
7078
        it for uniformity. */
7079
7080
        /* ------------------------------------------------------------ */
7081
3.11k
        case CHAR_EXCLAMATION_MARK:            /* Negative lookahead */
7082
3.11k
        ptr++;
7083
3.11k
        if (*ptr == CHAR_RIGHT_PARENTHESIS && ptr[1] != CHAR_ASTERISK &&
7084
3.11k
             ptr[1] != CHAR_PLUS && ptr[1] != CHAR_QUESTION_MARK &&
7085
3.11k
            (ptr[1] != CHAR_LEFT_CURLY_BRACKET || !is_counted_repeat(ptr+2)))
7086
642
          {
7087
642
          *code++ = OP_FAIL;
7088
642
          previous = NULL;
7089
642
          continue;
7090
642
          }
7091
2.46k
        bravalue = OP_ASSERT_NOT;
7092
2.46k
        cd->assert_depth += 1;
7093
2.46k
        break;
7094
7095
7096
        /* ------------------------------------------------------------ */
7097
9.58k
        case CHAR_LESS_THAN_SIGN:              /* Lookbehind or named define */
7098
9.58k
        switch (ptr[1])
7099
9.58k
          {
7100
2.05k
          case CHAR_EQUALS_SIGN:               /* Positive lookbehind */
7101
2.05k
          bravalue = OP_ASSERTBACK;
7102
2.05k
          cd->assert_depth += 1;
7103
2.05k
          ptr += 2;
7104
2.05k
          break;
7105
7106
2.33k
          case CHAR_EXCLAMATION_MARK:          /* Negative lookbehind */
7107
2.33k
          bravalue = OP_ASSERTBACK_NOT;
7108
2.33k
          cd->assert_depth += 1;
7109
2.33k
          ptr += 2;
7110
2.33k
          break;
7111
7112
5.19k
          default:                /* Could be name define, else bad */
7113
5.19k
          if (MAX_255(ptr[1]) && (cd->ctypes[ptr[1]] & ctype_word) != 0)
7114
5.19k
            goto DEFINE_NAME;
7115
4
          ptr++;                  /* Correct offset for error */
7116
4
          *errorcodeptr = ERR24;
7117
4
          goto FAILED;
7118
9.58k
          }
7119
4.39k
        break;
7120
7121
7122
        /* ------------------------------------------------------------ */
7123
4.39k
        case CHAR_GREATER_THAN_SIGN:           /* One-time brackets */
7124
2.81k
        bravalue = OP_ONCE;
7125
2.81k
        ptr++;
7126
2.81k
        break;
7127
7128
7129
        /* ------------------------------------------------------------ */
7130
1.80k
        case CHAR_C:                 /* Callout - may be followed by digits; */
7131
1.80k
        previous_callout = code;     /* Save for later completion */
7132
1.80k
        after_manual_callout = 1;    /* Skip one item before completing */
7133
1.80k
        *code++ = OP_CALLOUT;
7134
1.80k
          {
7135
1.80k
          int n = 0;
7136
1.80k
          ptr++;
7137
2.33k
          while(IS_DIGIT(*ptr))
7138
530
            {
7139
530
            n = n * 10 + *ptr++ - CHAR_0;
7140
530
            if (n > 255)
7141
1
              {
7142
1
              *errorcodeptr = ERR38;
7143
1
              goto FAILED;
7144
1
              }
7145
530
            }
7146
1.80k
          if (*ptr != CHAR_RIGHT_PARENTHESIS)
7147
16
            {
7148
16
            *errorcodeptr = ERR39;
7149
16
            goto FAILED;
7150
16
            }
7151
1.78k
          *code++ = n;
7152
1.78k
          PUT(code, 0, (int)(ptr - cd->start_pattern + 1)); /* Pattern offset */
7153
1.78k
          PUT(code, LINK_SIZE, 0);                          /* Default length */
7154
1.78k
          code += 2 * LINK_SIZE;
7155
1.78k
          }
7156
0
        previous = NULL;
7157
1.78k
        continue;
7158
7159
7160
        /* ------------------------------------------------------------ */
7161
4.05k
        case CHAR_P:              /* Python-style named subpattern handling */
7162
4.05k
        if (*(++ptr) == CHAR_EQUALS_SIGN ||
7163
4.05k
            *ptr == CHAR_GREATER_THAN_SIGN)  /* Reference or recursion */
7164
3.96k
          {
7165
3.96k
          is_recurse = *ptr == CHAR_GREATER_THAN_SIGN;
7166
3.96k
          terminator = CHAR_RIGHT_PARENTHESIS;
7167
3.96k
          goto NAMED_REF_OR_RECURSE;
7168
3.96k
          }
7169
88
        else if (*ptr != CHAR_LESS_THAN_SIGN)  /* Test for Python-style defn */
7170
7
          {
7171
7
          *errorcodeptr = ERR41;
7172
7
          goto FAILED;
7173
7
          }
7174
        /* Fall through to handle (?P< as (?< is handled */
7175
7176
7177
        /* ------------------------------------------------------------ */
7178
5.27k
        DEFINE_NAME:    /* Come here from (?< handling */
7179
65.6k
        case CHAR_APOSTROPHE:
7180
65.6k
        terminator = (*ptr == CHAR_LESS_THAN_SIGN)?
7181
60.4k
          CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE;
7182
65.6k
        name = ++ptr;
7183
65.6k
        if (IS_DIGIT(*ptr))
7184
3
          {
7185
3
          *errorcodeptr = ERR84;   /* Group name must start with non-digit */
7186
3
          goto FAILED;
7187
3
          }
7188
1.39M
        while (MAX_255(*ptr) && (cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
7189
65.6k
        namelen = (int)(ptr - name);
7190
7191
        /* In the pre-compile phase, do a syntax check, remember the longest
7192
        name, and then remember the group in a vector, expanding it if
7193
        necessary. Duplicates for the same number are skipped; other duplicates
7194
        are checked for validity. In the actual compile, there is nothing to
7195
        do. */
7196
7197
65.6k
        if (lengthptr != NULL)
7198
47.4k
          {
7199
47.4k
          named_group *ng;
7200
47.4k
          pcre_uint32 number = cd->bracount + 1;
7201
7202
47.4k
          if (*ptr != (pcre_uchar)terminator)
7203
27
            {
7204
27
            *errorcodeptr = ERR42;
7205
27
            goto FAILED;
7206
27
            }
7207
7208
47.4k
          if (cd->names_found >= MAX_NAME_COUNT)
7209
1
            {
7210
1
            *errorcodeptr = ERR49;
7211
1
            goto FAILED;
7212
1
            }
7213
7214
47.4k
          if (namelen + IMM2_SIZE + 1 > cd->name_entry_size)
7215
1.30k
            {
7216
1.30k
            cd->name_entry_size = namelen + IMM2_SIZE + 1;
7217
1.30k
            if (namelen > MAX_NAME_SIZE)
7218
22
              {
7219
22
              *errorcodeptr = ERR48;
7220
22
              goto FAILED;
7221
22
              }
7222
1.30k
            }
7223
7224
          /* Scan the list to check for duplicates. For duplicate names, if the
7225
          number is the same, break the loop, which causes the name to be
7226
          discarded; otherwise, if DUPNAMES is not set, give an error.
7227
          If it is set, allow the name with a different number, but continue
7228
          scanning in case this is a duplicate with the same number. For
7229
          non-duplicate names, give an error if the number is duplicated. */
7230
7231
47.4k
          ng = cd->named_groups;
7232
107M
          for (i = 0; i < cd->names_found; i++, ng++)
7233
107M
            {
7234
107M
            if (namelen == ng->length &&
7235
107M
                STRNCMP_UC_UC(name, ng->name, namelen) == 0)
7236
63.7M
              {
7237
63.7M
              if (ng->number == number) break;
7238
63.7M
              if ((options & PCRE_DUPNAMES) == 0)
7239
11
                {
7240
11
                *errorcodeptr = ERR43;
7241
11
                goto FAILED;
7242
11
                }
7243
63.7M
              cd->dupnames = TRUE;  /* Duplicate names exist */
7244
63.7M
              }
7245
43.3M
            else if (ng->number == number)
7246
3
              {
7247
3
              *errorcodeptr = ERR65;
7248
3
              goto FAILED;
7249
3
              }
7250
107M
            }
7251
7252
47.3k
          if (i >= cd->names_found)     /* Not a duplicate with same number */
7253
47.1k
            {
7254
            /* Increase the list size if necessary */
7255
7256
47.1k
            if (cd->names_found >= cd->named_group_list_size)
7257
261
              {
7258
261
              int newsize = cd->named_group_list_size * 2;
7259
261
              named_group *newspace = (PUBL(malloc))
7260
261
                (newsize * sizeof(named_group));
7261
7262
261
              if (newspace == NULL)
7263
0
                {
7264
0
                *errorcodeptr = ERR21;
7265
0
                goto FAILED;
7266
0
                }
7267
7268
261
              memcpy(newspace, cd->named_groups,
7269
261
                cd->named_group_list_size * sizeof(named_group));
7270
261
              if (cd->named_group_list_size > NAMED_GROUP_LIST_SIZE)
7271
178
                (PUBL(free))((void *)cd->named_groups);
7272
261
              cd->named_groups = newspace;
7273
261
              cd->named_group_list_size = newsize;
7274
261
              }
7275
7276
47.1k
            cd->named_groups[cd->names_found].name = name;
7277
47.1k
            cd->named_groups[cd->names_found].length = namelen;
7278
47.1k
            cd->named_groups[cd->names_found].number = number;
7279
47.1k
            cd->names_found++;
7280
47.1k
            }
7281
47.3k
          }
7282
7283
65.6k
        ptr++;                    /* Move past > or ' in both passes. */
7284
65.6k
        goto NUMBERED_GROUP;
7285
7286
7287
        /* ------------------------------------------------------------ */
7288
291
        case CHAR_AMPERSAND:            /* Perl recursion/subroutine syntax */
7289
291
        terminator = CHAR_RIGHT_PARENTHESIS;
7290
291
        is_recurse = TRUE;
7291
        /* Fall through */
7292
7293
        /* We come here from the Python syntax above that handles both
7294
        references (?P=name) and recursion (?P>name), as well as falling
7295
        through from the Perl recursion syntax (?&name). We also come here from
7296
        the Perl \k<name> or \k'name' back reference syntax and the \k{name}
7297
        .NET syntax, and the Oniguruma \g<...> and \g'...' subroutine syntax. */
7298
7299
10.4k
        NAMED_REF_OR_RECURSE:
7300
10.4k
        name = ++ptr;
7301
10.4k
        if (IS_DIGIT(*ptr))
7302
4
          {
7303
4
          *errorcodeptr = ERR84;   /* Group name must start with non-digit */
7304
4
          goto FAILED;
7305
4
          }
7306
128k
        while (MAX_255(*ptr) && (cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
7307
10.3k
        namelen = (int)(ptr - name);
7308
7309
        /* In the pre-compile phase, do a syntax check. We used to just set
7310
        a dummy reference number, because it was not used in the first pass.
7311
        However, with the change of recursive back references to be atomic,
7312
        we have to look for the number so that this state can be identified, as
7313
        otherwise the incorrect length is computed. If it's not a backwards
7314
        reference, the dummy number will do. */
7315
7316
10.3k
        if (lengthptr != NULL)
7317
7.07k
          {
7318
7.07k
          named_group *ng;
7319
7.07k
          recno = 0;
7320
7321
7.07k
          if (namelen == 0)
7322
25
            {
7323
25
            *errorcodeptr = ERR62;
7324
25
            goto FAILED;
7325
25
            }
7326
7.04k
          if (*ptr != (pcre_uchar)terminator)
7327
6
            {
7328
6
            *errorcodeptr = ERR42;
7329
6
            goto FAILED;
7330
6
            }
7331
7.03k
          if (namelen > MAX_NAME_SIZE)
7332
9
            {
7333
9
            *errorcodeptr = ERR48;
7334
9
            goto FAILED;
7335
9
            }
7336
7337
          /* Count named back references. */
7338
7339
7.03k
          if (!is_recurse) cd->namedrefcount++;
7340
7341
          /* We have to allow for a named reference to a duplicated name (this
7342
          cannot be determined until the second pass). This needs an extra
7343
          16-bit data item. */
7344
7345
7.03k
          *lengthptr += IMM2_SIZE;
7346
7347
          /* If this is a forward reference and we are within a (?|...) group,
7348
          the reference may end up as the number of a group which we are
7349
          currently inside, that is, it could be a recursive reference. In the
7350
          real compile this will be picked up and the reference wrapped with
7351
          OP_ONCE to make it atomic, so we must space in case this occurs. */
7352
7353
          /* In fact, this can happen for a non-forward reference because
7354
          another group with the same number might be created later. This
7355
          issue is fixed "properly" in PCRE2. As PCRE1 is now in maintenance
7356
          only mode, we finesse the bug by allowing more memory always. */
7357
7358
7.03k
          *lengthptr += 4 + 4*LINK_SIZE;
7359
7360
          /* It is even worse than that. The current reference may be to an
7361
          existing named group with a different number (so apparently not
7362
          recursive) but which later on is also attached to a group with the
7363
          current number. This can only happen if $(| has been previous
7364
          encountered. In that case, we allow yet more memory, just in case.
7365
          (Again, this is fixed "properly" in PCRE2. */
7366
7367
7.03k
          if (cd->dupgroups) *lengthptr += 4 + 4*LINK_SIZE;
7368
7369
          /* Otherwise, check for recursion here. The name table does not exist
7370
          in the first pass; instead we must scan the list of names encountered
7371
          so far in order to get the number. If the name is not found, leave
7372
          the value of recno as 0 for a forward reference. */
7373
7374
          /* This patch (removing "else") fixes a problem when a reference is
7375
          to multiple identically named nested groups from within the nest.
7376
          Once again, it is not the "proper" fix, and it results in an
7377
          over-allocation of memory. */
7378
7379
          /* else */
7380
7.03k
            {
7381
7.03k
            ng = cd->named_groups;
7382
10.1M
            for (i = 0; i < cd->names_found; i++, ng++)
7383
10.1M
              {
7384
10.1M
              if (namelen == ng->length &&
7385
10.1M
                  STRNCMP_UC_UC(name, ng->name, namelen) == 0)
7386
438k
                {
7387
438k
                open_capitem *oc;
7388
438k
                recno = ng->number;
7389
438k
                if (is_recurse) break;
7390
42.2M
                for (oc = cd->open_caps; oc != NULL; oc = oc->next)
7391
41.8M
                  {
7392
41.8M
                  if (oc->number == recno)
7393
33.5k
                    {
7394
33.5k
                    oc->flag = TRUE;
7395
33.5k
                    break;
7396
33.5k
                    }
7397
41.8M
                  }
7398
438k
                }
7399
10.1M
              }
7400
7.03k
            }
7401
7.03k
          }
7402
7403
        /* In the real compile, search the name table. We check the name
7404
        first, and then check that we have reached the end of the name in the
7405
        table. That way, if the name is longer than any in the table, the
7406
        comparison will fail without reading beyond the table entry. */
7407
7408
3.32k
        else
7409
3.32k
          {
7410
3.32k
          slot = cd->name_table;
7411
766k
          for (i = 0; i < cd->names_found; i++)
7412
766k
            {
7413
766k
            if (STRNCMP_UC_UC(name, slot+IMM2_SIZE, namelen) == 0 &&
7414
766k
                slot[IMM2_SIZE+namelen] == 0)
7415
3.12k
              break;
7416
763k
            slot += cd->name_entry_size;
7417
763k
            }
7418
7419
3.32k
          if (i < cd->names_found)
7420
3.12k
            {
7421
3.12k
            recno = GET2(slot, 0);
7422
3.12k
            }
7423
206
          else
7424
206
            {
7425
206
            *errorcodeptr = ERR15;
7426
206
            goto FAILED;
7427
206
            }
7428
3.32k
          }
7429
7430
        /* In both phases, for recursions, we can now go to the code than
7431
        handles numerical recursion. */
7432
7433
10.1k
        if (is_recurse) goto HANDLE_RECURSION;
7434
7435
        /* In the second pass we must see if the name is duplicated. If so, we
7436
        generate a different opcode. */
7437
7438
8.94k
        if (lengthptr == NULL && cd->dupnames)
7439
2.71k
          {
7440
2.71k
          int count = 1;
7441
2.71k
          unsigned int index = i;
7442
2.71k
          pcre_uchar *cslot = slot + cd->name_entry_size;
7443
7444
127k
          for (i++; i < cd->names_found; i++)
7445
126k
            {
7446
126k
            if (STRCMP_UC_UC(slot + IMM2_SIZE, cslot + IMM2_SIZE) != 0) break;
7447
124k
            count++;
7448
124k
            cslot += cd->name_entry_size;
7449
124k
            }
7450
7451
2.71k
          if (count > 1)
7452
2.36k
            {
7453
2.36k
            if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
7454
2.36k
            previous = code;
7455
2.36k
            item_hwm_offset = cd->hwm - cd->start_workspace;
7456
2.36k
            *code++ = ((options & PCRE_CASELESS) != 0)? OP_DNREFI : OP_DNREF;
7457
2.36k
            PUT2INC(code, 0, index);
7458
2.36k
            PUT2INC(code, 0, count);
7459
7460
            /* Process each potentially referenced group. */
7461
7462
129k
            for (; slot < cslot; slot += cd->name_entry_size)
7463
127k
              {
7464
127k
              open_capitem *oc;
7465
127k
              recno = GET2(slot, 0);
7466
127k
              cd->backref_map |= (recno < 32)? (1U << recno) : 1;
7467
127k
              if (recno > cd->top_backref) cd->top_backref = recno;
7468
7469
              /* Check to see if this back reference is recursive, that it, it
7470
              is inside the group that it references. A flag is set so that the
7471
              group can be made atomic. */
7472
7473
4.70M
              for (oc = cd->open_caps; oc != NULL; oc = oc->next)
7474
4.58M
                {
7475
4.58M
                if (oc->number == recno)
7476
10.9k
                  {
7477
10.9k
                  oc->flag = TRUE;
7478
10.9k
                  break;
7479
10.9k
                  }
7480
4.58M
                }
7481
127k
              }
7482
7483
2.36k
            continue;  /* End of back ref handling */
7484
2.36k
            }
7485
2.71k
          }
7486
7487
        /* First pass, or a non-duplicated name. */
7488
7489
6.57k
        goto HANDLE_REFERENCE;
7490
7491
7492
        /* ------------------------------------------------------------ */
7493
6.57k
        case CHAR_R:              /* Recursion, same as (?0) */
7494
699
        recno = 0;
7495
699
        if (*(++ptr) != CHAR_RIGHT_PARENTHESIS)
7496
2
          {
7497
2
          *errorcodeptr = ERR29;
7498
2
          goto FAILED;
7499
2
          }
7500
697
        goto HANDLE_RECURSION;
7501
7502
7503
        /* ------------------------------------------------------------ */
7504
2.31k
        case CHAR_MINUS: case CHAR_PLUS:  /* Recursion or subroutine */
7505
8.64k
        case CHAR_0: case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4:
7506
10.2k
        case CHAR_5: case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:
7507
10.2k
          {
7508
10.2k
          const pcre_uchar *called;
7509
10.2k
          terminator = CHAR_RIGHT_PARENTHESIS;
7510
7511
          /* Come here from the \g<...> and \g'...' code (Oniguruma
7512
          compatibility). However, the syntax has been checked to ensure that
7513
          the ... are a (signed) number, so that neither ERR63 nor ERR29 will
7514
          be called on this path, nor with the jump to OTHER_CHAR_AFTER_QUERY
7515
          ever be taken. */
7516
7517
11.0k
          HANDLE_NUMERICAL_RECURSION:
7518
7519
11.0k
          if ((refsign = *ptr) == CHAR_PLUS)
7520
1.41k
            {
7521
1.41k
            ptr++;
7522
1.41k
            if (!IS_DIGIT(*ptr))
7523
10
              {
7524
10
              *errorcodeptr = ERR63;
7525
10
              goto FAILED;
7526
10
              }
7527
1.41k
            }
7528
9.64k
          else if (refsign == CHAR_MINUS)
7529
1.30k
            {
7530
1.30k
            if (!IS_DIGIT(ptr[1]))
7531
850
              goto OTHER_CHAR_AFTER_QUERY;
7532
451
            ptr++;
7533
451
            }
7534
7535
10.1k
          recno = 0;
7536
22.4k
          while(IS_DIGIT(*ptr))
7537
12.3k
            {
7538
12.3k
            if (recno > INT_MAX / 10 - 1) /* Integer overflow */
7539
14
              {
7540
237
              while (IS_DIGIT(*ptr)) ptr++;
7541
14
              *errorcodeptr = ERR61;
7542
14
              goto FAILED;
7543
14
              }
7544
12.2k
            recno = recno * 10 + *ptr++ - CHAR_0;
7545
12.2k
            }
7546
7547
10.1k
          if (*ptr != (pcre_uchar)terminator)
7548
25
            {
7549
25
            *errorcodeptr = ERR29;
7550
25
            goto FAILED;
7551
25
            }
7552
7553
10.1k
          if (refsign == CHAR_MINUS)
7554
447
            {
7555
447
            if (recno == 0)
7556
1
              {
7557
1
              *errorcodeptr = ERR58;
7558
1
              goto FAILED;
7559
1
              }
7560
446
            recno = cd->bracount - recno + 1;
7561
446
            if (recno <= 0)
7562
47
              {
7563
47
              *errorcodeptr = ERR15;
7564
47
              goto FAILED;
7565
47
              }
7566
446
            }
7567
9.70k
          else if (refsign == CHAR_PLUS)
7568
1.40k
            {
7569
1.40k
            if (recno == 0)
7570
1
              {
7571
1
              *errorcodeptr = ERR58;
7572
1
              goto FAILED;
7573
1
              }
7574
1.40k
            recno += cd->bracount;
7575
1.40k
            }
7576
7577
          /* Come here from code above that handles a named recursion */
7578
7579
12.0k
          HANDLE_RECURSION:
7580
7581
12.0k
          previous = code;
7582
12.0k
          item_hwm_offset = cd->hwm - cd->start_workspace;
7583
12.0k
          called = cd->start_code;
7584
7585
          /* When we are actually compiling, find the bracket that is being
7586
          referenced. Temporarily end the regex in case it doesn't exist before
7587
          this point. If we end up with a forward reference, first check that
7588
          the bracket does occur later so we can give the error (and position)
7589
          now. Then remember this forward reference in the workspace so it can
7590
          be filled in at the end. */
7591
7592
12.0k
          if (lengthptr == NULL)
7593
5.57k
            {
7594
5.57k
            *code = OP_END;
7595
5.57k
            if (recno != 0)
7596
4.39k
              called = PRIV(find_bracket)(cd->start_code, utf, recno);
7597
7598
            /* Forward reference */
7599
7600
5.57k
            if (called == NULL)
7601
1.77k
              {
7602
1.77k
              if (recno > cd->final_bracount)
7603
286
                {
7604
286
                *errorcodeptr = ERR15;
7605
286
                goto FAILED;
7606
286
                }
7607
7608
              /* Fudge the value of "called" so that when it is inserted as an
7609
              offset below, what it actually inserted is the reference number
7610
              of the group. Then remember the forward reference. */
7611
7612
1.48k
              called = cd->start_code + recno;
7613
1.48k
              if (cd->hwm >= cd->start_workspace + cd->workspace_size -
7614
1.48k
                  WORK_SIZE_SAFETY_MARGIN)
7615
3
                {
7616
3
                *errorcodeptr = expand_workspace(cd);
7617
3
                if (*errorcodeptr != 0) goto FAILED;
7618
3
                }
7619
1.48k
              PUTINC(cd->hwm, 0, (int)(code + 1 - cd->start_code));
7620
1.48k
              }
7621
7622
            /* If not a forward reference, and the subpattern is still open,
7623
            this is a recursive call. We check to see if this is a left
7624
            recursion that could loop for ever, and diagnose that case. We
7625
            must not, however, do this check if we are in a conditional
7626
            subpattern because the condition might be testing for recursion in
7627
            a pattern such as /(?(R)a+|(?R)b)/, which is perfectly valid.
7628
            Forever loops are also detected at runtime, so those that occur in
7629
            conditional subpatterns will be picked up then. */
7630
7631
3.80k
            else if (GET(called, 1) == 0 && cond_depth <= 0 &&
7632
3.80k
                     could_be_empty(called, code, bcptr, utf, cd))
7633
20
              {
7634
20
              *errorcodeptr = ERR40;
7635
20
              goto FAILED;
7636
20
              }
7637
5.57k
            }
7638
7639
          /* Insert the recursion/subroutine item. It does not have a set first
7640
          character (relevant if it is repeated, because it will then be
7641
          wrapped with ONCE brackets). */
7642
7643
11.7k
          *code = OP_RECURSE;
7644
11.7k
          PUT(code, 1, (int)(called - cd->start_code));
7645
11.7k
          code += 1 + LINK_SIZE;
7646
11.7k
          groupsetfirstchar = FALSE;
7647
11.7k
          }
7648
7649
        /* Can't determine a first byte now */
7650
7651
11.7k
        if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
7652
11.7k
        zerofirstchar = firstchar;
7653
11.7k
        zerofirstcharflags = firstcharflags;
7654
11.7k
        continue;
7655
7656
7657
        /* ------------------------------------------------------------ */
7658
9.60k
        default:              /* Other characters: check option setting */
7659
10.4k
        OTHER_CHAR_AFTER_QUERY:
7660
10.4k
        set = unset = 0;
7661
10.4k
        optset = &set;
7662
7663
27.3k
        while (*ptr != CHAR_RIGHT_PARENTHESIS && *ptr != CHAR_COLON)
7664
16.9k
          {
7665
16.9k
          switch (*ptr++)
7666
16.9k
            {
7667
1.11k
            case CHAR_MINUS: optset = &unset; break;
7668
7669
9.91k
            case CHAR_J:    /* Record that it changed in the external options */
7670
9.91k
            *optset |= PCRE_DUPNAMES;
7671
9.91k
            cd->external_flags |= PCRE_JCHANGED;
7672
9.91k
            break;
7673
7674
2.43k
            case CHAR_i: *optset |= PCRE_CASELESS; break;
7675
902
            case CHAR_m: *optset |= PCRE_MULTILINE; break;
7676
458
            case CHAR_s: *optset |= PCRE_DOTALL; break;
7677
1.35k
            case CHAR_x: *optset |= PCRE_EXTENDED; break;
7678
490
            case CHAR_U: *optset |= PCRE_UNGREEDY; break;
7679
226
            case CHAR_X: *optset |= PCRE_EXTRA; break;
7680
7681
56
            default:  *errorcodeptr = ERR12;
7682
56
                      ptr--;    /* Correct the offset */
7683
56
                      goto FAILED;
7684
16.9k
            }
7685
16.9k
          }
7686
7687
        /* Set up the changed option bits, but don't change anything yet. */
7688
7689
10.3k
        newoptions = (options | set) & (~unset);
7690
7691
        /* If the options ended with ')' this is not the start of a nested
7692
        group with option changes, so the options change at this level.
7693
        If we are not at the pattern start, reset the greedy defaults and the
7694
        case value for firstchar and reqchar. */
7695
7696
10.3k
        if (*ptr == CHAR_RIGHT_PARENTHESIS)
7697
4.05k
          {
7698
4.05k
          greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
7699
4.05k
          greedy_non_default = greedy_default ^ 1;
7700
4.05k
          req_caseopt = ((newoptions & PCRE_CASELESS) != 0)? REQ_CASELESS:0;
7701
7702
          /* Change options at this level, and pass them back for use
7703
          in subsequent branches. */
7704
7705
4.05k
          *optionsptr = options = newoptions;
7706
4.05k
          previous = NULL;       /* This item can't be repeated */
7707
4.05k
          continue;              /* It is complete */
7708
4.05k
          }
7709
7710
        /* If the options ended with ':' we are heading into a nested group
7711
        with possible change of options. Such groups are non-capturing and are
7712
        not assertions of any kind. All we need to do is skip over the ':';
7713
        the newoptions value is handled below. */
7714
7715
6.34k
        bravalue = OP_BRA;
7716
6.34k
        ptr++;
7717
126k
        }     /* End of switch for character following (? */
7718
126k
      }       /* End of (? handling */
7719
7720
    /* Opening parenthesis not followed by '*' or '?'. If PCRE_NO_AUTO_CAPTURE
7721
    is set, all unadorned brackets become non-capturing and behave like (?:...)
7722
    brackets. */
7723
7724
392k
    else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
7725
0
      {
7726
0
      bravalue = OP_BRA;
7727
0
      }
7728
7729
    /* Else we have a capturing group. */
7730
7731
392k
    else
7732
392k
      {
7733
457k
      NUMBERED_GROUP:
7734
457k
      cd->bracount += 1;
7735
457k
      PUT2(code, 1+LINK_SIZE, cd->bracount);
7736
457k
      skipbytes = IMM2_SIZE;
7737
457k
      }
7738
7739
    /* Process nested bracketed regex. First check for parentheses nested too
7740
    deeply. */
7741
7742
497k
    if ((cd->parens_depth += 1) > PARENS_NEST_LIMIT)
7743
2
      {
7744
2
      *errorcodeptr = ERR82;
7745
2
      goto FAILED;
7746
2
      }
7747
7748
    /* All assertions used not to be repeatable, but this was changed for Perl
7749
    compatibility. All kinds can now be repeated except for assertions that are
7750
    conditions (Perl also forbids these to be repeated). We copy code into a
7751
    non-register variable (tempcode) in order to be able to pass its address
7752
    because some compilers complain otherwise. At the start of a conditional
7753
    group whose condition is an assertion, cd->iscondassert is set. We unset it
7754
    here so as to allow assertions later in the group to be quantified. */
7755
7756
497k
    if (bravalue >= OP_ASSERT && bravalue <= OP_ASSERTBACK_NOT &&
7757
497k
        cd->iscondassert)
7758
1.81k
      {
7759
1.81k
      previous = NULL;
7760
1.81k
      cd->iscondassert = FALSE;
7761
1.81k
      }
7762
495k
    else
7763
495k
      {
7764
495k
      previous = code;
7765
495k
      item_hwm_offset = cd->hwm - cd->start_workspace;
7766
495k
      }
7767
7768
497k
    *code = bravalue;
7769
497k
    tempcode = code;
7770
497k
    tempreqvary = cd->req_varyopt;        /* Save value before bracket */
7771
497k
    tempbracount = cd->bracount;          /* Save value before bracket */
7772
497k
    length_prevgroup = 0;                 /* Initialize for pre-compile phase */
7773
7774
497k
    if (!compile_regex(
7775
497k
         newoptions,                      /* The complete new option state */
7776
497k
         &tempcode,                       /* Where to put code (updated) */
7777
497k
         &ptr,                            /* Input pointer (updated) */
7778
497k
         errorcodeptr,                    /* Where to put an error message */
7779
497k
         (bravalue == OP_ASSERTBACK ||
7780
497k
          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
7781
497k
         reset_bracount,                  /* True if (?| group */
7782
497k
         skipbytes,                       /* Skip over bracket number */
7783
497k
         cond_depth +
7784
497k
           ((bravalue == OP_COND)?1:0),   /* Depth of condition subpatterns */
7785
497k
         &subfirstchar,                   /* For possible first char */
7786
497k
         &subfirstcharflags,
7787
497k
         &subreqchar,                     /* For possible last char */
7788
497k
         &subreqcharflags,
7789
497k
         bcptr,                           /* Current branch chain */
7790
497k
         cd,                              /* Tables block */
7791
497k
         (lengthptr == NULL)? NULL :      /* Actual compile phase */
7792
497k
           &length_prevgroup              /* Pre-compile phase */
7793
497k
         ))
7794
11.6k
      goto FAILED;
7795
7796
485k
    cd->parens_depth -= 1;
7797
7798
    /* If this was an atomic group and there are no capturing groups within it,
7799
    generate OP_ONCE_NC instead of OP_ONCE. */
7800
7801
485k
    if (bravalue == OP_ONCE && cd->bracount <= tempbracount)
7802
1.63k
      *code = OP_ONCE_NC;
7803
7804
485k
    if (bravalue >= OP_ASSERT && bravalue <= OP_ASSERTBACK_NOT)
7805
12.9k
      cd->assert_depth -= 1;
7806
7807
    /* At the end of compiling, code is still pointing to the start of the
7808
    group, while tempcode has been updated to point past the end of the group.
7809
    The pattern pointer (ptr) is on the bracket.
7810
7811
    If this is a conditional bracket, check that there are no more than
7812
    two branches in the group, or just one if it's a DEFINE group. We do this
7813
    in the real compile phase, not in the pre-pass, where the whole group may
7814
    not be available. */
7815
7816
485k
    if (bravalue == OP_COND && lengthptr == NULL)
7817
5.01k
      {
7818
5.01k
      pcre_uchar *tc = code;
7819
5.01k
      int condcount = 0;
7820
7821
23.1k
      do {
7822
23.1k
         condcount++;
7823
23.1k
         tc += GET(tc,1);
7824
23.1k
         }
7825
23.1k
      while (*tc != OP_KET);
7826
7827
      /* A DEFINE group is never obeyed inline (the "condition" is always
7828
      false). It must have only one branch. */
7829
7830
5.01k
      if (code[LINK_SIZE+1] == OP_DEF)
7831
251
        {
7832
251
        if (condcount > 1)
7833
1
          {
7834
1
          *errorcodeptr = ERR54;
7835
1
          goto FAILED;
7836
1
          }
7837
250
        bravalue = OP_DEF;   /* Just a flag to suppress char handling below */
7838
250
        }
7839
7840
      /* A "normal" conditional group. If there is just one branch, we must not
7841
      make use of its firstchar or reqchar, because this is equivalent to an
7842
      empty second branch. */
7843
7844
4.75k
      else
7845
4.75k
        {
7846
4.75k
        if (condcount > 2)
7847
18
          {
7848
18
          *errorcodeptr = ERR27;
7849
18
          goto FAILED;
7850
18
          }
7851
4.74k
        if (condcount == 1) subfirstcharflags = subreqcharflags = REQ_NONE;
7852
4.74k
        }
7853
5.01k
      }
7854
7855
    /* Error if hit end of pattern */
7856
7857
485k
    if (*ptr != CHAR_RIGHT_PARENTHESIS)
7858
616
      {
7859
616
      *errorcodeptr = ERR14;
7860
616
      goto FAILED;
7861
616
      }
7862
7863
    /* In the pre-compile phase, update the length by the length of the group,
7864
    less the brackets at either end. Then reduce the compiled code to just a
7865
    set of non-capturing brackets so that it doesn't use much memory if it is
7866
    duplicated by a quantifier.*/
7867
7868
485k
    if (lengthptr != NULL)
7869
377k
      {
7870
377k
      if (OFLOW_MAX - *lengthptr < length_prevgroup - 2 - 2*LINK_SIZE)
7871
3
        {
7872
3
        *errorcodeptr = ERR20;
7873
3
        goto FAILED;
7874
3
        }
7875
377k
      *lengthptr += length_prevgroup - 2 - 2*LINK_SIZE;
7876
377k
      code++;   /* This already contains bravalue */
7877
377k
      PUTINC(code, 0, 1 + LINK_SIZE);
7878
377k
      *code++ = OP_KET;
7879
377k
      PUTINC(code, 0, 1 + LINK_SIZE);
7880
377k
      break;    /* No need to waste time with special character handling */
7881
377k
      }
7882
7883
    /* Otherwise update the main code pointer to the end of the group. */
7884
7885
107k
    code = tempcode;
7886
7887
    /* For a DEFINE group, required and first character settings are not
7888
    relevant. */
7889
7890
107k
    if (bravalue == OP_DEF) break;
7891
7892
    /* Handle updating of the required and first characters for other types of
7893
    group. Update for normal brackets of all kinds, and conditions with two
7894
    branches (see code above). If the bracket is followed by a quantifier with
7895
    zero repeat, we have to back off. Hence the definition of zeroreqchar and
7896
    zerofirstchar outside the main loop so that they can be accessed for the
7897
    back off. */
7898
7899
107k
    zeroreqchar = reqchar;
7900
107k
    zeroreqcharflags = reqcharflags;
7901
107k
    zerofirstchar = firstchar;
7902
107k
    zerofirstcharflags = firstcharflags;
7903
107k
    groupsetfirstchar = FALSE;
7904
7905
107k
    if (bravalue >= OP_ONCE)
7906
101k
      {
7907
      /* If we have not yet set a firstchar in this branch, take it from the
7908
      subpattern, remembering that it was set here so that a repeat of more
7909
      than one can replicate it as reqchar if necessary. If the subpattern has
7910
      no firstchar, set "none" for the whole branch. In both cases, a zero
7911
      repeat forces firstchar to "none". */
7912
7913
101k
      if (firstcharflags == REQ_UNSET)
7914
56.4k
        {
7915
56.4k
        if (subfirstcharflags >= 0)
7916
26.5k
          {
7917
26.5k
          firstchar = subfirstchar;
7918
26.5k
          firstcharflags = subfirstcharflags;
7919
26.5k
          groupsetfirstchar = TRUE;
7920
26.5k
          }
7921
29.9k
        else firstcharflags = REQ_NONE;
7922
56.4k
        zerofirstcharflags = REQ_NONE;
7923
56.4k
        }
7924
7925
      /* If firstchar was previously set, convert the subpattern's firstchar
7926
      into reqchar if there wasn't one, using the vary flag that was in
7927
      existence beforehand. */
7928
7929
45.0k
      else if (subfirstcharflags >= 0 && subreqcharflags < 0)
7930
6.25k
        {
7931
6.25k
        subreqchar = subfirstchar;
7932
6.25k
        subreqcharflags = subfirstcharflags | tempreqvary;
7933
6.25k
        }
7934
7935
      /* If the subpattern set a required byte (or set a first byte that isn't
7936
      really the first byte - see above), set it. */
7937
7938
101k
      if (subreqcharflags >= 0)
7939
59.4k
        {
7940
59.4k
        reqchar = subreqchar;
7941
59.4k
        reqcharflags = subreqcharflags;
7942
59.4k
        }
7943
101k
      }
7944
7945
    /* For a forward assertion, we take the reqchar, if set, provided that the
7946
    group has also set a first char. This can be helpful if the pattern that
7947
    follows the assertion doesn't set a different char. For example, it's
7948
    useful for /(?=abcde).+/. We can't set firstchar for an assertion, however
7949
    because it leads to incorrect effect for patterns such as /(?=a)a.+/ when
7950
    the "real" "a" would then become a reqchar instead of a firstchar. This is
7951
    overcome by a scan at the end if there's no firstchar, looking for an
7952
    asserted first char. */
7953
7954
5.84k
    else if (bravalue == OP_ASSERT && subreqcharflags >= 0 &&
7955
5.84k
             subfirstcharflags >= 0)
7956
880
      {
7957
880
      reqchar = subreqchar;
7958
880
      reqcharflags = subreqcharflags;
7959
880
      }
7960
107k
    break;     /* End of processing '(' */
7961
7962
7963
    /* ===================================================================*/
7964
    /* Handle metasequences introduced by \. For ones like \d, the ESC_ values
7965
    are arranged to be the negation of the corresponding OP_values in the
7966
    default case when PCRE_UCP is not set. For the back references, the values
7967
    are negative the reference number. Only back references and those types
7968
    that consume a character may be repeated. We can test for values between
7969
    ESC_b and ESC_Z for the latter; this may have to change if any new ones are
7970
    ever created. */
7971
7972
48.2k
    case CHAR_BACKSLASH:
7973
48.2k
    tempptr = ptr;
7974
48.2k
    escape = check_escape(&ptr, &ec, errorcodeptr, cd->bracount, options, FALSE);
7975
48.2k
    if (*errorcodeptr != 0) goto FAILED;
7976
7977
48.0k
    if (escape == 0)                  /* The escape coded a single character */
7978
15.4k
      c = ec;
7979
32.5k
    else
7980
32.5k
      {
7981
      /* For metasequences that actually match a character, we disable the
7982
      setting of a first character if it hasn't already been set. */
7983
7984
32.5k
      if (firstcharflags == REQ_UNSET && escape > ESC_b && escape < ESC_Z)
7985
4.52k
        firstcharflags = REQ_NONE;
7986
7987
      /* Set values to reset to if this is followed by a zero repeat. */
7988
7989
32.5k
      zerofirstchar = firstchar;
7990
32.5k
      zerofirstcharflags = firstcharflags;
7991
32.5k
      zeroreqchar = reqchar;
7992
32.5k
      zeroreqcharflags = reqcharflags;
7993
7994
      /* \g<name> or \g'name' is a subroutine call by name and \g<n> or \g'n'
7995
      is a subroutine call by number (Oniguruma syntax). In fact, the value
7996
      ESC_g is returned only for these cases. So we don't need to check for <
7997
      or ' if the value is ESC_g. For the Perl syntax \g{n} the value is
7998
      -n, and for the Perl syntax \g{name} the result is ESC_k (as
7999
      that is a synonym for a named back reference). */
8000
8001
32.5k
      if (escape == ESC_g)
8002
1.65k
        {
8003
1.65k
        const pcre_uchar *p;
8004
1.65k
        pcre_uint32 cf;
8005
8006
1.65k
        item_hwm_offset = cd->hwm - cd->start_workspace;   /* Normally this is set when '(' is read */
8007
1.65k
        terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)?
8008
1.06k
          CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE;
8009
8010
        /* These two statements stop the compiler for warning about possibly
8011
        unset variables caused by the jump to HANDLE_NUMERICAL_RECURSION. In
8012
        fact, because we do the check for a number below, the paths that
8013
        would actually be in error are never taken. */
8014
8015
1.65k
        skipbytes = 0;
8016
1.65k
        reset_bracount = FALSE;
8017
8018
        /* If it's not a signed or unsigned number, treat it as a name. */
8019
8020
1.65k
        cf = ptr[1];
8021
1.65k
        if (cf != CHAR_PLUS && cf != CHAR_MINUS && !IS_DIGIT(cf))
8022
852
          {
8023
852
          is_recurse = TRUE;
8024
852
          goto NAMED_REF_OR_RECURSE;
8025
852
          }
8026
8027
        /* Signed or unsigned number (cf = ptr[1]) is known to be plus or minus
8028
        or a digit. */
8029
8030
801
        p = ptr + 2;
8031
1.46k
        while (IS_DIGIT(*p)) p++;
8032
801
        if (*p != (pcre_uchar)terminator)
8033
13
          {
8034
13
          *errorcodeptr = ERR57;
8035
13
          goto FAILED;
8036
13
          }
8037
788
        ptr++;
8038
788
        goto HANDLE_NUMERICAL_RECURSION;
8039
801
        }
8040
8041
      /* \k<name> or \k'name' is a back reference by name (Perl syntax).
8042
      We also support \k{name} (.NET syntax).  */
8043
8044
30.8k
      if (escape == ESC_k)
8045
5.31k
        {
8046
5.31k
        if ((ptr[1] != CHAR_LESS_THAN_SIGN &&
8047
5.31k
          ptr[1] != CHAR_APOSTROPHE && ptr[1] != CHAR_LEFT_CURLY_BRACKET))
8048
15
          {
8049
15
          *errorcodeptr = ERR69;
8050
15
          goto FAILED;
8051
15
          }
8052
5.29k
        is_recurse = FALSE;
8053
5.29k
        terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)?
8054
4.64k
          CHAR_GREATER_THAN_SIGN : (*ptr == CHAR_APOSTROPHE)?
8055
3.87k
          CHAR_APOSTROPHE : CHAR_RIGHT_CURLY_BRACKET;
8056
5.29k
        goto NAMED_REF_OR_RECURSE;
8057
5.31k
        }
8058
8059
      /* Back references are handled specially; must disable firstchar if
8060
      not set to cope with cases like (?=(\w+))\1: which would otherwise set
8061
      ':' later. */
8062
8063
25.5k
      if (escape < 0)
8064
7.81k
        {
8065
7.81k
        open_capitem *oc;
8066
7.81k
        recno = -escape;
8067
8068
        /* Come here from named backref handling when the reference is to a
8069
        single group (i.e. not to a duplicated name. */
8070
8071
14.3k
        HANDLE_REFERENCE:
8072
14.3k
        if (firstcharflags == REQ_UNSET) zerofirstcharflags = firstcharflags = REQ_NONE;
8073
14.3k
        previous = code;
8074
14.3k
        item_hwm_offset = cd->hwm - cd->start_workspace;
8075
14.3k
        *code++ = ((options & PCRE_CASELESS) != 0)? OP_REFI : OP_REF;
8076
14.3k
        PUT2INC(code, 0, recno);
8077
14.3k
        cd->backref_map |= (recno < 32)? (1U << recno) : 1;
8078
14.3k
        if (recno > cd->top_backref) cd->top_backref = recno;
8079
8080
        /* Check to see if this back reference is recursive, that it, it
8081
        is inside the group that it references. A flag is set so that the
8082
        group can be made atomic. */
8083
8084
114k
        for (oc = cd->open_caps; oc != NULL; oc = oc->next)
8085
107k
          {
8086
107k
          if (oc->number == recno)
8087
7.64k
            {
8088
7.64k
            oc->flag = TRUE;
8089
7.64k
            break;
8090
7.64k
            }
8091
107k
          }
8092
14.3k
        }
8093
8094
      /* So are Unicode property matches, if supported. */
8095
8096
#ifdef SUPPORT_UCP
8097
      else if (escape == ESC_P || escape == ESC_p)
8098
        {
8099
        BOOL negated;
8100
        unsigned int ptype = 0, pdata = 0;
8101
        if (!get_ucp(&ptr, &negated, &ptype, &pdata, errorcodeptr))
8102
          goto FAILED;
8103
        previous = code;
8104
        item_hwm_offset = cd->hwm - cd->start_workspace;
8105
        *code++ = ((escape == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
8106
        *code++ = ptype;
8107
        *code++ = pdata;
8108
        }
8109
#else
8110
8111
      /* If Unicode properties are not supported, \X, \P, and \p are not
8112
      allowed. */
8113
8114
17.7k
      else if (escape == ESC_X || escape == ESC_P || escape == ESC_p)
8115
4
        {
8116
4
        *errorcodeptr = ERR45;
8117
4
        goto FAILED;
8118
4
        }
8119
17.7k
#endif
8120
8121
      /* For the rest (including \X when Unicode properties are supported), we
8122
      can obtain the OP value by negating the escape value in the default
8123
      situation when PCRE_UCP is not set. When it *is* set, we substitute
8124
      Unicode property tests. Note that \b and \B do a one-character
8125
      lookbehind, and \A also behaves as if it does. */
8126
8127
17.7k
      else
8128
17.7k
        {
8129
17.7k
        if ((escape == ESC_b || escape == ESC_B || escape == ESC_A) &&
8130
17.7k
             cd->max_lookbehind == 0)
8131
353
          cd->max_lookbehind = 1;
8132
#ifdef SUPPORT_UCP
8133
        if (escape >= ESC_DU && escape <= ESC_wu)
8134
          {
8135
          nestptr = ptr + 1;                   /* Where to resume */
8136
          ptr = substitutes[escape - ESC_DU] - 1;  /* Just before substitute */
8137
          }
8138
        else
8139
#endif
8140
        /* In non-UTF-8 mode, we turn \C into OP_ALLANY instead of OP_ANYBYTE
8141
        so that it works in DFA mode and in lookbehinds. */
8142
8143
17.7k
          {
8144
17.7k
          previous = (escape > ESC_b && escape < ESC_Z)? code : NULL;
8145
17.7k
          item_hwm_offset = cd->hwm - cd->start_workspace;
8146
17.7k
          *code++ = (!utf && escape == ESC_C)? OP_ALLANY : escape;
8147
17.7k
          }
8148
17.7k
        }
8149
32.1k
      continue;
8150
25.5k
      }
8151
8152
    /* We have a data character whose value is in c. In UTF-8 mode it may have
8153
    a value > 127. We set its representation in the length/buffer, and then
8154
    handle it as a data character. */
8155
8156
#if defined SUPPORT_UTF && !defined COMPILE_PCRE32
8157
    if (utf && c > MAX_VALUE_FOR_SINGLE_CHAR)
8158
      mclength = PRIV(ord2utf)(c, mcbuffer);
8159
    else
8160
#endif
8161
8162
15.4k
     {
8163
15.4k
     mcbuffer[0] = c;
8164
15.4k
     mclength = 1;
8165
15.4k
     }
8166
15.4k
    goto ONE_CHAR;
8167
8168
8169
    /* ===================================================================*/
8170
    /* Handle a literal character. It is guaranteed not to be whitespace or #
8171
    when the extended flag is set. If we are in a UTF mode, it may be a
8172
    multi-unit literal character. */
8173
8174
1.37M
    default:
8175
1.41M
    NORMAL_CHAR:
8176
1.41M
    mclength = 1;
8177
1.41M
    mcbuffer[0] = c;
8178
8179
#ifdef SUPPORT_UTF
8180
    if (utf && HAS_EXTRALEN(c))
8181
      ACROSSCHAR(TRUE, ptr[1], mcbuffer[mclength++] = *(++ptr));
8182
#endif
8183
8184
    /* At this point we have the character's bytes in mcbuffer, and the length
8185
    in mclength. When not in UTF-8 mode, the length is always 1. */
8186
8187
1.43M
    ONE_CHAR:
8188
1.43M
    previous = code;
8189
1.43M
    item_hwm_offset = cd->hwm - cd->start_workspace;
8190
8191
    /* For caseless UTF-8 mode when UCP support is available, check whether
8192
    this character has more than one other case. If so, generate a special
8193
    OP_PROP item instead of OP_CHARI. */
8194
8195
#ifdef SUPPORT_UCP
8196
    if (utf && (options & PCRE_CASELESS) != 0)
8197
      {
8198
      GETCHAR(c, mcbuffer);
8199
      if ((c = UCD_CASESET(c)) != 0)
8200
        {
8201
        *code++ = OP_PROP;
8202
        *code++ = PT_CLIST;
8203
        *code++ = c;
8204
        if (firstcharflags == REQ_UNSET)
8205
          firstcharflags = zerofirstcharflags = REQ_NONE;
8206
        break;
8207
        }
8208
      }
8209
#endif
8210
8211
    /* Caseful matches, or not one of the multicase characters. */
8212
8213
1.43M
    *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARI : OP_CHAR;
8214
2.87M
    for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
8215
8216
    /* Remember if \r or \n were seen */
8217
8218
1.43M
    if (mcbuffer[0] == CHAR_CR || mcbuffer[0] == CHAR_NL)
8219
6.42k
      cd->external_flags |= PCRE_HASCRORLF;
8220
8221
    /* Set the first and required bytes appropriately. If no previous first
8222
    byte, set it from this character, but revert to none on a zero repeat.
8223
    Otherwise, leave the firstchar value alone, and don't change it on a zero
8224
    repeat. */
8225
8226
1.43M
    if (firstcharflags == REQ_UNSET)
8227
206k
      {
8228
206k
      zerofirstcharflags = REQ_NONE;
8229
206k
      zeroreqchar = reqchar;
8230
206k
      zeroreqcharflags = reqcharflags;
8231
8232
      /* If the character is more than one byte long, we can set firstchar
8233
      only if it is not to be matched caselessly. */
8234
8235
206k
      if (mclength == 1 || req_caseopt == 0)
8236
206k
        {
8237
206k
        firstchar = mcbuffer[0];
8238
206k
        firstcharflags = req_caseopt;
8239
8240
206k
        if (mclength != 1)
8241
0
          {
8242
0
          reqchar = code[-1];
8243
0
          reqcharflags = cd->req_varyopt;
8244
0
          }
8245
206k
        }
8246
0
      else firstcharflags = reqcharflags = REQ_NONE;
8247
206k
      }
8248
8249
    /* firstchar was previously set; we can set reqchar only if the length is
8250
    1 or the matching is caseful. */
8251
8252
1.22M
    else
8253
1.22M
      {
8254
1.22M
      zerofirstchar = firstchar;
8255
1.22M
      zerofirstcharflags = firstcharflags;
8256
1.22M
      zeroreqchar = reqchar;
8257
1.22M
      zeroreqcharflags = reqcharflags;
8258
1.22M
      if (mclength == 1 || req_caseopt == 0)
8259
1.22M
        {
8260
1.22M
        reqchar = code[-1];
8261
1.22M
        reqcharflags = req_caseopt | cd->req_varyopt;
8262
1.22M
        }
8263
1.22M
      }
8264
8265
1.43M
    break;            /* End of literal character handling */
8266
2.86M
    }
8267
2.86M
  }                   /* end of big loop */
8268
8269
8270
/* Control never reaches here by falling through, only by a goto for all the
8271
error states. Pass back the position in the pattern so that it can be displayed
8272
to the user for diagnosing the error. */
8273
8274
15.2k
FAILED:
8275
15.2k
*ptrptr = ptr;
8276
15.2k
return FALSE;
8277
617k
}
8278
8279
8280
8281
/*************************************************
8282
*     Compile sequence of alternatives           *
8283
*************************************************/
8284
8285
/* On entry, ptr is pointing past the bracket character, but on return it
8286
points to the closing bracket, or vertical bar, or end of string. The code
8287
variable is pointing at the byte into which the BRA operator has been stored.
8288
This function is used during the pre-compile phase when we are trying to find
8289
out the amount of memory needed, as well as during the real compile phase. The
8290
value of lengthptr distinguishes the two phases.
8291
8292
Arguments:
8293
  options           option bits, including any changes for this subpattern
8294
  codeptr           -> the address of the current code pointer
8295
  ptrptr            -> the address of the current pattern pointer
8296
  errorcodeptr      -> pointer to error code variable
8297
  lookbehind        TRUE if this is a lookbehind assertion
8298
  reset_bracount    TRUE to reset the count for each branch
8299
  skipbytes         skip this many bytes at start (for brackets and OP_COND)
8300
  cond_depth        depth of nesting for conditional subpatterns
8301
  firstcharptr      place to put the first required character
8302
  firstcharflagsptr place to put the first character flags, or a negative number
8303
  reqcharptr        place to put the last required character
8304
  reqcharflagsptr   place to put the last required character flags, or a negative number
8305
  bcptr             pointer to the chain of currently open branches
8306
  cd                points to the data block with tables pointers etc.
8307
  lengthptr         NULL during the real compile phase
8308
                    points to length accumulator during pre-compile phase
8309
8310
Returns:            TRUE on success
8311
*/
8312
8313
static BOOL
8314
compile_regex(int options, pcre_uchar **codeptr, const pcre_uchar **ptrptr,
8315
  int *errorcodeptr, BOOL lookbehind, BOOL reset_bracount, int skipbytes,
8316
  int cond_depth,
8317
  pcre_uint32 *firstcharptr, pcre_int32 *firstcharflagsptr,
8318
  pcre_uint32 *reqcharptr, pcre_int32 *reqcharflagsptr,
8319
  branch_chain *bcptr, compile_data *cd, int *lengthptr)
8320
514k
{
8321
514k
const pcre_uchar *ptr = *ptrptr;
8322
514k
pcre_uchar *code = *codeptr;
8323
514k
pcre_uchar *last_branch = code;
8324
514k
pcre_uchar *start_bracket = code;
8325
514k
pcre_uchar *reverse_count = NULL;
8326
514k
open_capitem capitem;
8327
514k
int capnumber = 0;
8328
514k
pcre_uint32 firstchar, reqchar;
8329
514k
pcre_int32 firstcharflags, reqcharflags;
8330
514k
pcre_uint32 branchfirstchar, branchreqchar;
8331
514k
pcre_int32 branchfirstcharflags, branchreqcharflags;
8332
514k
int length;
8333
514k
unsigned int orig_bracount;
8334
514k
unsigned int max_bracount;
8335
514k
branch_chain bc;
8336
514k
size_t save_hwm_offset;
8337
8338
/* If set, call the external function that checks for stack availability. */
8339
8340
514k
if (PUBL(stack_guard) != NULL && PUBL(stack_guard)())
8341
0
  {
8342
0
  *errorcodeptr= ERR85;
8343
0
  return FALSE;
8344
0
  }
8345
8346
/* Miscellaneous initialization */
8347
8348
514k
bc.outer = bcptr;
8349
514k
bc.current_branch = code;
8350
8351
514k
firstchar = reqchar = 0;
8352
514k
firstcharflags = reqcharflags = REQ_UNSET;
8353
8354
514k
save_hwm_offset = cd->hwm - cd->start_workspace;
8355
8356
/* Accumulate the length for use in the pre-compile phase. Start with the
8357
length of the BRA and KET and any extra bytes that are required at the
8358
beginning. We accumulate in a local variable to save frequent testing of
8359
lenthptr for NULL. We cannot do this by looking at the value of code at the
8360
start and end of each alternative, because compiled items are discarded during
8361
the pre-compile phase so that the work space is not exceeded. */
8362
8363
514k
length = 2 + 2*LINK_SIZE + skipbytes;
8364
8365
/* WARNING: If the above line is changed for any reason, you must also change
8366
the code that abstracts option settings at the start of the pattern and makes
8367
them global. It tests the value of length for (2 + 2*LINK_SIZE) in the
8368
pre-compile phase to find out whether anything has yet been compiled or not. */
8369
8370
/* If this is a capturing subpattern, add to the chain of open capturing items
8371
so that we can detect them if (*ACCEPT) is encountered. This is also used to
8372
detect groups that contain recursive back references to themselves. Note that
8373
only OP_CBRA need be tested here; changing this opcode to one of its variants,
8374
e.g. OP_SCBRAPOS, happens later, after the group has been compiled. */
8375
8376
514k
if (*code == OP_CBRA)
8377
457k
  {
8378
457k
  capnumber = GET2(code, 1 + LINK_SIZE);
8379
457k
  capitem.number = capnumber;
8380
457k
  capitem.next = cd->open_caps;
8381
457k
  capitem.flag = FALSE;
8382
457k
  cd->open_caps = &capitem;
8383
457k
  }
8384
8385
/* Offset is set zero to mark that this bracket is still open */
8386
8387
514k
PUT(code, 1, 0);
8388
514k
code += 1 + LINK_SIZE + skipbytes;
8389
8390
/* Loop for each alternative branch */
8391
8392
514k
orig_bracount = max_bracount = cd->bracount;
8393
514k
for (;;)
8394
617k
  {
8395
  /* For a (?| group, reset the capturing bracket count so that each branch
8396
  uses the same numbers. */
8397
8398
617k
  if (reset_bracount) cd->bracount = orig_bracount;
8399
8400
  /* Set up dummy OP_REVERSE if lookbehind assertion */
8401
8402
617k
  if (lookbehind)
8403
8.82k
    {
8404
8.82k
    *code++ = OP_REVERSE;
8405
8.82k
    reverse_count = code;
8406
8.82k
    PUTINC(code, 0, 0);
8407
8.82k
    length += 1 + LINK_SIZE;
8408
8.82k
    }
8409
8410
  /* Now compile the branch; in the pre-compile phase its length gets added
8411
  into the length. */
8412
8413
617k
  if (!compile_branch(&options, &code, &ptr, errorcodeptr, &branchfirstchar,
8414
617k
        &branchfirstcharflags, &branchreqchar, &branchreqcharflags, &bc,
8415
617k
        cond_depth, cd, (lengthptr == NULL)? NULL : &length))
8416
15.2k
    {
8417
15.2k
    *ptrptr = ptr;
8418
15.2k
    return FALSE;
8419
15.2k
    }
8420
8421
  /* Keep the highest bracket count in case (?| was used and some branch
8422
  has fewer than the rest. */
8423
8424
601k
  if (cd->bracount > max_bracount) max_bracount = cd->bracount;
8425
8426
  /* In the real compile phase, there is some post-processing to be done. */
8427
8428
601k
  if (lengthptr == NULL)
8429
159k
    {
8430
    /* If this is the first branch, the firstchar and reqchar values for the
8431
    branch become the values for the regex. */
8432
8433
159k
    if (*last_branch != OP_ALT)
8434
114k
      {
8435
114k
      firstchar = branchfirstchar;
8436
114k
      firstcharflags = branchfirstcharflags;
8437
114k
      reqchar = branchreqchar;
8438
114k
      reqcharflags = branchreqcharflags;
8439
114k
      }
8440
8441
    /* If this is not the first branch, the first char and reqchar have to
8442
    match the values from all the previous branches, except that if the
8443
    previous value for reqchar didn't have REQ_VARY set, it can still match,
8444
    and we set REQ_VARY for the regex. */
8445
8446
45.3k
    else
8447
45.3k
      {
8448
      /* If we previously had a firstchar, but it doesn't match the new branch,
8449
      we have to abandon the firstchar for the regex, but if there was
8450
      previously no reqchar, it takes on the value of the old firstchar. */
8451
8452
45.3k
      if (firstcharflags >= 0 &&
8453
45.3k
          (firstcharflags != branchfirstcharflags || firstchar != branchfirstchar))
8454
3.33k
        {
8455
3.33k
        if (reqcharflags < 0)
8456
1.42k
          {
8457
1.42k
          reqchar = firstchar;
8458
1.42k
          reqcharflags = firstcharflags;
8459
1.42k
          }
8460
3.33k
        firstcharflags = REQ_NONE;
8461
3.33k
        }
8462
8463
      /* If we (now or from before) have no firstchar, a firstchar from the
8464
      branch becomes a reqchar if there isn't a branch reqchar. */
8465
8466
45.3k
      if (firstcharflags < 0 && branchfirstcharflags >= 0 && branchreqcharflags < 0)
8467
3.87k
        {
8468
3.87k
        branchreqchar = branchfirstchar;
8469
3.87k
        branchreqcharflags = branchfirstcharflags;
8470
3.87k
        }
8471
8472
      /* Now ensure that the reqchars match */
8473
8474
45.3k
      if (((reqcharflags & ~REQ_VARY) != (branchreqcharflags & ~REQ_VARY)) ||
8475
45.3k
          reqchar != branchreqchar)
8476
41.7k
        reqcharflags = REQ_NONE;
8477
3.57k
      else
8478
3.57k
        {
8479
3.57k
        reqchar = branchreqchar;
8480
3.57k
        reqcharflags |= branchreqcharflags; /* To "or" REQ_VARY */
8481
3.57k
        }
8482
45.3k
      }
8483
8484
    /* If lookbehind, check that this branch matches a fixed-length string, and
8485
    put the length into the OP_REVERSE item. Temporarily mark the end of the
8486
    branch with OP_END. If the branch contains OP_RECURSE, the result is -3
8487
    because there may be forward references that we can't check here. Set a
8488
    flag to cause another lookbehind check at the end. Why not do it all at the
8489
    end? Because common, erroneous checks are picked up here and the offset of
8490
    the problem can be shown. */
8491
8492
159k
    if (lookbehind)
8493
3.82k
      {
8494
3.82k
      int fixed_length;
8495
3.82k
      *code = OP_END;
8496
3.82k
      fixed_length = find_fixedlength(last_branch,  (options & PCRE_UTF8) != 0,
8497
3.82k
        FALSE, cd, NULL);
8498
3.82k
      DPRINTF(("fixed length = %d\n", fixed_length));
8499
3.82k
      if (fixed_length == -3)
8500
461
        {
8501
461
        cd->check_lookbehind = TRUE;
8502
461
        }
8503
3.36k
      else if (fixed_length < 0)
8504
211
        {
8505
211
        *errorcodeptr = (fixed_length == -2)? ERR36 :
8506
211
                        (fixed_length == -4)? ERR70: ERR25;
8507
211
        *ptrptr = ptr;
8508
211
        return FALSE;
8509
211
        }
8510
3.15k
      else
8511
3.15k
        {
8512
3.15k
        if (fixed_length > cd->max_lookbehind)
8513
604
          cd->max_lookbehind = fixed_length;
8514
3.15k
        PUT(reverse_count, 0, fixed_length);
8515
3.15k
        }
8516
3.82k
      }
8517
159k
    }
8518
8519
  /* Reached end of expression, either ')' or end of pattern. In the real
8520
  compile phase, go back through the alternative branches and reverse the chain
8521
  of offsets, with the field in the BRA item now becoming an offset to the
8522
  first alternative. If there are no alternatives, it points to the end of the
8523
  group. The length in the terminating ket is always the length of the whole
8524
  bracketed item. Return leaving the pointer at the terminating char. */
8525
8526
601k
  if (*ptr != CHAR_VERTICAL_LINE)
8527
499k
    {
8528
499k
    if (lengthptr == NULL)
8529
113k
      {
8530
113k
      int branch_length = (int)(code - last_branch);
8531
113k
      do
8532
158k
        {
8533
158k
        int prev_length = GET(last_branch, 1);
8534
158k
        PUT(last_branch, 1, branch_length);
8535
158k
        branch_length = prev_length;
8536
158k
        last_branch -= branch_length;
8537
158k
        }
8538
158k
      while (branch_length > 0);
8539
113k
      }
8540
8541
    /* Fill in the ket */
8542
8543
499k
    *code = OP_KET;
8544
499k
    PUT(code, 1, (int)(code - start_bracket));
8545
499k
    code += 1 + LINK_SIZE;
8546
8547
    /* If it was a capturing subpattern, check to see if it contained any
8548
    recursive back references. If so, we must wrap it in atomic brackets.
8549
    Because we are moving code along, we must ensure that any pending recursive
8550
    references are updated. In any event, remove the block from the chain. */
8551
8552
499k
    if (capnumber > 0)
8553
447k
      {
8554
447k
      if (cd->open_caps->flag)
8555
3.32k
        {
8556
3.32k
        *code = OP_END;
8557
3.32k
        adjust_recurse(start_bracket, 1 + LINK_SIZE,
8558
3.32k
          (options & PCRE_UTF8) != 0, cd, save_hwm_offset);
8559
3.32k
        memmove(start_bracket + 1 + LINK_SIZE, start_bracket,
8560
3.32k
          IN_UCHARS(code - start_bracket));
8561
3.32k
        *start_bracket = OP_ONCE;
8562
3.32k
        code += 1 + LINK_SIZE;
8563
3.32k
        PUT(start_bracket, 1, (int)(code - start_bracket));
8564
3.32k
        *code = OP_KET;
8565
3.32k
        PUT(code, 1, (int)(code - start_bracket));
8566
3.32k
        code += 1 + LINK_SIZE;
8567
3.32k
        length += 2 + 2*LINK_SIZE;
8568
3.32k
        }
8569
447k
      cd->open_caps = cd->open_caps->next;
8570
447k
      }
8571
8572
    /* Retain the highest bracket number, in case resetting was used. */
8573
8574
499k
    cd->bracount = max_bracount;
8575
8576
    /* Set values to pass back */
8577
8578
499k
    *codeptr = code;
8579
499k
    *ptrptr = ptr;
8580
499k
    *firstcharptr = firstchar;
8581
499k
    *firstcharflagsptr = firstcharflags;
8582
499k
    *reqcharptr = reqchar;
8583
499k
    *reqcharflagsptr = reqcharflags;
8584
499k
    if (lengthptr != NULL)
8585
385k
      {
8586
385k
      if (OFLOW_MAX - *lengthptr < length)
8587
1
        {
8588
1
        *errorcodeptr = ERR20;
8589
1
        return FALSE;
8590
1
        }
8591
385k
      *lengthptr += length;
8592
385k
      }
8593
499k
    return TRUE;
8594
499k
    }
8595
8596
  /* Another branch follows. In the pre-compile phase, we can move the code
8597
  pointer back to where it was for the start of the first branch. (That is,
8598
  pretend that each branch is the only one.)
8599
8600
  In the real compile phase, insert an ALT node. Its length field points back
8601
  to the previous branch while the bracket remains open. At the end the chain
8602
  is reversed. It's done like this so that the start of the bracket has a
8603
  zero offset until it is closed, making it possible to detect recursion. */
8604
8605
102k
  if (lengthptr != NULL)
8606
56.8k
    {
8607
56.8k
    code = *codeptr + 1 + LINK_SIZE + skipbytes;
8608
56.8k
    length += 1 + LINK_SIZE;
8609
56.8k
    }
8610
45.4k
  else
8611
45.4k
    {
8612
45.4k
    *code = OP_ALT;
8613
45.4k
    PUT(code, 1, (int)(code - last_branch));
8614
45.4k
    bc.current_branch = last_branch = code;
8615
45.4k
    code += 1 + LINK_SIZE;
8616
45.4k
    }
8617
8618
102k
  ptr++;
8619
102k
  }
8620
/* Control never reaches here */
8621
514k
}
8622
8623
8624
8625
8626
/*************************************************
8627
*          Check for anchored expression         *
8628
*************************************************/
8629
8630
/* Try to find out if this is an anchored regular expression. Consider each
8631
alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
8632
all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
8633
it's anchored. However, if this is a multiline pattern, then only OP_SOD will
8634
be found, because ^ generates OP_CIRCM in that mode.
8635
8636
We can also consider a regex to be anchored if OP_SOM starts all its branches.
8637
This is the code for \G, which means "match at start of match position, taking
8638
into account the match offset".
8639
8640
A branch is also implicitly anchored if it starts with .* and DOTALL is set,
8641
because that will try the rest of the pattern at all possible matching points,
8642
so there is no point trying again.... er ....
8643
8644
.... except when the .* appears inside capturing parentheses, and there is a
8645
subsequent back reference to those parentheses. We haven't enough information
8646
to catch that case precisely.
8647
8648
At first, the best we could do was to detect when .* was in capturing brackets
8649
and the highest back reference was greater than or equal to that level.
8650
However, by keeping a bitmap of the first 31 back references, we can catch some
8651
of the more common cases more precisely.
8652
8653
... A second exception is when the .* appears inside an atomic group, because
8654
this prevents the number of characters it matches from being adjusted.
8655
8656
Arguments:
8657
  code           points to start of expression (the bracket)
8658
  bracket_map    a bitmap of which brackets we are inside while testing; this
8659
                  handles up to substring 31; after that we just have to take
8660
                  the less precise approach
8661
  cd             points to the compile data block
8662
  atomcount      atomic group level
8663
8664
Returns:     TRUE or FALSE
8665
*/
8666
8667
static BOOL
8668
is_anchored(register const pcre_uchar *code, unsigned int bracket_map,
8669
  compile_data *cd, int atomcount)
8670
12.3k
{
8671
15.9k
do {
8672
15.9k
   const pcre_uchar *scode = first_significant_code(
8673
15.9k
     code + PRIV(OP_lengths)[*code], FALSE);
8674
15.9k
   register int op = *scode;
8675
8676
   /* Non-capturing brackets */
8677
8678
15.9k
   if (op == OP_BRA  || op == OP_BRAPOS ||
8679
15.9k
       op == OP_SBRA || op == OP_SBRAPOS)
8680
2.00k
     {
8681
2.00k
     if (!is_anchored(scode, bracket_map, cd, atomcount)) return FALSE;
8682
2.00k
     }
8683
8684
   /* Capturing brackets */
8685
8686
13.9k
   else if (op == OP_CBRA  || op == OP_CBRAPOS ||
8687
13.9k
            op == OP_SCBRA || op == OP_SCBRAPOS)
8688
3.51k
     {
8689
3.51k
     int n = GET2(scode, 1+LINK_SIZE);
8690
3.51k
     int new_map = bracket_map | ((n < 32)? (1U << n) : 1);
8691
3.51k
     if (!is_anchored(scode, new_map, cd, atomcount)) return FALSE;
8692
3.51k
     }
8693
8694
   /* Positive forward assertion */
8695
8696
10.4k
   else if (op == OP_ASSERT)
8697
658
     {
8698
658
     if (!is_anchored(scode, bracket_map, cd, atomcount)) return FALSE;
8699
658
     }
8700
8701
   /* Condition; not anchored if no second branch */
8702
8703
9.81k
   else if (op == OP_COND)
8704
231
     {
8705
231
     if (scode[GET(scode,1)] != OP_ALT) return FALSE;
8706
102
     if (!is_anchored(scode, bracket_map, cd, atomcount)) return FALSE;
8707
102
     }
8708
8709
   /* Atomic groups */
8710
8711
9.58k
   else if (op == OP_ONCE || op == OP_ONCE_NC)
8712
585
     {
8713
585
     if (!is_anchored(scode, bracket_map, cd, atomcount + 1))
8714
475
       return FALSE;
8715
585
     }
8716
8717
   /* .* is not anchored unless DOTALL is set (which generates OP_ALLANY) and
8718
   it isn't in brackets that are or may be referenced or inside an atomic
8719
   group. */
8720
8721
8.99k
   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR ||
8722
8.99k
             op == OP_TYPEPOSSTAR))
8723
1.25k
     {
8724
1.25k
     if (scode[1] != OP_ALLANY || (bracket_map & cd->backref_map) != 0 ||
8725
1.25k
         atomcount > 0 || cd->had_pruneorskip)
8726
139
       return FALSE;
8727
1.25k
     }
8728
8729
   /* Check for explicit anchoring */
8730
8731
7.74k
   else if (op != OP_SOD && op != OP_SOM && op != OP_CIRC) return FALSE;
8732
8733
6.01k
   code += GET(code, 1);
8734
6.01k
   }
8735
12.3k
while (*code == OP_ALT);   /* Loop for each alternative */
8736
2.34k
return TRUE;
8737
12.3k
}
8738
8739
8740
8741
/*************************************************
8742
*         Check for starting with ^ or .*        *
8743
*************************************************/
8744
8745
/* This is called to find out if every branch starts with ^ or .* so that
8746
"first char" processing can be done to speed things up in multiline
8747
matching and for non-DOTALL patterns that start with .* (which must start at
8748
the beginning or after \n). As in the case of is_anchored() (see above), we
8749
have to take account of back references to capturing brackets that contain .*
8750
because in that case we can't make the assumption. Also, the appearance of .*
8751
inside atomic brackets or in an assertion, or in a pattern that contains *PRUNE
8752
or *SKIP does not count, because once again the assumption no longer holds.
8753
8754
Arguments:
8755
  code           points to start of expression (the bracket)
8756
  bracket_map    a bitmap of which brackets we are inside while testing; this
8757
                  handles up to substring 31; after that we just have to take
8758
                  the less precise approach
8759
  cd             points to the compile data
8760
  atomcount      atomic group level
8761
  inassert       TRUE if in an assertion
8762
8763
Returns:         TRUE or FALSE
8764
*/
8765
8766
static BOOL
8767
is_startline(const pcre_uchar *code, unsigned int bracket_map,
8768
  compile_data *cd, int atomcount, BOOL inassert)
8769
9.31k
{
8770
12.3k
do {
8771
12.3k
   const pcre_uchar *scode = first_significant_code(
8772
12.3k
     code + PRIV(OP_lengths)[*code], FALSE);
8773
12.3k
   register int op = *scode;
8774
8775
   /* If we are at the start of a conditional assertion group, *both* the
8776
   conditional assertion *and* what follows the condition must satisfy the test
8777
   for start of line. Other kinds of condition fail. Note that there may be an
8778
   auto-callout at the start of a condition. */
8779
8780
12.3k
   if (op == OP_COND)
8781
222
     {
8782
222
     scode += 1 + LINK_SIZE;
8783
222
     if (*scode == OP_CALLOUT) scode += PRIV(OP_lengths)[OP_CALLOUT];
8784
222
     switch (*scode)
8785
222
       {
8786
34
       case OP_CREF:
8787
35
       case OP_DNCREF:
8788
100
       case OP_RREF:
8789
102
       case OP_DNRREF:
8790
106
       case OP_DEF:
8791
112
       case OP_FAIL:
8792
112
       return FALSE;
8793
8794
110
       default:     /* Assertion */
8795
110
       if (!is_startline(scode, bracket_map, cd, atomcount, TRUE)) return FALSE;
8796
286
       do scode += GET(scode, 1); while (*scode == OP_ALT);
8797
60
       scode += 1 + LINK_SIZE;
8798
60
       break;
8799
222
       }
8800
60
     scode = first_significant_code(scode, FALSE);
8801
60
     op = *scode;
8802
60
     }
8803
8804
   /* Non-capturing brackets */
8805
8806
12.1k
   if (op == OP_BRA  || op == OP_BRAPOS ||
8807
12.1k
       op == OP_SBRA || op == OP_SBRAPOS)
8808
1.92k
     {
8809
1.92k
     if (!is_startline(scode, bracket_map, cd, atomcount, inassert)) return FALSE;
8810
1.92k
     }
8811
8812
   /* Capturing brackets */
8813
8814
10.2k
   else if (op == OP_CBRA  || op == OP_CBRAPOS ||
8815
10.2k
            op == OP_SCBRA || op == OP_SCBRAPOS)
8816
2.67k
     {
8817
2.67k
     int n = GET2(scode, 1+LINK_SIZE);
8818
2.67k
     int new_map = bracket_map | ((n < 32)? (1U << n) : 1);
8819
2.67k
     if (!is_startline(scode, new_map, cd, atomcount, inassert)) return FALSE;
8820
2.67k
     }
8821
8822
   /* Positive forward assertions */
8823
8824
7.54k
   else if (op == OP_ASSERT)
8825
537
     {
8826
537
     if (!is_startline(scode, bracket_map, cd, atomcount, TRUE)) return FALSE;
8827
537
     }
8828
8829
   /* Atomic brackets */
8830
8831
7.00k
   else if (op == OP_ONCE || op == OP_ONCE_NC)
8832
392
     {
8833
392
     if (!is_startline(scode, bracket_map, cd, atomcount + 1, inassert)) return FALSE;
8834
392
     }
8835
8836
   /* .* means "start at start or after \n" if it isn't in atomic brackets or
8837
   brackets that may be referenced or an assertion, as long as the pattern does
8838
   not contain *PRUNE or *SKIP, because these break the feature. Consider, for
8839
   example, /.*?a(*PRUNE)b/ with the subject "aab", which matches "ab", i.e.
8840
   not at the start of a line. */
8841
8842
6.61k
   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR || op == OP_TYPEPOSSTAR)
8843
950
     {
8844
950
     if (scode[1] != OP_ANY || (bracket_map & cd->backref_map) != 0 ||
8845
950
         atomcount > 0 || cd->had_pruneorskip || inassert)
8846
86
       return FALSE;
8847
950
     }
8848
8849
   /* Check for explicit circumflex; anything else gives a FALSE result. Note
8850
   in particular that this includes atomic brackets OP_ONCE and OP_ONCE_NC
8851
   because the number of characters matched by .* cannot be adjusted inside
8852
   them. */
8853
8854
5.66k
   else if (op != OP_CIRC && op != OP_CIRCM) return FALSE;
8855
8856
   /* Move on to the next alternative */
8857
8858
5.03k
   code += GET(code, 1);
8859
5.03k
   }
8860
9.31k
while (*code == OP_ALT);  /* Loop for each alternative */
8861
2.03k
return TRUE;
8862
9.31k
}
8863
8864
8865
8866
/*************************************************
8867
*       Check for asserted fixed first char      *
8868
*************************************************/
8869
8870
/* During compilation, the "first char" settings from forward assertions are
8871
discarded, because they can cause conflicts with actual literals that follow.
8872
However, if we end up without a first char setting for an unanchored pattern,
8873
it is worth scanning the regex to see if there is an initial asserted first
8874
char. If all branches start with the same asserted char, or with a
8875
non-conditional bracket all of whose alternatives start with the same asserted
8876
char (recurse ad lib), then we return that char, with the flags set to zero or
8877
REQ_CASELESS; otherwise return zero with REQ_NONE in the flags.
8878
8879
Arguments:
8880
  code       points to start of expression (the bracket)
8881
  flags      points to the first char flags, or to REQ_NONE
8882
  inassert   TRUE if in an assertion
8883
8884
Returns:     the fixed first char, or 0 with REQ_NONE in flags
8885
*/
8886
8887
static pcre_uint32
8888
find_firstassertedchar(const pcre_uchar *code, pcre_int32 *flags,
8889
  BOOL inassert)
8890
8.84k
{
8891
8.84k
register pcre_uint32 c = 0;
8892
8.84k
int cflags = REQ_NONE;
8893
8894
8.84k
*flags = REQ_NONE;
8895
12.3k
do {
8896
12.3k
   pcre_uint32 d;
8897
12.3k
   int dflags;
8898
12.3k
   int xl = (*code == OP_CBRA || *code == OP_SCBRA ||
8899
12.3k
             *code == OP_CBRAPOS || *code == OP_SCBRAPOS)? IMM2_SIZE:0;
8900
12.3k
   const pcre_uchar *scode = first_significant_code(code + 1+LINK_SIZE + xl,
8901
12.3k
     TRUE);
8902
12.3k
   register pcre_uchar op = *scode;
8903
8904
12.3k
   switch(op)
8905
12.3k
     {
8906
3.36k
     default:
8907
3.36k
     return 0;
8908
8909
574
     case OP_BRA:
8910
785
     case OP_BRAPOS:
8911
3.22k
     case OP_CBRA:
8912
3.28k
     case OP_SCBRA:
8913
3.32k
     case OP_CBRAPOS:
8914
3.37k
     case OP_SCBRAPOS:
8915
4.68k
     case OP_ASSERT:
8916
4.98k
     case OP_ONCE:
8917
5.10k
     case OP_ONCE_NC:
8918
5.10k
     d = find_firstassertedchar(scode, &dflags, op == OP_ASSERT);
8919
5.10k
     if (dflags < 0)
8920
3.42k
       return 0;
8921
1.67k
     if (cflags < 0) { c = d; cflags = dflags; } else if (c != d || cflags != dflags) return 0;
8922
1.67k
     break;
8923
8924
1.67k
     case OP_EXACT:
8925
204
     scode += IMM2_SIZE;
8926
     /* Fall through */
8927
8928
1.72k
     case OP_CHAR:
8929
1.95k
     case OP_PLUS:
8930
2.15k
     case OP_MINPLUS:
8931
2.40k
     case OP_POSPLUS:
8932
2.40k
     if (!inassert) return 0;
8933
2.16k
     if (cflags < 0) { c = scode[1]; cflags = 0; }
8934
1.18k
       else if (c != scode[1]) return 0;
8935
2.15k
     break;
8936
8937
2.15k
     case OP_EXACTI:
8938
199
     scode += IMM2_SIZE;
8939
     /* Fall through */
8940
8941
781
     case OP_CHARI:
8942
1.02k
     case OP_PLUSI:
8943
1.22k
     case OP_MINPLUSI:
8944
1.48k
     case OP_POSPLUSI:
8945
1.48k
     if (!inassert) return 0;
8946
1.45k
     if (cflags < 0) { c = scode[1]; cflags = REQ_CASELESS; }
8947
1.37k
       else if (c != scode[1]) return 0;
8948
1.43k
     break;
8949
12.3k
     }
8950
8951
5.26k
   code += GET(code, 1);
8952
5.26k
   }
8953
8.84k
while (*code == OP_ALT);
8954
8955
1.74k
*flags = cflags;
8956
1.74k
return c;
8957
8.84k
}
8958
8959
8960
8961
/*************************************************
8962
*     Add an entry to the name/number table      *
8963
*************************************************/
8964
8965
/* This function is called between compiling passes to add an entry to the
8966
name/number table, maintaining alphabetical order. Checking for permitted
8967
and forbidden duplicates has already been done.
8968
8969
Arguments:
8970
  cd           the compile data block
8971
  name         the name to add
8972
  length       the length of the name
8973
  groupno      the group number
8974
8975
Returns:       nothing
8976
*/
8977
8978
static void
8979
add_name(compile_data *cd, const pcre_uchar *name, int length,
8980
  unsigned int groupno)
8981
19.4k
{
8982
19.4k
int i;
8983
19.4k
pcre_uchar *slot = cd->name_table;
8984
8985
10.0M
for (i = 0; i < cd->names_found; i++)
8986
10.0M
  {
8987
10.0M
  int crc = memcmp(name, slot+IMM2_SIZE, IN_UCHARS(length));
8988
10.0M
  if (crc == 0 && slot[IMM2_SIZE+length] != 0)
8989
12.4k
    crc = -1; /* Current name is a substring */
8990
8991
  /* Make space in the table and break the loop for an earlier name. For a
8992
  duplicate or later name, carry on. We do this for duplicates so that in the
8993
  simple case (when ?(| is not used) they are in order of their numbers. In all
8994
  cases they are in the order in which they appear in the pattern. */
8995
8996
10.0M
  if (crc < 0)
8997
15.2k
    {
8998
15.2k
    memmove(slot + cd->name_entry_size, slot,
8999
15.2k
      IN_UCHARS((cd->names_found - i) * cd->name_entry_size));
9000
15.2k
    break;
9001
15.2k
    }
9002
9003
  /* Continue the loop for a later or duplicate name */
9004
9005
10.0M
  slot += cd->name_entry_size;
9006
10.0M
  }
9007
9008
19.4k
PUT2(slot, 0, groupno);
9009
19.4k
memcpy(slot + IMM2_SIZE, name, IN_UCHARS(length));
9010
19.4k
slot[IMM2_SIZE + length] = 0;
9011
19.4k
cd->names_found++;
9012
19.4k
}
9013
9014
9015
9016
/*************************************************
9017
*        Compile a Regular Expression            *
9018
*************************************************/
9019
9020
/* This function takes a string and returns a pointer to a block of store
9021
holding a compiled version of the expression. The original API for this
9022
function had no error code return variable; it is retained for backwards
9023
compatibility. The new function is given a new name.
9024
9025
Arguments:
9026
  pattern       the regular expression
9027
  options       various option bits
9028
  errorcodeptr  pointer to error code variable (pcre_compile2() only)
9029
                  can be NULL if you don't want a code value
9030
  errorptr      pointer to pointer to error text
9031
  erroroffset   ptr offset in pattern where error was detected
9032
  tables        pointer to character tables or NULL
9033
9034
Returns:        pointer to compiled data block, or NULL on error,
9035
                with errorptr and erroroffset set
9036
*/
9037
9038
#if defined COMPILE_PCRE8
9039
PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
9040
pcre_compile(const char *pattern, int options, const char **errorptr,
9041
  int *erroroffset, const unsigned char *tables)
9042
#elif defined COMPILE_PCRE16
9043
PCRE_EXP_DEFN pcre16 * PCRE_CALL_CONVENTION
9044
pcre16_compile(PCRE_SPTR16 pattern, int options, const char **errorptr,
9045
  int *erroroffset, const unsigned char *tables)
9046
#elif defined COMPILE_PCRE32
9047
PCRE_EXP_DEFN pcre32 * PCRE_CALL_CONVENTION
9048
pcre32_compile(PCRE_SPTR32 pattern, int options, const char **errorptr,
9049
  int *erroroffset, const unsigned char *tables)
9050
#endif
9051
10.0k
{
9052
10.0k
#if defined COMPILE_PCRE8
9053
10.0k
return pcre_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
9054
#elif defined COMPILE_PCRE16
9055
return pcre16_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
9056
#elif defined COMPILE_PCRE32
9057
return pcre32_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
9058
#endif
9059
10.0k
}
9060
9061
9062
#if defined COMPILE_PCRE8
9063
PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
9064
pcre_compile2(const char *pattern, int options, int *errorcodeptr,
9065
  const char **errorptr, int *erroroffset, const unsigned char *tables)
9066
#elif defined COMPILE_PCRE16
9067
PCRE_EXP_DEFN pcre16 * PCRE_CALL_CONVENTION
9068
pcre16_compile2(PCRE_SPTR16 pattern, int options, int *errorcodeptr,
9069
  const char **errorptr, int *erroroffset, const unsigned char *tables)
9070
#elif defined COMPILE_PCRE32
9071
PCRE_EXP_DEFN pcre32 * PCRE_CALL_CONVENTION
9072
pcre32_compile2(PCRE_SPTR32 pattern, int options, int *errorcodeptr,
9073
  const char **errorptr, int *erroroffset, const unsigned char *tables)
9074
#endif
9075
10.0k
{
9076
10.0k
REAL_PCRE *re;
9077
10.0k
int length = 1;  /* For final END opcode */
9078
10.0k
pcre_int32 firstcharflags, reqcharflags;
9079
10.0k
pcre_uint32 firstchar, reqchar;
9080
10.0k
pcre_uint32 limit_match = PCRE_UINT32_MAX;
9081
10.0k
pcre_uint32 limit_recursion = PCRE_UINT32_MAX;
9082
10.0k
int newline;
9083
10.0k
int errorcode = 0;
9084
10.0k
int skipatstart = 0;
9085
10.0k
BOOL utf;
9086
10.0k
BOOL never_utf = FALSE;
9087
10.0k
size_t size;
9088
10.0k
pcre_uchar *code;
9089
10.0k
const pcre_uchar *codestart;
9090
10.0k
const pcre_uchar *ptr;
9091
10.0k
compile_data compile_block;
9092
10.0k
compile_data *cd = &compile_block;
9093
9094
/* This space is used for "compiling" into during the first phase, when we are
9095
computing the amount of memory that is needed. Compiled items are thrown away
9096
as soon as possible, so that a fairly large buffer should be sufficient for
9097
this purpose. The same space is used in the second phase for remembering where
9098
to fill in forward references to subpatterns. That may overflow, in which case
9099
new memory is obtained from malloc(). */
9100
9101
10.0k
pcre_uchar cworkspace[COMPILE_WORK_SIZE];
9102
9103
/* This vector is used for remembering name groups during the pre-compile. In a
9104
similar way to cworkspace, it can be expanded using malloc() if necessary. */
9105
9106
10.0k
named_group named_groups[NAMED_GROUP_LIST_SIZE];
9107
10.0k
cd->named_groups = named_groups;
9108
10.0k
cd->named_group_list_size = NAMED_GROUP_LIST_SIZE;
9109
9110
/* Set this early so that early errors get offset 0. */
9111
9112
10.0k
ptr = (const pcre_uchar *)pattern;
9113
9114
/* We can't pass back an error message if errorptr is NULL; I guess the best we
9115
can do is just return NULL, but we can set a code value if there is a code
9116
pointer. */
9117
9118
10.0k
if (errorptr == NULL)
9119
0
  {
9120
0
  if (errorcodeptr != NULL) *errorcodeptr = 99;
9121
0
  return NULL;
9122
0
  }
9123
9124
10.0k
*errorptr = NULL;
9125
10.0k
if (errorcodeptr != NULL) *errorcodeptr = ERR0;
9126
9127
/* However, we can give a message for this error */
9128
9129
10.0k
if (erroroffset == NULL)
9130
0
  {
9131
0
  errorcode = ERR16;
9132
0
  goto PCRE_EARLY_ERROR_RETURN2;
9133
0
  }
9134
9135
10.0k
*erroroffset = 0;
9136
9137
/* Set up pointers to the individual character tables */
9138
9139
10.0k
if (tables == NULL) tables = PRIV(default_tables);
9140
10.0k
cd->lcc = tables + lcc_offset;
9141
10.0k
cd->fcc = tables + fcc_offset;
9142
10.0k
cd->cbits = tables + cbits_offset;
9143
10.0k
cd->ctypes = tables + ctypes_offset;
9144
9145
/* Check that all undefined public option bits are zero */
9146
9147
10.0k
if ((options & ~PUBLIC_COMPILE_OPTIONS) != 0)
9148
0
  {
9149
0
  errorcode = ERR17;
9150
0
  goto PCRE_EARLY_ERROR_RETURN;
9151
0
  }
9152
9153
/* If PCRE_NEVER_UTF is set, remember it. */
9154
9155
10.0k
if ((options & PCRE_NEVER_UTF) != 0) never_utf = TRUE;
9156
9157
/* Check for global one-time settings at the start of the pattern, and remember
9158
the offset for later. */
9159
9160
10.0k
cd->external_flags = 0;   /* Initialize here for LIMIT_MATCH/RECURSION */
9161
9162
11.1k
while (ptr[skipatstart] == CHAR_LEFT_PARENTHESIS &&
9163
11.1k
       ptr[skipatstart+1] == CHAR_ASTERISK)
9164
1.97k
  {
9165
1.97k
  int newnl = 0;
9166
1.97k
  int newbsr = 0;
9167
9168
/* For completeness and backward compatibility, (*UTFn) is supported in the
9169
relevant libraries, but (*UTF) is generic and always supported. Note that
9170
PCRE_UTF8 == PCRE_UTF16 == PCRE_UTF32. */
9171
9172
1.97k
#ifdef COMPILE_PCRE8
9173
1.97k
  if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_UTF8_RIGHTPAR, 5) == 0)
9174
18
    { skipatstart += 7; options |= PCRE_UTF8; continue; }
9175
1.95k
#endif
9176
#ifdef COMPILE_PCRE16
9177
  if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_UTF16_RIGHTPAR, 6) == 0)
9178
    { skipatstart += 8; options |= PCRE_UTF16; continue; }
9179
#endif
9180
#ifdef COMPILE_PCRE32
9181
  if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_UTF32_RIGHTPAR, 6) == 0)
9182
    { skipatstart += 8; options |= PCRE_UTF32; continue; }
9183
#endif
9184
9185
1.95k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_UTF_RIGHTPAR, 4) == 0)
9186
98
    { skipatstart += 6; options |= PCRE_UTF8; continue; }
9187
1.85k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_UCP_RIGHTPAR, 4) == 0)
9188
34
    { skipatstart += 6; options |= PCRE_UCP; continue; }
9189
1.82k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_NO_AUTO_POSSESS_RIGHTPAR, 16) == 0)
9190
34
    { skipatstart += 18; options |= PCRE_NO_AUTO_POSSESS; continue; }
9191
1.79k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_NO_START_OPT_RIGHTPAR, 13) == 0)
9192
21
    { skipatstart += 15; options |= PCRE_NO_START_OPTIMIZE; continue; }
9193
9194
1.76k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_LIMIT_MATCH_EQ, 12) == 0)
9195
264
    {
9196
264
    pcre_uint32 c = 0;
9197
264
    int p = skipatstart + 14;
9198
264
    while (isdigit(ptr[p]))
9199
1.03k
      {
9200
1.03k
      if (c > PCRE_UINT32_MAX / 10 - 1) break;   /* Integer overflow */
9201
1.03k
      c = c*10 + ptr[p++] - CHAR_0;
9202
1.03k
      }
9203
264
    if (ptr[p++] != CHAR_RIGHT_PARENTHESIS) break;
9204
254
    if (c < limit_match)
9205
66
      {
9206
66
      limit_match = c;
9207
66
      cd->external_flags |= PCRE_MLSET;
9208
66
      }
9209
254
    skipatstart = p;
9210
254
    continue;
9211
264
    }
9212
9213
1.50k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_LIMIT_RECURSION_EQ, 16) == 0)
9214
90
    {
9215
90
    pcre_uint32 c = 0;
9216
90
    int p = skipatstart + 18;
9217
90
    while (isdigit(ptr[p]))
9218
441
      {
9219
441
      if (c > PCRE_UINT32_MAX / 10 - 1) break;   /* Integer overflow check */
9220
440
      c = c*10 + ptr[p++] - CHAR_0;
9221
440
      }
9222
90
    if (ptr[p++] != CHAR_RIGHT_PARENTHESIS) break;
9223
80
    if (c < limit_recursion)
9224
53
      {
9225
53
      limit_recursion = c;
9226
53
      cd->external_flags |= PCRE_RLSET;
9227
53
      }
9228
80
    skipatstart = p;
9229
80
    continue;
9230
90
    }
9231
9232
1.41k
  if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_CR_RIGHTPAR, 3) == 0)
9233
105
    { skipatstart += 5; newnl = PCRE_NEWLINE_CR; }
9234
1.31k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_LF_RIGHTPAR, 3)  == 0)
9235
37
    { skipatstart += 5; newnl = PCRE_NEWLINE_LF; }
9236
1.27k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_CRLF_RIGHTPAR, 5)  == 0)
9237
174
    { skipatstart += 7; newnl = PCRE_NEWLINE_CR + PCRE_NEWLINE_LF; }
9238
1.09k
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_ANY_RIGHTPAR, 4) == 0)
9239
123
    { skipatstart += 6; newnl = PCRE_NEWLINE_ANY; }
9240
976
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_ANYCRLF_RIGHTPAR, 8) == 0)
9241
56
    { skipatstart += 10; newnl = PCRE_NEWLINE_ANYCRLF; }
9242
9243
920
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_BSR_ANYCRLF_RIGHTPAR, 12) == 0)
9244
18
    { skipatstart += 14; newbsr = PCRE_BSR_ANYCRLF; }
9245
902
  else if (STRNCMP_UC_C8(ptr+skipatstart+2, STRING_BSR_UNICODE_RIGHTPAR, 12) == 0)
9246
34
    { skipatstart += 14; newbsr = PCRE_BSR_UNICODE; }
9247
9248
1.41k
  if (newnl != 0)
9249
495
    options = (options & ~PCRE_NEWLINE_BITS) | newnl;
9250
920
  else if (newbsr != 0)
9251
52
    options = (options & ~(PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) | newbsr;
9252
868
  else break;
9253
1.41k
  }
9254
9255
/* PCRE_UTF(16|32) have the same value as PCRE_UTF8. */
9256
10.0k
utf = (options & PCRE_UTF8) != 0;
9257
10.0k
if (utf && never_utf)
9258
0
  {
9259
0
  errorcode = ERR78;
9260
0
  goto PCRE_EARLY_ERROR_RETURN2;
9261
0
  }
9262
9263
/* Can't support UTF unless PCRE has been compiled to include the code. The
9264
return of an error code from PRIV(valid_utf)() is a new feature, introduced in
9265
release 8.13. It is passed back from pcre_[dfa_]exec(), but at the moment is
9266
not used here. */
9267
9268
#ifdef SUPPORT_UTF
9269
if (utf && (options & PCRE_NO_UTF8_CHECK) == 0 &&
9270
     (errorcode = PRIV(valid_utf)((PCRE_PUCHAR)pattern, -1, erroroffset)) != 0)
9271
  {
9272
#if defined COMPILE_PCRE8
9273
  errorcode = ERR44;
9274
#elif defined COMPILE_PCRE16
9275
  errorcode = ERR74;
9276
#elif defined COMPILE_PCRE32
9277
  errorcode = ERR77;
9278
#endif
9279
  goto PCRE_EARLY_ERROR_RETURN2;
9280
  }
9281
#else
9282
10.0k
if (utf)
9283
13
  {
9284
13
  errorcode = ERR32;
9285
13
  goto PCRE_EARLY_ERROR_RETURN;
9286
13
  }
9287
10.0k
#endif
9288
9289
/* Can't support UCP unless PCRE has been compiled to include the code. */
9290
9291
10.0k
#ifndef SUPPORT_UCP
9292
10.0k
if ((options & PCRE_UCP) != 0)
9293
6
  {
9294
6
  errorcode = ERR67;
9295
6
  goto PCRE_EARLY_ERROR_RETURN;
9296
6
  }
9297
10.0k
#endif
9298
9299
/* Check validity of \R options. */
9300
9301
10.0k
if ((options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) ==
9302
10.0k
     (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE))
9303
0
  {
9304
0
  errorcode = ERR56;
9305
0
  goto PCRE_EARLY_ERROR_RETURN;
9306
0
  }
9307
9308
/* Handle different types of newline. The three bits give seven cases. The
9309
current code allows for fixed one- or two-byte sequences, plus "any" and
9310
"anycrlf". */
9311
9312
10.0k
switch (options & PCRE_NEWLINE_BITS)
9313
10.0k
  {
9314
9.87k
  case 0: newline = NEWLINE; break;   /* Build-time default */
9315
11
  case PCRE_NEWLINE_CR: newline = CHAR_CR; break;
9316
9
  case PCRE_NEWLINE_LF: newline = CHAR_NL; break;
9317
41
  case PCRE_NEWLINE_CR+
9318
41
       PCRE_NEWLINE_LF: newline = (CHAR_CR << 8) | CHAR_NL; break;
9319
79
  case PCRE_NEWLINE_ANY: newline = -1; break;
9320
43
  case PCRE_NEWLINE_ANYCRLF: newline = -2; break;
9321
0
  default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN;
9322
10.0k
  }
9323
9324
10.0k
if (newline == -2)
9325
43
  {
9326
43
  cd->nltype = NLTYPE_ANYCRLF;
9327
43
  }
9328
10.0k
else if (newline < 0)
9329
79
  {
9330
79
  cd->nltype = NLTYPE_ANY;
9331
79
  }
9332
9.93k
else
9333
9.93k
  {
9334
9.93k
  cd->nltype = NLTYPE_FIXED;
9335
9.93k
  if (newline > 255)
9336
41
    {
9337
41
    cd->nllen = 2;
9338
41
    cd->nl[0] = (newline >> 8) & 255;
9339
41
    cd->nl[1] = newline & 255;
9340
41
    }
9341
9.89k
  else
9342
9.89k
    {
9343
9.89k
    cd->nllen = 1;
9344
9.89k
    cd->nl[0] = newline;
9345
9.89k
    }
9346
9.93k
  }
9347
9348
/* Maximum back reference and backref bitmap. The bitmap records up to 31 back
9349
references to help in deciding whether (.*) can be treated as anchored or not.
9350
*/
9351
9352
10.0k
cd->top_backref = 0;
9353
10.0k
cd->backref_map = 0;
9354
9355
/* Reflect pattern for debugging output */
9356
9357
10.0k
DPRINTF(("------------------------------------------------------------------\n"));
9358
#ifdef PCRE_DEBUG
9359
print_puchar(stdout, (PCRE_PUCHAR)pattern);
9360
#endif
9361
10.0k
DPRINTF(("\n"));
9362
9363
/* Pretend to compile the pattern while actually just accumulating the length
9364
of memory required. This behaviour is triggered by passing a non-NULL final
9365
argument to compile_regex(). We pass a block of workspace (cworkspace) for it
9366
to compile parts of the pattern into; the compiled code is discarded when it is
9367
no longer needed, so hopefully this workspace will never overflow, though there
9368
is a test for its doing so. */
9369
9370
10.0k
cd->bracount = cd->final_bracount = 0;
9371
10.0k
cd->names_found = 0;
9372
10.0k
cd->name_entry_size = 0;
9373
10.0k
cd->name_table = NULL;
9374
10.0k
cd->dupnames = FALSE;
9375
10.0k
cd->dupgroups = FALSE;
9376
10.0k
cd->namedrefcount = 0;
9377
10.0k
cd->start_code = cworkspace;
9378
10.0k
cd->hwm = cworkspace;
9379
10.0k
cd->iscondassert = FALSE;
9380
10.0k
cd->start_workspace = cworkspace;
9381
10.0k
cd->workspace_size = COMPILE_WORK_SIZE;
9382
10.0k
cd->start_pattern = (const pcre_uchar *)pattern;
9383
10.0k
cd->end_pattern = (const pcre_uchar *)(pattern + STRLEN_UC((const pcre_uchar *)pattern));
9384
10.0k
cd->req_varyopt = 0;
9385
10.0k
cd->parens_depth = 0;
9386
10.0k
cd->assert_depth = 0;
9387
10.0k
cd->max_lookbehind = 0;
9388
10.0k
cd->external_options = options;
9389
10.0k
cd->open_caps = NULL;
9390
9391
/* Now do the pre-compile. On error, errorcode will be set non-zero, so we
9392
don't need to look at the result of the function here. The initial options have
9393
been put into the cd block so that they can be changed if an option setting is
9394
found within the regex right at the beginning. Bringing initial option settings
9395
outside can help speed up starting point checks. */
9396
9397
10.0k
ptr += skipatstart;
9398
10.0k
code = cworkspace;
9399
10.0k
*code = OP_BRA;
9400
9401
10.0k
(void)compile_regex(cd->external_options, &code, &ptr, &errorcode, FALSE,
9402
10.0k
  FALSE, 0, 0, &firstchar, &firstcharflags, &reqchar, &reqcharflags, NULL,
9403
10.0k
  cd, &length);
9404
10.0k
if (errorcode != 0) goto PCRE_EARLY_ERROR_RETURN;
9405
9406
7.31k
DPRINTF(("end pre-compile: length=%d workspace=%d\n", length,
9407
7.31k
  (int)(cd->hwm - cworkspace)));
9408
9409
7.31k
if (length > MAX_PATTERN_SIZE)
9410
87
  {
9411
87
  errorcode = ERR20;
9412
87
  goto PCRE_EARLY_ERROR_RETURN;
9413
87
  }
9414
9415
/* Compute the size of the data block for storing the compiled pattern. Integer
9416
overflow should no longer be possible because nowadays we limit the maximum
9417
value of cd->names_found and cd->name_entry_size. */
9418
9419
7.22k
size = sizeof(REAL_PCRE) +
9420
7.22k
  (length + cd->names_found * cd->name_entry_size) * sizeof(pcre_uchar);
9421
9422
/* Get the memory. */
9423
9424
7.22k
re = (REAL_PCRE *)(PUBL(malloc))(size);
9425
7.22k
if (re == NULL)
9426
0
  {
9427
0
  errorcode = ERR21;
9428
0
  goto PCRE_EARLY_ERROR_RETURN;
9429
0
  }
9430
9431
/* Put in the magic number, and save the sizes, initial options, internal
9432
flags, and character table pointer. NULL is used for the default character
9433
tables. The nullpad field is at the end; it's there to help in the case when a
9434
regex compiled on a system with 4-byte pointers is run on another with 8-byte
9435
pointers. */
9436
9437
7.22k
re->magic_number = MAGIC_NUMBER;
9438
7.22k
re->size = (int)size;
9439
7.22k
re->options = cd->external_options;
9440
7.22k
re->flags = cd->external_flags;
9441
7.22k
re->limit_match = limit_match;
9442
7.22k
re->limit_recursion = limit_recursion;
9443
7.22k
re->first_char = 0;
9444
7.22k
re->req_char = 0;
9445
7.22k
re->name_table_offset = sizeof(REAL_PCRE) / sizeof(pcre_uchar);
9446
7.22k
re->name_entry_size = cd->name_entry_size;
9447
7.22k
re->name_count = cd->names_found;
9448
7.22k
re->ref_count = 0;
9449
7.22k
re->tables = (tables == PRIV(default_tables))? NULL : tables;
9450
7.22k
re->nullpad = NULL;
9451
#ifdef COMPILE_PCRE32
9452
re->dummy = 0;
9453
#else
9454
7.22k
re->dummy1 = re->dummy2 = re->dummy3 = 0;
9455
7.22k
#endif
9456
9457
/* The starting points of the name/number translation table and of the code are
9458
passed around in the compile data block. The start/end pattern and initial
9459
options are already set from the pre-compile phase, as is the name_entry_size
9460
field. Reset the bracket count and the names_found field. Also reset the hwm
9461
field; this time it's used for remembering forward references to subpatterns.
9462
*/
9463
9464
7.22k
cd->final_bracount = cd->bracount;  /* Save for checking forward references */
9465
7.22k
cd->parens_depth = 0;
9466
7.22k
cd->assert_depth = 0;
9467
7.22k
cd->bracount = 0;
9468
7.22k
cd->max_lookbehind = 0;
9469
7.22k
cd->name_table = (pcre_uchar *)re + re->name_table_offset;
9470
7.22k
codestart = cd->name_table + re->name_entry_size * re->name_count;
9471
7.22k
cd->start_code = codestart;
9472
7.22k
cd->hwm = (pcre_uchar *)(cd->start_workspace);
9473
7.22k
cd->iscondassert = FALSE;
9474
7.22k
cd->req_varyopt = 0;
9475
7.22k
cd->had_accept = FALSE;
9476
7.22k
cd->had_pruneorskip = FALSE;
9477
7.22k
cd->check_lookbehind = FALSE;
9478
7.22k
cd->open_caps = NULL;
9479
9480
/* If any named groups were found, create the name/number table from the list
9481
created in the first pass. */
9482
9483
7.22k
if (cd->names_found > 0)
9484
790
  {
9485
790
  int i = cd->names_found;
9486
790
  named_group *ng = cd->named_groups;
9487
790
  cd->names_found = 0;
9488
20.2k
  for (; i > 0; i--, ng++)
9489
19.4k
    add_name(cd, ng->name, ng->length, ng->number);
9490
790
  if (cd->named_group_list_size > NAMED_GROUP_LIST_SIZE)
9491
50
    (PUBL(free))((void *)cd->named_groups);
9492
790
  cd->named_group_list_size = 0;   /* So we don't free it twice */
9493
790
  }
9494
9495
/* Set up a starting, non-extracting bracket, then compile the expression. On
9496
error, errorcode will be set non-zero, so we don't need to look at the result
9497
of the function here. */
9498
9499
7.22k
ptr = (const pcre_uchar *)pattern + skipatstart;
9500
7.22k
code = (pcre_uchar *)codestart;
9501
7.22k
*code = OP_BRA;
9502
7.22k
(void)compile_regex(re->options, &code, &ptr, &errorcode, FALSE, FALSE, 0, 0,
9503
7.22k
  &firstchar, &firstcharflags, &reqchar, &reqcharflags, NULL, cd, NULL);
9504
7.22k
re->top_bracket = cd->bracount;
9505
7.22k
re->top_backref = cd->top_backref;
9506
7.22k
re->max_lookbehind = cd->max_lookbehind;
9507
7.22k
re->flags = cd->external_flags | PCRE_MODE;
9508
9509
7.22k
if (cd->had_accept)
9510
40
  {
9511
40
  reqchar = 0;              /* Must disable after (*ACCEPT) */
9512
40
  reqcharflags = REQ_NONE;
9513
40
  }
9514
9515
/* If not reached end of pattern on success, there's an excess bracket. */
9516
9517
7.22k
if (errorcode == 0 && *ptr != CHAR_NULL) errorcode = ERR22;
9518
9519
/* Fill in the terminating state and check for disastrous overflow, but
9520
if debugging, leave the test till after things are printed out. */
9521
9522
7.22k
*code++ = OP_END;
9523
9524
7.22k
#ifndef PCRE_DEBUG
9525
7.22k
if (code - codestart > length) errorcode = ERR23;
9526
7.22k
#endif
9527
9528
#ifdef SUPPORT_VALGRIND
9529
/* If the estimated length exceeds the really used length, mark the extra
9530
allocated memory as unaddressable, so that any out-of-bound reads can be
9531
detected. */
9532
VALGRIND_MAKE_MEM_NOACCESS(code, (length - (code - codestart)) * sizeof(pcre_uchar));
9533
#endif
9534
9535
/* Fill in any forward references that are required. There may be repeated
9536
references; optimize for them, as searching a large regex takes time. */
9537
9538
7.22k
if (cd->hwm > cd->start_workspace)
9539
318
  {
9540
318
  int prev_recno = -1;
9541
318
  const pcre_uchar *groupptr = NULL;
9542
74.8k
  while (errorcode == 0 && cd->hwm > cd->start_workspace)
9543
74.4k
    {
9544
74.4k
    int offset, recno;
9545
74.4k
    cd->hwm -= LINK_SIZE;
9546
74.4k
    offset = GET(cd->hwm, 0);
9547
9548
    /* Check that the hwm handling hasn't gone wrong. This whole area is
9549
    rewritten in PCRE2 because there are some obscure cases. */
9550
9551
74.4k
    if (offset == 0 || codestart[offset-1] != OP_RECURSE)
9552
4
      {
9553
4
      errorcode = ERR10;
9554
4
      break;
9555
4
      }
9556
9557
74.4k
    recno = GET(codestart, offset);
9558
74.4k
    if (recno != prev_recno)
9559
1.27k
      {
9560
1.27k
      groupptr = PRIV(find_bracket)(codestart, utf, recno);
9561
1.27k
      prev_recno = recno;
9562
1.27k
      }
9563
74.4k
    if (groupptr == NULL) errorcode = ERR53;
9564
74.4k
      else PUT(((pcre_uchar *)codestart), offset, (int)(groupptr - codestart));
9565
74.4k
    }
9566
318
  }
9567
9568
/* If the workspace had to be expanded, free the new memory. Set the pointer to
9569
NULL to indicate that forward references have been filled in. */
9570
9571
7.22k
if (cd->workspace_size > COMPILE_WORK_SIZE)
9572
17
  (PUBL(free))((void *)cd->start_workspace);
9573
7.22k
cd->start_workspace = NULL;
9574
9575
/* Give an error if there's back reference to a non-existent capturing
9576
subpattern. */
9577
9578
7.22k
if (errorcode == 0 && re->top_backref > re->top_bracket) errorcode = ERR15;
9579
9580
/* Unless disabled, check whether any single character iterators can be
9581
auto-possessified. The function overwrites the appropriate opcode values, so
9582
the type of the pointer must be cast. NOTE: the intermediate variable "temp" is
9583
used in this code because at least one compiler gives a warning about loss of
9584
"const" attribute if the cast (pcre_uchar *)codestart is used directly in the
9585
function call. */
9586
9587
7.22k
if (errorcode == 0 && (options & PCRE_NO_AUTO_POSSESS) == 0)
9588
5.58k
  {
9589
5.58k
  pcre_uchar *temp = (pcre_uchar *)codestart;
9590
5.58k
  auto_possessify(temp, utf, cd);
9591
5.58k
  }
9592
9593
/* If there were any lookbehind assertions that contained OP_RECURSE
9594
(recursions or subroutine calls), a flag is set for them to be checked here,
9595
because they may contain forward references. Actual recursions cannot be fixed
9596
length, but subroutine calls can. It is done like this so that those without
9597
OP_RECURSE that are not fixed length get a diagnosic with a useful offset. The
9598
exceptional ones forgo this. We scan the pattern to check that they are fixed
9599
length, and set their lengths. */
9600
9601
7.22k
if (errorcode == 0 && cd->check_lookbehind)
9602
200
  {
9603
200
  pcre_uchar *cc = (pcre_uchar *)codestart;
9604
9605
  /* Loop, searching for OP_REVERSE items, and process those that do not have
9606
  their length set. (Actually, it will also re-process any that have a length
9607
  of zero, but that is a pathological case, and it does no harm.) When we find
9608
  one, we temporarily terminate the branch it is in while we scan it. */
9609
9610
200
  for (cc = (pcre_uchar *)PRIV(find_bracket)(codestart, utf, -1);
9611
2.69k
       cc != NULL;
9612
2.49k
       cc = (pcre_uchar *)PRIV(find_bracket)(cc, utf, -1))
9613
2.62k
    {
9614
2.62k
    if (GET(cc, 1) == 0)
9615
2.36k
      {
9616
2.36k
      int fixed_length;
9617
2.36k
      pcre_uchar *be = cc - 1 - LINK_SIZE + GET(cc, -LINK_SIZE);
9618
2.36k
      int end_op = *be;
9619
2.36k
      *be = OP_END;
9620
2.36k
      fixed_length = find_fixedlength(cc, (re->options & PCRE_UTF8) != 0, TRUE,
9621
2.36k
        cd, NULL);
9622
2.36k
      *be = end_op;
9623
2.36k
      DPRINTF(("fixed length = %d\n", fixed_length));
9624
2.36k
      if (fixed_length < 0)
9625
129
        {
9626
129
        errorcode = (fixed_length == -2)? ERR36 :
9627
129
                    (fixed_length == -4)? ERR70 : ERR25;
9628
129
        break;
9629
129
        }
9630
2.23k
      if (fixed_length > cd->max_lookbehind) cd->max_lookbehind = fixed_length;
9631
2.23k
      PUT(cc, 1, fixed_length);
9632
2.23k
      }
9633
2.49k
    cc += 1 + LINK_SIZE;
9634
2.49k
    }
9635
200
  }
9636
9637
/* Failed to compile, or error while post-processing */
9638
9639
7.22k
if (errorcode != 0)
9640
1.76k
  {
9641
1.76k
  (PUBL(free))(re);
9642
4.61k
  PCRE_EARLY_ERROR_RETURN:
9643
4.61k
  if (cd->named_group_list_size > NAMED_GROUP_LIST_SIZE)
9644
33
    (PUBL(free))((void *)cd->named_groups);
9645
4.61k
  *erroroffset = (int)(ptr - (const pcre_uchar *)pattern);
9646
4.61k
  PCRE_EARLY_ERROR_RETURN2:
9647
4.61k
  *errorptr = find_error_text(errorcode);
9648
4.61k
  if (errorcodeptr != NULL) *errorcodeptr = errorcode;
9649
4.61k
  return NULL;
9650
4.61k
  }
9651
9652
/* If the anchored option was not passed, set the flag if we can determine that
9653
the pattern is anchored by virtue of ^ characters or \A or anything else, such
9654
as starting with non-atomic .* when DOTALL is set and there are no occurrences
9655
of *PRUNE or *SKIP.
9656
9657
Otherwise, if we know what the first byte has to be, save it, because that
9658
speeds up unanchored matches no end. If not, see if we can set the
9659
PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
9660
start with ^. and also when all branches start with non-atomic .* for
9661
non-DOTALL matches when *PRUNE and SKIP are not present. */
9662
9663
5.46k
if ((re->options & PCRE_ANCHORED) == 0)
9664
5.46k
  {
9665
5.46k
  if (is_anchored(codestart, 0, cd, 0)) re->options |= PCRE_ANCHORED;
9666
5.36k
  else
9667
5.36k
    {
9668
5.36k
    if (firstcharflags < 0)
9669
3.73k
      firstchar = find_firstassertedchar(codestart, &firstcharflags, FALSE);
9670
5.36k
    if (firstcharflags >= 0)   /* Remove caseless flag for non-caseable chars */
9671
1.68k
      {
9672
1.68k
#if defined COMPILE_PCRE8
9673
1.68k
      re->first_char = firstchar & 0xff;
9674
#elif defined COMPILE_PCRE16
9675
      re->first_char = firstchar & 0xffff;
9676
#elif defined COMPILE_PCRE32
9677
      re->first_char = firstchar;
9678
#endif
9679
1.68k
      if ((firstcharflags & REQ_CASELESS) != 0)
9680
43
        {
9681
#if defined SUPPORT_UCP && !(defined COMPILE_PCRE8)
9682
        /* We ignore non-ASCII first chars in 8 bit mode. */
9683
        if (utf)
9684
          {
9685
          if (re->first_char < 128)
9686
            {
9687
            if (cd->fcc[re->first_char] != re->first_char)
9688
              re->flags |= PCRE_FCH_CASELESS;
9689
            }
9690
          else if (UCD_OTHERCASE(re->first_char) != re->first_char)
9691
            re->flags |= PCRE_FCH_CASELESS;
9692
          }
9693
        else
9694
#endif
9695
43
        if (MAX_255(re->first_char)
9696
43
            && cd->fcc[re->first_char] != re->first_char)
9697
12
          re->flags |= PCRE_FCH_CASELESS;
9698
43
        }
9699
9700
1.68k
      re->flags |= PCRE_FIRSTSET;
9701
1.68k
      }
9702
9703
3.67k
    else if (is_startline(codestart, 0, cd, 0, FALSE)) re->flags |= PCRE_STARTLINE;
9704
5.36k
    }
9705
5.46k
  }
9706
9707
/* For an anchored pattern, we use the "required byte" only if it follows a
9708
variable length item in the regex. Remove the caseless flag for non-caseable
9709
bytes. */
9710
9711
5.46k
if (reqcharflags >= 0 &&
9712
5.46k
     ((re->options & PCRE_ANCHORED) == 0 || (reqcharflags & REQ_VARY) != 0))
9713
2.06k
  {
9714
2.06k
#if defined COMPILE_PCRE8
9715
2.06k
  re->req_char = reqchar & 0xff;
9716
#elif defined COMPILE_PCRE16
9717
  re->req_char = reqchar & 0xffff;
9718
#elif defined COMPILE_PCRE32
9719
  re->req_char = reqchar;
9720
#endif
9721
2.06k
  if ((reqcharflags & REQ_CASELESS) != 0)
9722
58
    {
9723
#if defined SUPPORT_UCP && !(defined COMPILE_PCRE8)
9724
    /* We ignore non-ASCII first chars in 8 bit mode. */
9725
    if (utf)
9726
      {
9727
      if (re->req_char < 128)
9728
        {
9729
        if (cd->fcc[re->req_char] != re->req_char)
9730
          re->flags |= PCRE_RCH_CASELESS;
9731
        }
9732
      else if (UCD_OTHERCASE(re->req_char) != re->req_char)
9733
        re->flags |= PCRE_RCH_CASELESS;
9734
      }
9735
    else
9736
#endif
9737
58
    if (MAX_255(re->req_char) && cd->fcc[re->req_char] != re->req_char)
9738
17
      re->flags |= PCRE_RCH_CASELESS;
9739
58
    }
9740
9741
2.06k
  re->flags |= PCRE_REQCHSET;
9742
2.06k
  }
9743
9744
/* Print out the compiled data if debugging is enabled. This is never the
9745
case when building a production library. */
9746
9747
#ifdef PCRE_DEBUG
9748
printf("Length = %d top_bracket = %d top_backref = %d\n",
9749
  length, re->top_bracket, re->top_backref);
9750
9751
printf("Options=%08x\n", re->options);
9752
9753
if ((re->flags & PCRE_FIRSTSET) != 0)
9754
  {
9755
  pcre_uchar ch = re->first_char;
9756
  const char *caseless =
9757
    ((re->flags & PCRE_FCH_CASELESS) == 0)? "" : " (caseless)";
9758
  if (PRINTABLE(ch)) printf("First char = %c%s\n", ch, caseless);
9759
    else printf("First char = \\x%02x%s\n", ch, caseless);
9760
  }
9761
9762
if ((re->flags & PCRE_REQCHSET) != 0)
9763
  {
9764
  pcre_uchar ch = re->req_char;
9765
  const char *caseless =
9766
    ((re->flags & PCRE_RCH_CASELESS) == 0)? "" : " (caseless)";
9767
  if (PRINTABLE(ch)) printf("Req char = %c%s\n", ch, caseless);
9768
    else printf("Req char = \\x%02x%s\n", ch, caseless);
9769
  }
9770
9771
#if defined COMPILE_PCRE8
9772
pcre_printint((pcre *)re, stdout, TRUE);
9773
#elif defined COMPILE_PCRE16
9774
pcre16_printint((pcre *)re, stdout, TRUE);
9775
#elif defined COMPILE_PCRE32
9776
pcre32_printint((pcre *)re, stdout, TRUE);
9777
#endif
9778
9779
/* This check is done here in the debugging case so that the code that
9780
was compiled can be seen. */
9781
9782
if (code - codestart > length)
9783
  {
9784
  (PUBL(free))(re);
9785
  *errorptr = find_error_text(ERR23);
9786
  *erroroffset = ptr - (pcre_uchar *)pattern;
9787
  if (errorcodeptr != NULL) *errorcodeptr = ERR23;
9788
  return NULL;
9789
  }
9790
#endif   /* PCRE_DEBUG */
9791
9792
/* Check for a pattern than can match an empty string, so that this information
9793
can be provided to applications. */
9794
9795
5.46k
do
9796
7.44k
  {
9797
7.44k
  if (could_be_empty_branch(codestart, code, utf, cd, NULL))
9798
2.25k
    {
9799
2.25k
    re->flags |= PCRE_MATCH_EMPTY;
9800
2.25k
    break;
9801
2.25k
    }
9802
5.18k
  codestart += GET(codestart, 1);
9803
5.18k
  }
9804
5.46k
while (*codestart == OP_ALT);
9805
9806
0
#if defined COMPILE_PCRE8
9807
0
return (pcre *)re;
9808
#elif defined COMPILE_PCRE16
9809
return (pcre16 *)re;
9810
#elif defined COMPILE_PCRE32
9811
return (pcre32 *)re;
9812
#endif
9813
7.22k
}
9814
9815
/* End of pcre_compile.c */