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

生物技术

开发平台:

C/C++

  1.         }
  2.       }
  3.     length++;
  4.     /* A back reference needs an additional 2 bytes, plus either one or 5
  5.     bytes for a repeat. We also need to keep the value of the highest
  6.     back reference. */
  7.     if (c <= -ESC_REF)
  8.       {
  9.       int refnum = -c - ESC_REF;
  10.       if (refnum > top_backref) top_backref = refnum;
  11.       length += 2;   /* For single back reference */
  12.       if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  13.         {
  14.         ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  15.         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  16.         if ((min == 0 && (max == 1 || max == -1)) ||
  17.           (min == 1 && max == -1))
  18.             length++;
  19.         else length += 5;
  20.         if (ptr[1] == '?') ptr++;
  21.         }
  22.       }
  23.     continue;
  24.     case '^':
  25.     case '.':
  26.     case '$':
  27.     case '*':     /* These repeats won't be after brackets; */
  28.     case '+':     /* those are handled separately */
  29.     case '?':
  30.     length++;
  31.     continue;
  32.     /* This covers the cases of repeats after a single char, metachar, class,
  33.     or back reference. */
  34.     case '{':
  35.     if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
  36.     ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
  37.     if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  38.     if ((min == 0 && (max == 1 || max == -1)) ||
  39.       (min == 1 && max == -1))
  40.         length++;
  41.     else
  42.       {
  43.       length--;   /* Uncount the original char or metachar */
  44.       if (min == 1) length++; else if (min > 0) length += 4;
  45.       if (max > 0) length += 4; else length += 2;
  46.       }
  47.     if (ptr[1] == '?') ptr++;
  48.     continue;
  49.     /* An alternation contains an offset to the next branch or ket. If any ims
  50.     options changed in the previous branch(es), and/or if we are in a
  51.     lookbehind assertion, extra space will be needed at the start of the
  52.     branch. This is handled by branch_extra. */
  53.     case '|':
  54.     length += 3 + branch_extra;
  55.     continue;
  56.     /* A character class uses 33 characters. Don't worry about character types
  57.     that aren't allowed in classes - they'll get picked up during the compile.
  58.     A character class that contains only one character uses 2 or 3 bytes,
  59.     depending on whether it is negated or not. Notice this where we can. */
  60.     case '[':
  61.     class_charcount = 0;
  62.     if (*(++ptr) == '^') ptr++;
  63.     do
  64.       {
  65.       if (*ptr == '\')
  66.         {
  67.         int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
  68.           &compile_block);
  69.         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  70.         if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
  71.         }
  72.       else class_charcount++;
  73.       ptr++;
  74.       }
  75.     while (*ptr != 0 && *ptr != ']');
  76.     /* Repeats for negated single chars are handled by the general code */
  77.     if (class_charcount == 1) length += 3; else
  78.       {
  79.       length += 33;
  80.       /* A repeat needs either 1 or 5 bytes. */
  81.       if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
  82.         {
  83.         ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
  84.         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  85.         if ((min == 0 && (max == 1 || max == -1)) ||
  86.           (min == 1 && max == -1))
  87.             length++;
  88.         else length += 5;
  89.         if (ptr[1] == '?') ptr++;
  90.         }
  91.       }
  92.     continue;
  93.     /* Brackets may be genuine groups or special things */
  94.     case '(':
  95.     branch_newextra = 0;
  96.     bracket_length = 3;
  97.     /* Handle special forms of bracket, which all start (? */
  98.     if (ptr[1] == '?')
  99.       {
  100.       int set, unset;
  101.       int *optset;
  102.       switch (c = ptr[2])
  103.         {
  104.         /* Skip over comments entirely */
  105.         case '#':
  106.         ptr += 3;
  107.         while (*ptr != 0 && *ptr != ')') ptr++;
  108.         if (*ptr == 0)
  109.           {
  110.           *errorptr = ERR18;
  111.           goto PCRE_ERROR_RETURN;
  112.           }
  113.         continue;
  114.         /* Non-referencing groups and lookaheads just move the pointer on, and
  115.         then behave like a non-special bracket, except that they don't increment
  116.         the count of extracting brackets. Ditto for the "once only" bracket,
  117.         which is in Perl from version 5.005. */
  118.         case ':':
  119.         case '=':
  120.         case '!':
  121.         case '>':
  122.         ptr += 2;
  123.         break;
  124.         /* A recursive call to the regex is an extension, to provide the
  125.         facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
  126.         case 'R':
  127.         if (ptr[3] != ')')
  128.           {
  129.           *errorptr = ERR29;
  130.           goto PCRE_ERROR_RETURN;
  131.           }
  132.         ptr += 3;
  133.         length += 1;
  134.         break;
  135.         /* Lookbehinds are in Perl from version 5.005 */
  136.         case '<':
  137.         if (ptr[3] == '=' || ptr[3] == '!')
  138.           {
  139.           ptr += 3;
  140.           branch_newextra = 3;
  141.           length += 3;         /* For the first branch */
  142.           break;
  143.           }
  144.         *errorptr = ERR24;
  145.         goto PCRE_ERROR_RETURN;
  146.         /* Conditionals are in Perl from version 5.005. The bracket must either
  147.         be followed by a number (for bracket reference) or by an assertion
  148.         group. */
  149.         case '(':
  150.         if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
  151.           {
  152.           ptr += 4;
  153.           length += 3;
  154.           while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
  155.           if (*ptr != ')')
  156.             {
  157.             *errorptr = ERR26;
  158.             goto PCRE_ERROR_RETURN;
  159.             }
  160.           }
  161.         else   /* An assertion must follow */
  162.           {
  163.           ptr++;   /* Can treat like ':' as far as spacing is concerned */
  164.           if (ptr[2] != '?' ||
  165.              (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
  166.             {
  167.             ptr += 2;    /* To get right offset in message */
  168.             *errorptr = ERR28;
  169.             goto PCRE_ERROR_RETURN;
  170.             }
  171.           }
  172.         break;
  173.         /* Else loop checking valid options until ) is met. Anything else is an
  174.         error. If we are without any brackets, i.e. at top level, the settings
  175.         act as if specified in the options, so massage the options immediately.
  176.         This is for backward compatibility with Perl 5.004. */
  177.         default:
  178.         set = unset = 0;
  179.         optset = &set;
  180.         ptr += 2;
  181.         for (;; ptr++)
  182.           {
  183.           c = *ptr;
  184.           switch (c)
  185.             {
  186.             case 'i':
  187.             *optset |= PCRE_CASELESS;
  188.             continue;
  189.             case 'm':
  190.             *optset |= PCRE_MULTILINE;
  191.             continue;
  192.             case 's':
  193.             *optset |= PCRE_DOTALL;
  194.             continue;
  195.             case 'x':
  196.             *optset |= PCRE_EXTENDED;
  197.             continue;
  198.             case 'X':
  199.             *optset |= PCRE_EXTRA;
  200.             continue;
  201.             case 'U':
  202.             *optset |= PCRE_UNGREEDY;
  203.             continue;
  204.             case '-':
  205.             optset = &unset;
  206.             continue;
  207.             /* A termination by ')' indicates an options-setting-only item;
  208.             this is global at top level; otherwise nothing is done here and
  209.             it is handled during the compiling process on a per-bracket-group
  210.             basis. */
  211.             case ')':
  212.             if (brastackptr == 0)
  213.               {
  214.               options = (options | set) & (~unset);
  215.               set = unset = 0;     /* To save length */
  216.               }
  217.             /* Fall through */
  218.             /* A termination by ':' indicates the start of a nested group with
  219.             the given options set. This is again handled at compile time, but
  220.             we must allow for compiled space if any of the ims options are
  221.             set. We also have to allow for resetting space at the end of
  222.             the group, which is why 4 is added to the length and not just 2.
  223.             If there are several changes of options within the same group, this
  224.             will lead to an over-estimate on the length, but this shouldn't
  225.             matter very much. We also have to allow for resetting options at
  226.             the start of any alternations, which we do by setting
  227.             branch_newextra to 2. Finally, we record whether the case-dependent
  228.             flag ever changes within the regex. This is used by the "required
  229.             character" code. */
  230.             case ':':
  231.             if (((set|unset) & PCRE_IMS) != 0)
  232.               {
  233.               length += 4;
  234.               branch_newextra = 2;
  235.               if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
  236.               }
  237.             goto END_OPTIONS;
  238.             /* Unrecognized option character */
  239.             default:
  240.             *errorptr = ERR12;
  241.             goto PCRE_ERROR_RETURN;
  242.             }
  243.           }
  244.         /* If we hit a closing bracket, that's it - this is a freestanding
  245.         option-setting. We need to ensure that branch_extra is updated if
  246.         necessary. The only values branch_newextra can have here are 0 or 2.
  247.         If the value is 2, then branch_extra must either be 2 or 5, depending
  248.         on whether this is a lookbehind group or not. */
  249.         END_OPTIONS:
  250.         if (c == ')')
  251.           {
  252.           if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
  253.             branch_extra += branch_newextra;
  254.           continue;
  255.           }
  256.         /* If options were terminated by ':' control comes here. Fall through
  257.         to handle the group below. */
  258.         }
  259.       }
  260.     /* Extracting brackets must be counted so we can process escapes in a
  261.     Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  262.     need an additional 3 bytes of store per extracting bracket. */
  263.     else
  264.       {
  265.       bracount++;
  266.       if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  267.       }
  268.     /* Save length for computing whole length at end if there's a repeat that
  269.     requires duplication of the group. Also save the current value of
  270.     branch_extra, and start the new group with the new value. If non-zero, this
  271.     will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
  272.     if (brastackptr >= sizeof(brastack)/sizeof(int))
  273.       {
  274.       *errorptr = ERR19;
  275.       goto PCRE_ERROR_RETURN;
  276.       }
  277.     bralenstack[brastackptr] = branch_extra;
  278.     branch_extra = branch_newextra;
  279.     brastack[brastackptr++] = length;
  280.     length += bracket_length;
  281.     continue;
  282.     /* Handle ket. Look for subsequent max/min; for certain sets of values we
  283.     have to replicate this bracket up to that many times. If brastackptr is
  284.     0 this is an unmatched bracket which will generate an error, but take care
  285.     not to try to access brastack[-1] when computing the length and restoring
  286.     the branch_extra value. */
  287.     case ')':
  288.     length += 3;
  289.       {
  290.       int minval = 1;
  291.       int maxval = 1;
  292.       int duplength;
  293.       if (brastackptr > 0)
  294.         {
  295.         duplength = length - brastack[--brastackptr];
  296.         branch_extra = bralenstack[brastackptr];
  297.         }
  298.       else duplength = 0;
  299.       /* Leave ptr at the final char; for read_repeat_counts this happens
  300.       automatically; for the others we need an increment. */
  301.       if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
  302.         {
  303.         ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
  304.           &compile_block);
  305.         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  306.         }
  307.       else if (c == '*') { minval = 0; maxval = -1; ptr++; }
  308.       else if (c == '+') { maxval = -1; ptr++; }
  309.       else if (c == '?') { minval = 0; ptr++; }
  310.       /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
  311.       group, and if the maximum is greater than zero, we have to replicate
  312.       maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
  313.       bracket set - hence the 7. */
  314.       if (minval == 0)
  315.         {
  316.         length++;
  317.         if (maxval > 0) length += (maxval - 1) * (duplength + 7);
  318.         }
  319.       /* When the minimum is greater than zero, 1 we have to replicate up to
  320.       minval-1 times, with no additions required in the copies. Then, if
  321.       there is a limited maximum we have to replicate up to maxval-1 times
  322.       allowing for a BRAZERO item before each optional copy and nesting
  323.       brackets for all but one of the optional copies. */
  324.       else
  325.         {
  326.         length += (minval - 1) * duplength;
  327.         if (maxval > minval)   /* Need this test as maxval=-1 means no limit */
  328.           length += (maxval - minval) * (duplength + 7) - 6;
  329.         }
  330.       }
  331.     continue;
  332.     /* Non-special character. For a run of such characters the length required
  333.     is the number of characters + 2, except that the maximum run length is 255.
  334.     We won't get a skipped space or a non-data escape or the start of a #
  335.     comment as the first character, so the length can't be zero. */
  336.     NORMAL_CHAR:
  337.     default:
  338.     length += 2;
  339.     runlength = 0;
  340.     do
  341.       {
  342.       if ((options & PCRE_EXTENDED) != 0)
  343.         {
  344.         if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
  345.         if (c == '#')
  346.           {
  347.           /* The space before the ; is to avoid a warning on a silly compiler
  348.           on the Macintosh. */
  349.           while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
  350.           continue;
  351.           }
  352.         }
  353.       /* Backslash may introduce a data char or a metacharacter; stop the
  354.       string before the latter. */
  355.       if (c == '\')
  356.         {
  357.         const uschar *saveptr = ptr;
  358.         c = check_escape(&ptr, errorptr, bracount, options, FALSE,
  359.           &compile_block);
  360.         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
  361.         if (c < 0) { ptr = saveptr; break; }
  362. #ifdef SUPPORT_UTF8
  363.         if (c > 127 && (options & PCRE_UTF8) != 0)
  364.           {
  365.           int i;
  366.           for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  367.             if (c <= utf8_table1[i]) break;
  368.           runlength += i;
  369.           }
  370. #endif
  371.         }
  372.       /* Ordinary character or single-char escape */
  373.       runlength++;
  374.       }
  375.     /* This "while" is the end of the "do" above. */
  376.     while (runlength < MAXLIT &&
  377.       (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
  378.     ptr--;
  379.     length += runlength;
  380.     continue;
  381.     }
  382.   }
  383. length += 4;    /* For final KET and END */
  384. if (length > 65539)
  385.   {
  386.   *errorptr = ERR20;
  387.   return NULL;
  388.   }
  389. /* Compute the size of data block needed and get it, either from malloc or
  390. externally provided function. We specify "code[0]" in the offsetof() expression
  391. rather than just "code", because it has been reported that one broken compiler
  392. fails on "code" because it is also an independent variable. It should make no
  393. difference to the value of the offsetof(). */
  394. size = length + offsetof(real_pcre, code[0]);
  395. re = (real_pcre *)(pcre_malloc)(size);
  396. if (re == NULL)
  397.   {
  398.   *errorptr = ERR21;
  399.   return NULL;
  400.   }
  401. /* Put in the magic number, and save the size, options, and table pointer */
  402. re->magic_number = MAGIC_NUMBER;
  403. re->size = size;
  404. re->options = options;
  405. re->tables = tables;
  406. /* Set up a starting, non-extracting bracket, then compile the expression. On
  407. error, *errorptr will be set non-NULL, so we don't need to look at the result
  408. of the function here. */
  409. ptr = (const uschar *)pattern;
  410. code = re->code;
  411. *code = OP_BRA;
  412. bracount = 0;
  413. (void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
  414.   &reqchar, &countlits, &compile_block);
  415. re->top_bracket = bracount;
  416. re->top_backref = top_backref;
  417. /* If not reached end of pattern on success, there's an excess bracket. */
  418. if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
  419. /* Fill in the terminating state and check for disastrous overflow, but
  420. if debugging, leave the test till after things are printed out. */
  421. *code++ = OP_END;
  422. #ifndef DEBUG
  423. if (code - re->code > length) *errorptr = ERR23;
  424. #endif
  425. /* Give an error if there's back reference to a non-existent capturing
  426. subpattern. */
  427. if (top_backref > re->top_bracket) *errorptr = ERR15;
  428. /* Failed to compile */
  429. if (*errorptr != NULL)
  430.   {
  431.   (pcre_free)(re);
  432.   PCRE_ERROR_RETURN:
  433.   *erroroffset = ptr - (const uschar *)pattern;
  434.   return NULL;
  435.   }
  436. /* If the anchored option was not passed, set flag if we can determine that the
  437. pattern is anchored by virtue of ^ characters or A or anything else (such as
  438. starting with .* when DOTALL is set).
  439. Otherwise, see if we can determine what the first character has to be, because
  440. that speeds up unanchored matches no end. If not, see if we can set the
  441. PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
  442. start with ^. and also when all branches start with .* for non-DOTALL matches.
  443. */
  444. if ((options & PCRE_ANCHORED) == 0)
  445.   {
  446.   int temp_options = options;
  447.   if (is_anchored(re->code, &temp_options))
  448.     re->options |= PCRE_ANCHORED;
  449.   else
  450.     {
  451.     int ch = find_firstchar(re->code, &temp_options);
  452.     if (ch >= 0)
  453.       {
  454.       re->first_char = ch;
  455.       re->options |= PCRE_FIRSTSET;
  456.       }
  457.     else if (is_startline(re->code))
  458.       re->options |= PCRE_STARTLINE;
  459.     }
  460.   }
  461. /* Save the last required character if there are at least two literal
  462. characters on all paths, or if there is no first character setting. */
  463. if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
  464.   {
  465.   re->req_char = reqchar;
  466.   re->options |= PCRE_REQCHSET;
  467.   }
  468. /* Print out the compiled data for debugging */
  469. #ifdef DEBUG
  470. printf("Length = %d top_bracket = %d top_backref = %dn",
  471.   length, re->top_bracket, re->top_backref);
  472. if (re->options != 0)
  473.   {
  474.   printf("%s%s%s%s%s%s%s%s%sn",
  475.     ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
  476.     ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
  477.     ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
  478.     ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
  479.     ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
  480.     ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
  481.     ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
  482.     ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
  483.     ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
  484.   }
  485. if ((re->options & PCRE_FIRSTSET) != 0)
  486.   {
  487.   if (isprint(re->first_char)) printf("First char = %cn", re->first_char);
  488.     else printf("First char = \x%02xn", re->first_char);
  489.   }
  490. if ((re->options & PCRE_REQCHSET) != 0)
  491.   {
  492.   if (isprint(re->req_char)) printf("Req char = %cn", re->req_char);
  493.     else printf("Req char = \x%02xn", re->req_char);
  494.   }
  495. code_end = code;
  496. code_base = code = re->code;
  497. while (code < code_end)
  498.   {
  499.   int charlength;
  500.   printf("%3d ", code - code_base);
  501.   if (*code >= OP_BRA)
  502.     {
  503.     if (*code - OP_BRA > EXTRACT_BASIC_MAX)
  504.       printf("%3d Bra extra", (code[1] << 8) + code[2]);
  505.     else
  506.       printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
  507.     code += 2;
  508.     }
  509.   else switch(*code)
  510.     {
  511.     case OP_OPT:
  512.     printf(" %.2x %s", code[1], OP_names[*code]);
  513.     code++;
  514.     break;
  515.     case OP_CHARS:
  516.     charlength = *(++code);
  517.     printf("%3d ", charlength);
  518.     while (charlength-- > 0)
  519.       if (isprint(c = *(++code))) printf("%c", c); else printf("\x%02x", c);
  520.     break;
  521.     case OP_KETRMAX:
  522.     case OP_KETRMIN:
  523.     case OP_ALT:
  524.     case OP_KET:
  525.     case OP_ASSERT:
  526.     case OP_ASSERT_NOT:
  527.     case OP_ASSERTBACK:
  528.     case OP_ASSERTBACK_NOT:
  529.     case OP_ONCE:
  530.     case OP_REVERSE:
  531.     case OP_BRANUMBER:
  532.     case OP_COND:
  533.     case OP_CREF:
  534.     printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
  535.     code += 2;
  536.     break;
  537.     case OP_STAR:
  538.     case OP_MINSTAR:
  539.     case OP_PLUS:
  540.     case OP_MINPLUS:
  541.     case OP_QUERY:
  542.     case OP_MINQUERY:
  543.     case OP_TYPESTAR:
  544.     case OP_TYPEMINSTAR:
  545.     case OP_TYPEPLUS:
  546.     case OP_TYPEMINPLUS:
  547.     case OP_TYPEQUERY:
  548.     case OP_TYPEMINQUERY:
  549.     if (*code >= OP_TYPESTAR)
  550.       printf("    %s", OP_names[code[1]]);
  551.     else if (isprint(c = code[1])) printf("    %c", c);
  552.       else printf("    \x%02x", c);
  553.     printf("%s", OP_names[*code++]);
  554.     break;
  555.     case OP_EXACT:
  556.     case OP_UPTO:
  557.     case OP_MINUPTO:
  558.     if (isprint(c = code[3])) printf("    %c{", c);
  559.       else printf("    \x%02x{", c);
  560.     if (*code != OP_EXACT) printf("0,");
  561.     printf("%d}", (code[1] << 8) + code[2]);
  562.     if (*code == OP_MINUPTO) printf("?");
  563.     code += 3;
  564.     break;
  565.     case OP_TYPEEXACT:
  566.     case OP_TYPEUPTO:
  567.     case OP_TYPEMINUPTO:
  568.     printf("    %s{", OP_names[code[3]]);
  569.     if (*code != OP_TYPEEXACT) printf(",");
  570.     printf("%d}", (code[1] << 8) + code[2]);
  571.     if (*code == OP_TYPEMINUPTO) printf("?");
  572.     code += 3;
  573.     break;
  574.     case OP_NOT:
  575.     if (isprint(c = *(++code))) printf("    [^%c]", c);
  576.       else printf("    [^\x%02x]", c);
  577.     break;
  578.     case OP_NOTSTAR:
  579.     case OP_NOTMINSTAR:
  580.     case OP_NOTPLUS:
  581.     case OP_NOTMINPLUS:
  582.     case OP_NOTQUERY:
  583.     case OP_NOTMINQUERY:
  584.     if (isprint(c = code[1])) printf("    [^%c]", c);
  585.       else printf("    [^\x%02x]", c);
  586.     printf("%s", OP_names[*code++]);
  587.     break;
  588.     case OP_NOTEXACT:
  589.     case OP_NOTUPTO:
  590.     case OP_NOTMINUPTO:
  591.     if (isprint(c = code[3])) printf("    [^%c]{", c);
  592.       else printf("    [^\x%02x]{", c);
  593.     if (*code != OP_NOTEXACT) printf(",");
  594.     printf("%d}", (code[1] << 8) + code[2]);
  595.     if (*code == OP_NOTMINUPTO) printf("?");
  596.     code += 3;
  597.     break;
  598.     case OP_REF:
  599.     printf("    \%d", (code[1] << 8) | code[2]);
  600.     code += 3;
  601.     goto CLASS_REF_REPEAT;
  602.     case OP_CLASS:
  603.       {
  604.       int i, min, max;
  605.       code++;
  606.       printf("    [");
  607.       for (i = 0; i < 256; i++)
  608.         {
  609.         if ((code[i/8] & (1 << (i&7))) != 0)
  610.           {
  611.           int j;
  612.           for (j = i+1; j < 256; j++)
  613.             if ((code[j/8] & (1 << (j&7))) == 0) break;
  614.           if (i == '-' || i == ']') printf("\");
  615.           if (isprint(i)) printf("%c", i); else printf("\x%02x", i);
  616.           if (--j > i)
  617.             {
  618.             printf("-");
  619.             if (j == '-' || j == ']') printf("\");
  620.             if (isprint(j)) printf("%c", j); else printf("\x%02x", j);
  621.             }
  622.           i = j;
  623.           }
  624.         }
  625.       printf("]");
  626.       code += 32;
  627.       CLASS_REF_REPEAT:
  628.       switch(*code)
  629.         {
  630.         case OP_CRSTAR:
  631.         case OP_CRMINSTAR:
  632.         case OP_CRPLUS:
  633.         case OP_CRMINPLUS:
  634.         case OP_CRQUERY:
  635.         case OP_CRMINQUERY:
  636.         printf("%s", OP_names[*code]);
  637.         break;
  638.         case OP_CRRANGE:
  639.         case OP_CRMINRANGE:
  640.         min = (code[1] << 8) + code[2];
  641.         max = (code[3] << 8) + code[4];
  642.         if (max == 0) printf("{%d,}", min);
  643.         else printf("{%d,%d}", min, max);
  644.         if (*code == OP_CRMINRANGE) printf("?");
  645.         code += 4;
  646.         break;
  647.         default:
  648.         code--;
  649.         }
  650.       }
  651.     break;
  652.     /* Anything else is just a one-node item */
  653.     default:
  654.     printf("    %s", OP_names[*code]);
  655.     break;
  656.     }
  657.   code++;
  658.   printf("n");
  659.   }
  660. printf("------------------------------------------------------------------n");
  661. /* This check is done here in the debugging case so that the code that
  662. was compiled can be seen. */
  663. if (code - re->code > length)
  664.   {
  665.   *errorptr = ERR23;
  666.   (pcre_free)(re);
  667.   *erroroffset = ptr - (uschar *)pattern;
  668.   return NULL;
  669.   }
  670. #endif
  671. return (pcre *)re;
  672. }
  673. /*************************************************
  674. *          Match a back-reference                *
  675. *************************************************/
  676. /* If a back reference hasn't been set, the length that is passed is greater
  677. than the number of characters left in the string, so the match fails.
  678. Arguments:
  679.   offset      index into the offset vector
  680.   eptr        points into the subject
  681.   length      length to be matched
  682.   md          points to match data block
  683.   ims         the ims flags
  684. Returns:      TRUE if matched
  685. */
  686. static BOOL
  687. match_ref(int offset, register const uschar *eptr, int length, match_data *md,
  688.   unsigned long int ims)
  689. {
  690. const uschar *p = md->start_subject + md->offset_vector[offset];
  691. #ifdef DEBUG
  692. if (eptr >= md->end_subject)
  693.   printf("matching subject <null>");
  694. else
  695.   {
  696.   printf("matching subject ");
  697.   pchars(eptr, length, TRUE, md);
  698.   }
  699. printf(" against backref ");
  700. pchars(p, length, FALSE, md);
  701. printf("n");
  702. #endif
  703. /* Always fail if not enough characters left */
  704. if (length > md->end_subject - eptr) return FALSE;
  705. /* Separate the caselesss case for speed */
  706. if ((ims & PCRE_CASELESS) != 0)
  707.   {
  708.   while (length-- > 0)
  709.     if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
  710.   }
  711. else
  712.   { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
  713. return TRUE;
  714. }
  715. /*************************************************
  716. *         Match from current position            *
  717. *************************************************/
  718. /* On entry ecode points to the first opcode, and eptr to the first character
  719. in the subject string, while eptrb holds the value of eptr at the start of the
  720. last bracketed group - used for breaking infinite loops matching zero-length
  721. strings.
  722. Arguments:
  723.    eptr        pointer in subject
  724.    ecode       position in code
  725.    offset_top  current top pointer
  726.    md          pointer to "static" info for the match
  727.    ims         current /i, /m, and /s options
  728.    eptrb       pointer to chain of blocks containing eptr at start of
  729.                  brackets - for testing for empty matches
  730.    flags       can contain
  731.                  match_condassert - this is an assertion condition
  732.                  match_isgroup - this is the start of a bracketed group
  733. Returns:       TRUE if matched
  734. */
  735. static BOOL
  736. match(register const uschar *eptr, register const uschar *ecode,
  737.   int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
  738.   int flags)
  739. {
  740. unsigned long int original_ims = ims;   /* Save for resetting on ')' */
  741. eptrblock newptrb;
  742. /* At the start of a bracketed group, add the current subject pointer to the
  743. stack of such pointers, to be re-instated at the end of the group when we hit
  744. the closing ket. When match() is called in other circumstances, we don't add to
  745. the stack. */
  746. if ((flags & match_isgroup) != 0)
  747.   {
  748.   newptrb.prev = eptrb;
  749.   newptrb.saved_eptr = eptr;
  750.   eptrb = &newptrb;
  751.   }
  752. /* Now start processing the operations. */
  753. for (;;)
  754.   {
  755.   int op = (int)*ecode;
  756.   int min, max, ctype;
  757.   register int i;
  758.   register int c;
  759.   BOOL minimize = FALSE;
  760.   /* Opening capturing bracket. If there is space in the offset vector, save
  761.   the current subject position in the working slot at the top of the vector. We
  762.   mustn't change the current values of the data slot, because they may be set
  763.   from a previous iteration of this group, and be referred to by a reference
  764.   inside the group.
  765.   If the bracket fails to match, we need to restore this value and also the
  766.   values of the final offsets, in case they were set by a previous iteration of
  767.   the same bracket.
  768.   If there isn't enough space in the offset vector, treat this as if it were a
  769.   non-capturing bracket. Don't worry about setting the flag for the error case
  770.   here; that is handled in the code for KET. */
  771.   if (op > OP_BRA)
  772.     {
  773.     int offset;
  774.     int number = op - OP_BRA;
  775.     /* For extended extraction brackets (large number), we have to fish out the
  776.     number from a dummy opcode at the start. */
  777.     if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
  778.     offset = number << 1;
  779. #ifdef DEBUG
  780.     printf("start bracket %d subject=", number);
  781.     pchars(eptr, 16, TRUE, md);
  782.     printf("n");
  783. #endif
  784.     if (offset < md->offset_max)
  785.       {
  786.       int save_offset1 = md->offset_vector[offset];
  787.       int save_offset2 = md->offset_vector[offset+1];
  788.       int save_offset3 = md->offset_vector[md->offset_end - number];
  789.       DPRINTF(("saving %d %d %dn", save_offset1, save_offset2, save_offset3));
  790.       md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
  791.       do
  792.         {
  793.         if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  794.           return TRUE;
  795.         ecode += (ecode[1] << 8) + ecode[2];
  796.         }
  797.       while (*ecode == OP_ALT);
  798.       DPRINTF(("bracket %d failedn", number));
  799.       md->offset_vector[offset] = save_offset1;
  800.       md->offset_vector[offset+1] = save_offset2;
  801.       md->offset_vector[md->offset_end - number] = save_offset3;
  802.       return FALSE;
  803.       }
  804.     /* Insufficient room for saving captured contents */
  805.     else op = OP_BRA;
  806.     }
  807.   /* Other types of node can be handled by a switch */
  808.   switch(op)
  809.     {
  810.     case OP_BRA:     /* Non-capturing bracket: optimized */
  811.     DPRINTF(("start bracket 0n"));
  812.     do
  813.       {
  814.       if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  815.         return TRUE;
  816.       ecode += (ecode[1] << 8) + ecode[2];
  817.       }
  818.     while (*ecode == OP_ALT);
  819.     DPRINTF(("bracket 0 failedn"));
  820.     return FALSE;
  821.     /* Conditional group: compilation checked that there are no more than
  822.     two branches. If the condition is false, skipping the first branch takes us
  823.     past the end if there is only one branch, but that's OK because that is
  824.     exactly what going to the ket would do. */
  825.     case OP_COND:
  826.     if (ecode[3] == OP_CREF)         /* Condition is extraction test */
  827.       {
  828.       int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
  829.       return match(eptr,
  830.         ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
  831.           6 : 3 + (ecode[1] << 8) + ecode[2]),
  832.         offset_top, md, ims, eptrb, match_isgroup);
  833.       }
  834.     /* The condition is an assertion. Call match() to evaluate it - setting
  835.     the final argument TRUE causes it to stop at the end of an assertion. */
  836.     else
  837.       {
  838.       if (match(eptr, ecode+3, offset_top, md, ims, NULL,
  839.           match_condassert | match_isgroup))
  840.         {
  841.         ecode += 3 + (ecode[4] << 8) + ecode[5];
  842.         while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
  843.         }
  844.       else ecode += (ecode[1] << 8) + ecode[2];
  845.       return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
  846.       }
  847.     /* Control never reaches here */
  848.     /* Skip over conditional reference or large extraction number data if
  849.     encountered. */
  850.     case OP_CREF:
  851.     case OP_BRANUMBER:
  852.     ecode += 3;
  853.     break;
  854.     /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
  855.     an empty string - recursion will then try other alternatives, if any. */
  856.     case OP_END:
  857.     if (md->notempty && eptr == md->start_match) return FALSE;
  858.     md->end_match_ptr = eptr;          /* Record where we ended */
  859.     md->end_offset_top = offset_top;   /* and how many extracts were taken */
  860.     return TRUE;
  861.     /* Change option settings */
  862.     case OP_OPT:
  863.     ims = ecode[1];
  864.     ecode += 2;
  865.     DPRINTF(("ims set to %02lxn", ims));
  866.     break;
  867.     /* Assertion brackets. Check the alternative branches in turn - the
  868.     matching won't pass the KET for an assertion. If any one branch matches,
  869.     the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
  870.     start of each branch to move the current point backwards, so the code at
  871.     this level is identical to the lookahead case. */
  872.     case OP_ASSERT:
  873.     case OP_ASSERTBACK:
  874.     do
  875.       {
  876.       if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
  877.       ecode += (ecode[1] << 8) + ecode[2];
  878.       }
  879.     while (*ecode == OP_ALT);
  880.     if (*ecode == OP_KET) return FALSE;
  881.     /* If checking an assertion for a condition, return TRUE. */
  882.     if ((flags & match_condassert) != 0) return TRUE;
  883.     /* Continue from after the assertion, updating the offsets high water
  884.     mark, since extracts may have been taken during the assertion. */
  885.     do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  886.     ecode += 3;
  887.     offset_top = md->end_offset_top;
  888.     continue;
  889.     /* Negative assertion: all branches must fail to match */
  890.     case OP_ASSERT_NOT:
  891.     case OP_ASSERTBACK_NOT:
  892.     do
  893.       {
  894.       if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
  895.         return FALSE;
  896.       ecode += (ecode[1] << 8) + ecode[2];
  897.       }
  898.     while (*ecode == OP_ALT);
  899.     if ((flags & match_condassert) != 0) return TRUE;
  900.     ecode += 3;
  901.     continue;
  902.     /* Move the subject pointer back. This occurs only at the start of
  903.     each branch of a lookbehind assertion. If we are too close to the start to
  904.     move back, this match function fails. When working with UTF-8 we move
  905.     back a number of characters, not bytes. */
  906.     case OP_REVERSE:
  907. #ifdef SUPPORT_UTF8
  908.     c = (ecode[1] << 8) + ecode[2];
  909.     for (i = 0; i < c; i++)
  910.       {
  911.       eptr--;
  912.       BACKCHAR(eptr)
  913.       }
  914. #else
  915.     eptr -= (ecode[1] << 8) + ecode[2];
  916. #endif
  917.     if (eptr < md->start_subject) return FALSE;
  918.     ecode += 3;
  919.     break;
  920.     /* Recursion matches the current regex, nested. If there are any capturing
  921.     brackets started but not finished, we have to save their starting points
  922.     and reinstate them after the recursion. However, we don't know how many
  923.     such there are (offset_top records the completed total) so we just have
  924.     to save all the potential data. There may be up to 99 such values, which
  925.     is a bit large to put on the stack, but using malloc for small numbers
  926.     seems expensive. As a compromise, the stack is used when there are fewer
  927.     than 16 values to store; otherwise malloc is used. A problem is what to do
  928.     if the malloc fails ... there is no way of returning to the top level with
  929.     an error. Save the top 15 values on the stack, and accept that the rest
  930.     may be wrong. */
  931.     case OP_RECURSE:
  932.       {
  933.       BOOL rc;
  934.       int *save;
  935.       int stacksave[15];
  936.       c = md->offset_max;
  937.       if (c < 16) save = stacksave; else
  938.         {
  939.         save = (int *)(pcre_malloc)((c+1) * sizeof(int));
  940.         if (save == NULL)
  941.           {
  942.           save = stacksave;
  943.           c = 15;
  944.           }
  945.         }
  946.       for (i = 1; i <= c; i++)
  947.         save[i] = md->offset_vector[md->offset_end - i];
  948.       rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
  949.         match_isgroup);
  950.       for (i = 1; i <= c; i++)
  951.         md->offset_vector[md->offset_end - i] = save[i];
  952.       if (save != stacksave) (pcre_free)(save);
  953.       if (!rc) return FALSE;
  954.       /* In case the recursion has set more capturing values, save the final
  955.       number, then move along the subject till after the recursive match,
  956.       and advance one byte in the pattern code. */
  957.       offset_top = md->end_offset_top;
  958.       eptr = md->end_match_ptr;
  959.       ecode++;
  960.       }
  961.     break;
  962.     /* "Once" brackets are like assertion brackets except that after a match,
  963.     the point in the subject string is not moved back. Thus there can never be
  964.     a move back into the brackets. Check the alternative branches in turn - the
  965.     matching won't pass the KET for this kind of subpattern. If any one branch
  966.     matches, we carry on as at the end of a normal bracket, leaving the subject
  967.     pointer. */
  968.     case OP_ONCE:
  969.       {
  970.       const uschar *prev = ecode;
  971.       const uschar *saved_eptr = eptr;
  972.       do
  973.         {
  974.         if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
  975.           break;
  976.         ecode += (ecode[1] << 8) + ecode[2];
  977.         }
  978.       while (*ecode == OP_ALT);
  979.       /* If hit the end of the group (which could be repeated), fail */
  980.       if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
  981.       /* Continue as from after the assertion, updating the offsets high water
  982.       mark, since extracts may have been taken. */
  983.       do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  984.       offset_top = md->end_offset_top;
  985.       eptr = md->end_match_ptr;
  986.       /* For a non-repeating ket, just continue at this level. This also
  987.       happens for a repeating ket if no characters were matched in the group.
  988.       This is the forcible breaking of infinite loops as implemented in Perl
  989.       5.005. If there is an options reset, it will get obeyed in the normal
  990.       course of events. */
  991.       if (*ecode == OP_KET || eptr == saved_eptr)
  992.         {
  993.         ecode += 3;
  994.         break;
  995.         }
  996.       /* The repeating kets try the rest of the pattern or restart from the
  997.       preceding bracket, in the appropriate order. We need to reset any options
  998.       that changed within the bracket before re-running it, so check the next
  999.       opcode. */
  1000.       if (ecode[3] == OP_OPT)
  1001.         {
  1002.         ims = (ims & ~PCRE_IMS) | ecode[4];
  1003.         DPRINTF(("ims set to %02lx at group repeatn", ims));
  1004.         }
  1005.       if (*ecode == OP_KETRMIN)
  1006.         {
  1007.         if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  1008.             match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  1009.               return TRUE;
  1010.         }
  1011.       else  /* OP_KETRMAX */
  1012.         {
  1013.         if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  1014.             match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  1015.         }
  1016.       }
  1017.     return FALSE;
  1018.     /* An alternation is the end of a branch; scan along to find the end of the
  1019.     bracketed group and go to there. */
  1020.     case OP_ALT:
  1021.     do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
  1022.     break;
  1023.     /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
  1024.     that it may occur zero times. It may repeat infinitely, or not at all -
  1025.     i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
  1026.     repeat limits are compiled as a number of copies, with the optional ones
  1027.     preceded by BRAZERO or BRAMINZERO. */
  1028.     case OP_BRAZERO:
  1029.       {
  1030.       const uschar *next = ecode+1;
  1031.       if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
  1032.         return TRUE;
  1033.       do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  1034.       ecode = next + 3;
  1035.       }
  1036.     break;
  1037.     case OP_BRAMINZERO:
  1038.       {
  1039.       const uschar *next = ecode+1;
  1040.       do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
  1041.       if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
  1042.         return TRUE;
  1043.       ecode++;
  1044.       }
  1045.     break;
  1046.     /* End of a group, repeated or non-repeating. If we are at the end of
  1047.     an assertion "group", stop matching and return TRUE, but record the
  1048.     current high water mark for use by positive assertions. Do this also
  1049.     for the "once" (not-backup up) groups. */
  1050.     case OP_KET:
  1051.     case OP_KETRMIN:
  1052.     case OP_KETRMAX:
  1053.       {
  1054.       const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
  1055.       const uschar *saved_eptr = eptrb->saved_eptr;
  1056.       eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
  1057.       if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
  1058.           *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
  1059.           *prev == OP_ONCE)
  1060.         {
  1061.         md->end_match_ptr = eptr;      /* For ONCE */
  1062.         md->end_offset_top = offset_top;
  1063.         return TRUE;
  1064.         }
  1065.       /* In all other cases except a conditional group we have to check the
  1066.       group number back at the start and if necessary complete handling an
  1067.       extraction by setting the offsets and bumping the high water mark. */
  1068.       if (*prev != OP_COND)
  1069.         {
  1070.         int offset;
  1071.         int number = *prev - OP_BRA;
  1072.         /* For extended extraction brackets (large number), we have to fish out
  1073.         the number from a dummy opcode at the start. */
  1074.         if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
  1075.         offset = number << 1;
  1076. #ifdef DEBUG
  1077.         printf("end bracket %d", number);
  1078.         printf("n");
  1079. #endif
  1080.         if (number > 0)
  1081.           {
  1082.           if (offset >= md->offset_max) md->offset_overflow = TRUE; else
  1083.             {
  1084.             md->offset_vector[offset] =
  1085.               md->offset_vector[md->offset_end - number];
  1086.             md->offset_vector[offset+1] = eptr - md->start_subject;
  1087.             if (offset_top <= offset) offset_top = offset + 2;
  1088.             }
  1089.           }
  1090.         }
  1091.       /* Reset the value of the ims flags, in case they got changed during
  1092.       the group. */
  1093.       ims = original_ims;
  1094.       DPRINTF(("ims reset to %02lxn", ims));
  1095.       /* For a non-repeating ket, just continue at this level. This also
  1096.       happens for a repeating ket if no characters were matched in the group.
  1097.       This is the forcible breaking of infinite loops as implemented in Perl
  1098.       5.005. If there is an options reset, it will get obeyed in the normal
  1099.       course of events. */
  1100.       if (*ecode == OP_KET || eptr == saved_eptr)
  1101.         {
  1102.         ecode += 3;
  1103.         break;
  1104.         }
  1105.       /* The repeating kets try the rest of the pattern or restart from the
  1106.       preceding bracket, in the appropriate order. */
  1107.       if (*ecode == OP_KETRMIN)
  1108.         {
  1109.         if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
  1110.             match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
  1111.               return TRUE;
  1112.         }
  1113.       else  /* OP_KETRMAX */
  1114.         {
  1115.         if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
  1116.             match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
  1117.         }
  1118.       }
  1119.     return FALSE;
  1120.     /* Start of subject unless notbol, or after internal newline if multiline */
  1121.     case OP_CIRC:
  1122.     if (md->notbol && eptr == md->start_subject) return FALSE;
  1123.     if ((ims & PCRE_MULTILINE) != 0)
  1124.       {
  1125.       if (eptr != md->start_subject && eptr[-1] != NEWLINE) return FALSE;
  1126.       ecode++;
  1127.       break;
  1128.       }
  1129.     /* ... else fall through */
  1130.     /* Start of subject assertion */
  1131.     case OP_SOD:
  1132.     if (eptr != md->start_subject) return FALSE;
  1133.     ecode++;
  1134.     break;
  1135.     /* Assert before internal newline if multiline, or before a terminating
  1136.     newline unless endonly is set, else end of subject unless noteol is set. */
  1137.     case OP_DOLL:
  1138.     if ((ims & PCRE_MULTILINE) != 0)
  1139.       {
  1140.       if (eptr < md->end_subject) { if (*eptr != NEWLINE) return FALSE; }
  1141.         else { if (md->noteol) return FALSE; }
  1142.       ecode++;
  1143.       break;
  1144.       }
  1145.     else
  1146.       {
  1147.       if (md->noteol) return FALSE;
  1148.       if (!md->endonly)
  1149.         {
  1150.         if (eptr < md->end_subject - 1 ||
  1151.            (eptr == md->end_subject - 1 && *eptr != NEWLINE)) return FALSE;
  1152.         ecode++;
  1153.         break;
  1154.         }
  1155.       }
  1156.     /* ... else fall through */
  1157.     /* End of subject assertion (z) */
  1158.     case OP_EOD:
  1159.     if (eptr < md->end_subject) return FALSE;
  1160.     ecode++;
  1161.     break;
  1162.     /* End of subject or ending n assertion (Z) */
  1163.     case OP_EODN:
  1164.     if (eptr < md->end_subject - 1 ||
  1165.        (eptr == md->end_subject - 1 && *eptr != NEWLINE)) return FALSE;
  1166.     ecode++;
  1167.     break;
  1168.     /* Word boundary assertions */
  1169.     case OP_NOT_WORD_BOUNDARY:
  1170.     case OP_WORD_BOUNDARY:
  1171.       {
  1172.       BOOL prev_is_word = (eptr != md->start_subject) &&
  1173.         ((md->ctypes[eptr[-1]] & ctype_word) != 0);
  1174.       BOOL cur_is_word = (eptr < md->end_subject) &&
  1175.         ((md->ctypes[*eptr] & ctype_word) != 0);
  1176.       if ((*ecode++ == OP_WORD_BOUNDARY)?
  1177.            cur_is_word == prev_is_word : cur_is_word != prev_is_word)
  1178.         return FALSE;
  1179.       }
  1180.     break;
  1181.     /* Match a single character type; inline for speed */
  1182.     case OP_ANY:
  1183.     if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
  1184.       return FALSE;
  1185.     if (eptr++ >= md->end_subject) return FALSE;
  1186. #ifdef SUPPORT_UTF8
  1187.     if (md->utf8)
  1188.       while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  1189. #endif
  1190.     ecode++;
  1191.     break;
  1192.     case OP_NOT_DIGIT:
  1193.     if (eptr >= md->end_subject ||
  1194.        (md->ctypes[*eptr++] & ctype_digit) != 0)
  1195.       return FALSE;
  1196.     ecode++;
  1197.     break;
  1198.     case OP_DIGIT:
  1199.     if (eptr >= md->end_subject ||
  1200.        (md->ctypes[*eptr++] & ctype_digit) == 0)
  1201.       return FALSE;
  1202.     ecode++;
  1203.     break;
  1204.     case OP_NOT_WHITESPACE:
  1205.     if (eptr >= md->end_subject ||
  1206.        (md->ctypes[*eptr++] & ctype_space) != 0)
  1207.       return FALSE;
  1208.     ecode++;
  1209.     break;
  1210.     case OP_WHITESPACE:
  1211.     if (eptr >= md->end_subject ||
  1212.        (md->ctypes[*eptr++] & ctype_space) == 0)
  1213.       return FALSE;
  1214.     ecode++;
  1215.     break;
  1216.     case OP_NOT_WORDCHAR:
  1217.     if (eptr >= md->end_subject ||
  1218.        (md->ctypes[*eptr++] & ctype_word) != 0)
  1219.       return FALSE;
  1220.     ecode++;
  1221.     break;
  1222.     case OP_WORDCHAR:
  1223.     if (eptr >= md->end_subject ||
  1224.        (md->ctypes[*eptr++] & ctype_word) == 0)
  1225.       return FALSE;
  1226.     ecode++;
  1227.     break;
  1228.     /* Match a back reference, possibly repeatedly. Look past the end of the
  1229.     item to see if there is repeat information following. The code is similar
  1230.     to that for character classes, but repeated for efficiency. Then obey
  1231.     similar code to character type repeats - written out again for speed.
  1232.     However, if the referenced string is the empty string, always treat
  1233.     it as matched, any number of times (otherwise there could be infinite
  1234.     loops). */
  1235.     case OP_REF:
  1236.       {
  1237.       int length;
  1238.       int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
  1239.       ecode += 3;                                     /* Advance past item */
  1240.       /* If the reference is unset, set the length to be longer than the amount
  1241.       of subject left; this ensures that every attempt at a match fails. We
  1242.       can't just fail here, because of the possibility of quantifiers with zero
  1243.       minima. */
  1244.       length = (offset >= offset_top || md->offset_vector[offset] < 0)?
  1245.         md->end_subject - eptr + 1 :
  1246.         md->offset_vector[offset+1] - md->offset_vector[offset];
  1247.       /* Set up for repetition, or handle the non-repeated case */
  1248.       switch (*ecode)
  1249.         {
  1250.         case OP_CRSTAR:
  1251.         case OP_CRMINSTAR:
  1252.         case OP_CRPLUS:
  1253.         case OP_CRMINPLUS:
  1254.         case OP_CRQUERY:
  1255.         case OP_CRMINQUERY:
  1256.         c = *ecode++ - OP_CRSTAR;
  1257.         minimize = (c & 1) != 0;
  1258.         min = rep_min[c];                 /* Pick up values from tables; */
  1259.         max = rep_max[c];                 /* zero for max => infinity */
  1260.         if (max == 0) max = INT_MAX;
  1261.         break;
  1262.         case OP_CRRANGE:
  1263.         case OP_CRMINRANGE:
  1264.         minimize = (*ecode == OP_CRMINRANGE);
  1265.         min = (ecode[1] << 8) + ecode[2];
  1266.         max = (ecode[3] << 8) + ecode[4];
  1267.         if (max == 0) max = INT_MAX;
  1268.         ecode += 5;
  1269.         break;
  1270.         default:               /* No repeat follows */
  1271.         if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  1272.         eptr += length;
  1273.         continue;              /* With the main loop */
  1274.         }
  1275.       /* If the length of the reference is zero, just continue with the
  1276.       main loop. */
  1277.       if (length == 0) continue;
  1278.       /* First, ensure the minimum number of matches are present. We get back
  1279.       the length of the reference string explicitly rather than passing the
  1280.       address of eptr, so that eptr can be a register variable. */
  1281.       for (i = 1; i <= min; i++)
  1282.         {
  1283.         if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
  1284.         eptr += length;
  1285.         }
  1286.       /* If min = max, continue at the same level without recursion.
  1287.       They are not both allowed to be zero. */
  1288.       if (min == max) continue;
  1289.       /* If minimizing, keep trying and advancing the pointer */
  1290.       if (minimize)
  1291.         {
  1292.         for (i = min;; i++)
  1293.           {
  1294.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1295.             return TRUE;
  1296.           if (i >= max || !match_ref(offset, eptr, length, md, ims))
  1297.             return FALSE;
  1298.           eptr += length;
  1299.           }
  1300.         /* Control never gets here */
  1301.         }
  1302.       /* If maximizing, find the longest string and work backwards */
  1303.       else
  1304.         {
  1305.         const uschar *pp = eptr;
  1306.         for (i = min; i < max; i++)
  1307.           {
  1308.           if (!match_ref(offset, eptr, length, md, ims)) break;
  1309.           eptr += length;
  1310.           }
  1311.         while (eptr >= pp)
  1312.           {
  1313.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1314.             return TRUE;
  1315.           eptr -= length;
  1316.           }
  1317.         return FALSE;
  1318.         }
  1319.       }
  1320.     /* Control never gets here */
  1321.     /* Match a character class, possibly repeatedly. Look past the end of the
  1322.     item to see if there is repeat information following. Then obey similar
  1323.     code to character type repeats - written out again for speed. */
  1324.     case OP_CLASS:
  1325.       {
  1326.       const uschar *data = ecode + 1;  /* Save for matching */
  1327.       ecode += 33;                     /* Advance past the item */
  1328.       switch (*ecode)
  1329.         {
  1330.         case OP_CRSTAR:
  1331.         case OP_CRMINSTAR:
  1332.         case OP_CRPLUS:
  1333.         case OP_CRMINPLUS:
  1334.         case OP_CRQUERY:
  1335.         case OP_CRMINQUERY:
  1336.         c = *ecode++ - OP_CRSTAR;
  1337.         minimize = (c & 1) != 0;
  1338.         min = rep_min[c];                 /* Pick up values from tables; */
  1339.         max = rep_max[c];                 /* zero for max => infinity */
  1340.         if (max == 0) max = INT_MAX;
  1341.         break;
  1342.         case OP_CRRANGE:
  1343.         case OP_CRMINRANGE:
  1344.         minimize = (*ecode == OP_CRMINRANGE);
  1345.         min = (ecode[1] << 8) + ecode[2];
  1346.         max = (ecode[3] << 8) + ecode[4];
  1347.         if (max == 0) max = INT_MAX;
  1348.         ecode += 5;
  1349.         break;
  1350.         default:               /* No repeat follows */
  1351.         min = max = 1;
  1352.         break;
  1353.         }
  1354.       /* First, ensure the minimum number of matches are present. */
  1355.       for (i = 1; i <= min; i++)
  1356.         {
  1357.         if (eptr >= md->end_subject) return FALSE;
  1358.         GETCHARINC(c, eptr)         /* Get character; increment eptr */
  1359. #ifdef SUPPORT_UTF8
  1360.         /* We do not yet support class members > 255 */
  1361.         if (c > 255) return FALSE;
  1362. #endif
  1363.         if ((data[c/8] & (1 << (c&7))) != 0) continue;
  1364.         return FALSE;
  1365.         }
  1366.       /* If max == min we can continue with the main loop without the
  1367.       need to recurse. */
  1368.       if (min == max) continue;
  1369.       /* If minimizing, keep testing the rest of the expression and advancing
  1370.       the pointer while it matches the class. */
  1371.       if (minimize)
  1372.         {
  1373.         for (i = min;; i++)
  1374.           {
  1375.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1376.             return TRUE;
  1377.           if (i >= max || eptr >= md->end_subject) return FALSE;
  1378.           GETCHARINC(c, eptr)       /* Get character; increment eptr */
  1379. #ifdef SUPPORT_UTF8
  1380.           /* We do not yet support class members > 255 */
  1381.           if (c > 255) return FALSE;
  1382. #endif
  1383.           if ((data[c/8] & (1 << (c&7))) != 0) continue;
  1384.           return FALSE;
  1385.           }
  1386.         /* Control never gets here */
  1387.         }
  1388.       /* If maximizing, find the longest possible run, then work backwards. */
  1389.       else
  1390.         {
  1391.         const uschar *pp = eptr;
  1392.         int len = 1;
  1393.         for (i = min; i < max; i++)
  1394.           {
  1395.           if (eptr >= md->end_subject) break;
  1396.           GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */
  1397. #ifdef SUPPORT_UTF8
  1398.           /* We do not yet support class members > 255 */
  1399.           if (c > 255) break;
  1400. #endif
  1401.           if ((data[c/8] & (1 << (c&7))) == 0) break;
  1402.           eptr += len;
  1403.           }
  1404.         while (eptr >= pp)
  1405.           {
  1406.           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1407.             return TRUE;
  1408. #ifdef SUPPORT_UTF8
  1409.           BACKCHAR(eptr)
  1410. #endif
  1411.           }
  1412.         return FALSE;
  1413.         }
  1414.       }
  1415.     /* Control never gets here */
  1416.     /* Match a run of characters */
  1417.     case OP_CHARS:
  1418.       {
  1419.       register int length = ecode[1];
  1420.       ecode += 2;
  1421. #ifdef DEBUG    /* Sigh. Some compilers never learn. */
  1422.       if (eptr >= md->end_subject)
  1423.         printf("matching subject <null> against pattern ");
  1424.       else
  1425.         {
  1426.         printf("matching subject ");
  1427.         pchars(eptr, length, TRUE, md);
  1428.         printf(" against pattern ");
  1429.         }
  1430.       pchars(ecode, length, FALSE, md);
  1431.       printf("n");
  1432. #endif
  1433.       if (length > md->end_subject - eptr) return FALSE;
  1434.       if ((ims & PCRE_CASELESS) != 0)
  1435.         {
  1436.         while (length-- > 0)
  1437.           if (md->lcc[*ecode++] != md->lcc[*eptr++])
  1438.             return FALSE;
  1439.         }
  1440.       else
  1441.         {
  1442.         while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
  1443.         }
  1444.       }
  1445.     break;
  1446.     /* Match a single character repeatedly; different opcodes share code. */
  1447.     case OP_EXACT:
  1448.     min = max = (ecode[1] << 8) + ecode[2];
  1449.     ecode += 3;
  1450.     goto REPEATCHAR;
  1451.     case OP_UPTO:
  1452.     case OP_MINUPTO:
  1453.     min = 0;
  1454.     max = (ecode[1] << 8) + ecode[2];
  1455.     minimize = *ecode == OP_MINUPTO;
  1456.     ecode += 3;
  1457.     goto REPEATCHAR;
  1458.     case OP_STAR:
  1459.     case OP_MINSTAR:
  1460.     case OP_PLUS:
  1461.     case OP_MINPLUS:
  1462.     case OP_QUERY:
  1463.     case OP_MINQUERY:
  1464.     c = *ecode++ - OP_STAR;
  1465.     minimize = (c & 1) != 0;
  1466.     min = rep_min[c];                 /* Pick up values from tables; */
  1467.     max = rep_max[c];                 /* zero for max => infinity */
  1468.     if (max == 0) max = INT_MAX;
  1469.     /* Common code for all repeated single-character matches. We can give
  1470.     up quickly if there are fewer than the minimum number of characters left in
  1471.     the subject. */
  1472.     REPEATCHAR:
  1473.     if (min > md->end_subject - eptr) return FALSE;
  1474.     c = *ecode++;
  1475.     /* The code is duplicated for the caseless and caseful cases, for speed,
  1476.     since matching characters is likely to be quite common. First, ensure the
  1477.     minimum number of matches are present. If min = max, continue at the same
  1478.     level without recursing. Otherwise, if minimizing, keep trying the rest of
  1479.     the expression and advancing one matching character if failing, up to the
  1480.     maximum. Alternatively, if maximizing, find the maximum number of
  1481.     characters and work backwards. */
  1482.     DPRINTF(("matching %c{%d,%d} against subject %.*sn", c, min, max,
  1483.       max, eptr));
  1484.     if ((ims & PCRE_CASELESS) != 0)
  1485.       {
  1486.       c = md->lcc[c];
  1487.       for (i = 1; i <= min; i++)
  1488.         if (c != md->lcc[*eptr++]) return FALSE;
  1489.       if (min == max) continue;
  1490.       if (minimize)
  1491.         {
  1492.         for (i = min;; i++)
  1493.           {
  1494.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1495.             return TRUE;
  1496.           if (i >= max || eptr >= md->end_subject ||
  1497.               c != md->lcc[*eptr++])
  1498.             return FALSE;
  1499.           }
  1500.         /* Control never gets here */
  1501.         }
  1502.       else
  1503.         {
  1504.         const uschar *pp = eptr;
  1505.         for (i = min; i < max; i++)
  1506.           {
  1507.           if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
  1508.           eptr++;
  1509.           }
  1510.         while (eptr >= pp)
  1511.           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1512.             return TRUE;
  1513.         return FALSE;
  1514.         }
  1515.       /* Control never gets here */
  1516.       }
  1517.     /* Caseful comparisons */
  1518.     else
  1519.       {
  1520.       for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
  1521.       if (min == max) continue;
  1522.       if (minimize)
  1523.         {
  1524.         for (i = min;; i++)
  1525.           {
  1526.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1527.             return TRUE;
  1528.           if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
  1529.           }
  1530.         /* Control never gets here */
  1531.         }
  1532.       else
  1533.         {
  1534.         const uschar *pp = eptr;
  1535.         for (i = min; i < max; i++)
  1536.           {
  1537.           if (eptr >= md->end_subject || c != *eptr) break;
  1538.           eptr++;
  1539.           }
  1540.         while (eptr >= pp)
  1541.          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1542.            return TRUE;
  1543.         return FALSE;
  1544.         }
  1545.       }
  1546.     /* Control never gets here */
  1547.     /* Match a negated single character */
  1548.     case OP_NOT:
  1549.     if (eptr >= md->end_subject) return FALSE;
  1550.     ecode++;
  1551.     if ((ims & PCRE_CASELESS) != 0)
  1552.       {
  1553.       if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
  1554.       }
  1555.     else
  1556.       {
  1557.       if (*ecode++ == *eptr++) return FALSE;
  1558.       }
  1559.     break;
  1560.     /* Match a negated single character repeatedly. This is almost a repeat of
  1561.     the code for a repeated single character, but I haven't found a nice way of
  1562.     commoning these up that doesn't require a test of the positive/negative
  1563.     option for each character match. Maybe that wouldn't add very much to the
  1564.     time taken, but character matching *is* what this is all about... */
  1565.     case OP_NOTEXACT:
  1566.     min = max = (ecode[1] << 8) + ecode[2];
  1567.     ecode += 3;
  1568.     goto REPEATNOTCHAR;
  1569.     case OP_NOTUPTO:
  1570.     case OP_NOTMINUPTO:
  1571.     min = 0;
  1572.     max = (ecode[1] << 8) + ecode[2];
  1573.     minimize = *ecode == OP_NOTMINUPTO;
  1574.     ecode += 3;
  1575.     goto REPEATNOTCHAR;
  1576.     case OP_NOTSTAR:
  1577.     case OP_NOTMINSTAR:
  1578.     case OP_NOTPLUS:
  1579.     case OP_NOTMINPLUS:
  1580.     case OP_NOTQUERY:
  1581.     case OP_NOTMINQUERY:
  1582.     c = *ecode++ - OP_NOTSTAR;
  1583.     minimize = (c & 1) != 0;
  1584.     min = rep_min[c];                 /* Pick up values from tables; */
  1585.     max = rep_max[c];                 /* zero for max => infinity */
  1586.     if (max == 0) max = INT_MAX;
  1587.     /* Common code for all repeated single-character matches. We can give
  1588.     up quickly if there are fewer than the minimum number of characters left in
  1589.     the subject. */
  1590.     REPEATNOTCHAR:
  1591.     if (min > md->end_subject - eptr) return FALSE;
  1592.     c = *ecode++;
  1593.     /* The code is duplicated for the caseless and caseful cases, for speed,
  1594.     since matching characters is likely to be quite common. First, ensure the
  1595.     minimum number of matches are present. If min = max, continue at the same
  1596.     level without recursing. Otherwise, if minimizing, keep trying the rest of
  1597.     the expression and advancing one matching character if failing, up to the
  1598.     maximum. Alternatively, if maximizing, find the maximum number of
  1599.     characters and work backwards. */
  1600.     DPRINTF(("negative matching %c{%d,%d} against subject %.*sn", c, min, max,
  1601.       max, eptr));
  1602.     if ((ims & PCRE_CASELESS) != 0)
  1603.       {
  1604.       c = md->lcc[c];
  1605.       for (i = 1; i <= min; i++)
  1606.         if (c == md->lcc[*eptr++]) return FALSE;
  1607.       if (min == max) continue;
  1608.       if (minimize)
  1609.         {
  1610.         for (i = min;; i++)
  1611.           {
  1612.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1613.             return TRUE;
  1614.           if (i >= max || eptr >= md->end_subject ||
  1615.               c == md->lcc[*eptr++])
  1616.             return FALSE;
  1617.           }
  1618.         /* Control never gets here */
  1619.         }
  1620.       else
  1621.         {
  1622.         const uschar *pp = eptr;
  1623.         for (i = min; i < max; i++)
  1624.           {
  1625.           if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
  1626.           eptr++;
  1627.           }
  1628.         while (eptr >= pp)
  1629.           if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1630.             return TRUE;
  1631.         return FALSE;
  1632.         }
  1633.       /* Control never gets here */
  1634.       }
  1635.     /* Caseful comparisons */
  1636.     else
  1637.       {
  1638.       for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
  1639.       if (min == max) continue;
  1640.       if (minimize)
  1641.         {
  1642.         for (i = min;; i++)
  1643.           {
  1644.           if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
  1645.             return TRUE;
  1646.           if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
  1647.           }
  1648.         /* Control never gets here */
  1649.         }
  1650.       else
  1651.         {
  1652.         const uschar *pp = eptr;
  1653.         for (i = min; i < max; i++)
  1654.           {
  1655.           if (eptr >= md->end_subject || c == *eptr) break;
  1656.           eptr++;
  1657.           }
  1658.         while (eptr >= pp)
  1659.          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1660.            return TRUE;
  1661.         return FALSE;
  1662.         }
  1663.       }
  1664.     /* Control never gets here */
  1665.     /* Match a single character type repeatedly; several different opcodes
  1666.     share code. This is very similar to the code for single characters, but we
  1667.     repeat it in the interests of efficiency. */
  1668.     case OP_TYPEEXACT:
  1669.     min = max = (ecode[1] << 8) + ecode[2];
  1670.     minimize = TRUE;
  1671.     ecode += 3;
  1672.     goto REPEATTYPE;
  1673.     case OP_TYPEUPTO:
  1674.     case OP_TYPEMINUPTO:
  1675.     min = 0;
  1676.     max = (ecode[1] << 8) + ecode[2];
  1677.     minimize = *ecode == OP_TYPEMINUPTO;
  1678.     ecode += 3;
  1679.     goto REPEATTYPE;
  1680.     case OP_TYPESTAR:
  1681.     case OP_TYPEMINSTAR:
  1682.     case OP_TYPEPLUS:
  1683.     case OP_TYPEMINPLUS:
  1684.     case OP_TYPEQUERY:
  1685.     case OP_TYPEMINQUERY:
  1686.     c = *ecode++ - OP_TYPESTAR;
  1687.     minimize = (c & 1) != 0;
  1688.     min = rep_min[c];                 /* Pick up values from tables; */
  1689.     max = rep_max[c];                 /* zero for max => infinity */
  1690.     if (max == 0) max = INT_MAX;
  1691.     /* Common code for all repeated single character type matches */
  1692.     REPEATTYPE:
  1693.     ctype = *ecode++;      /* Code for the character type */
  1694.     /* First, ensure the minimum number of matches are present. Use inline
  1695.     code for maximizing the speed, and do the type test once at the start
  1696.     (i.e. keep it out of the loop). Also we can test that there are at least
  1697.     the minimum number of bytes before we start, except when doing '.' in
  1698.     UTF8 mode. Leave the test in in all cases; in the special case we have
  1699.     to test after each character. */
  1700.     if (min > md->end_subject - eptr) return FALSE;
  1701.     if (min > 0) switch(ctype)
  1702.       {
  1703.       case OP_ANY:
  1704. #ifdef SUPPORT_UTF8
  1705.       if (md->utf8)
  1706.         {
  1707.         for (i = 1; i <= min; i++)
  1708.           {
  1709.           if (eptr >= md->end_subject ||
  1710.              (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
  1711.             return FALSE;
  1712.           while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  1713.           }
  1714.         break;
  1715.         }
  1716. #endif
  1717.       /* Non-UTF8 can be faster */
  1718.       if ((ims & PCRE_DOTALL) == 0)
  1719.         { for (i = 1; i <= min; i++) if (*eptr++ == NEWLINE) return FALSE; }
  1720.       else eptr += min;
  1721.       break;
  1722.       case OP_NOT_DIGIT:
  1723.       for (i = 1; i <= min; i++)
  1724.         if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
  1725.       break;
  1726.       case OP_DIGIT:
  1727.       for (i = 1; i <= min; i++)
  1728.         if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
  1729.       break;
  1730.       case OP_NOT_WHITESPACE:
  1731.       for (i = 1; i <= min; i++)
  1732.         if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
  1733.       break;
  1734.       case OP_WHITESPACE:
  1735.       for (i = 1; i <= min; i++)
  1736.         if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
  1737.       break;
  1738.       case OP_NOT_WORDCHAR:
  1739.       for (i = 1; i <= min; i++)
  1740.         if ((md->ctypes[*eptr++] & ctype_word) != 0)
  1741.           return FALSE;
  1742.       break;
  1743.       case OP_WORDCHAR:
  1744.       for (i = 1; i <= min; i++)
  1745.         if ((md->ctypes[*eptr++] & ctype_word) == 0)
  1746.           return FALSE;
  1747.       break;
  1748.       }
  1749.     /* If min = max, continue at the same level without recursing */
  1750.     if (min == max) continue;
  1751.     /* If minimizing, we have to test the rest of the pattern before each
  1752.     subsequent match. */
  1753.     if (minimize)
  1754.       {
  1755.       for (i = min;; i++)
  1756.         {
  1757.         if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
  1758.         if (i >= max || eptr >= md->end_subject) return FALSE;
  1759.         c = *eptr++;
  1760.         switch(ctype)
  1761.           {
  1762.           case OP_ANY:
  1763.           if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) return FALSE;
  1764. #ifdef SUPPORT_UTF8
  1765.           if (md->utf8)
  1766.             while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  1767. #endif
  1768.           break;
  1769.           case OP_NOT_DIGIT:
  1770.           if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
  1771.           break;
  1772.           case OP_DIGIT:
  1773.           if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
  1774.           break;
  1775.           case OP_NOT_WHITESPACE:
  1776.           if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
  1777.           break;
  1778.           case OP_WHITESPACE:
  1779.           if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
  1780.           break;
  1781.           case OP_NOT_WORDCHAR:
  1782.           if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
  1783.           break;
  1784.           case OP_WORDCHAR:
  1785.           if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
  1786.           break;
  1787.           }
  1788.         }
  1789.       /* Control never gets here */
  1790.       }
  1791.     /* If maximizing it is worth using inline code for speed, doing the type
  1792.     test once at the start (i.e. keep it out of the loop). */
  1793.     else
  1794.       {
  1795.       const uschar *pp = eptr;
  1796.       switch(ctype)
  1797.         {
  1798.         case OP_ANY:
  1799.         /* Special code is required for UTF8, but when the maximum is unlimited
  1800.         we don't need it. */
  1801. #ifdef SUPPORT_UTF8
  1802.         if (md->utf8 && max < INT_MAX)
  1803.           {
  1804.           if ((ims & PCRE_DOTALL) == 0)
  1805.             {
  1806.             for (i = min; i < max; i++)
  1807.               {
  1808.               if (eptr >= md->end_subject || *eptr++ == NEWLINE) break;
  1809.               while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  1810.               }
  1811.             }
  1812.           else
  1813.             {
  1814.             for (i = min; i < max; i++)
  1815.               {
  1816.               eptr++;
  1817.               while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
  1818.               }
  1819.             }
  1820.           break;
  1821.           }
  1822. #endif
  1823.         /* Non-UTF8 can be faster */
  1824.         if ((ims & PCRE_DOTALL) == 0)
  1825.           {
  1826.           for (i = min; i < max; i++)
  1827.             {
  1828.             if (eptr >= md->end_subject || *eptr == NEWLINE) break;
  1829.             eptr++;
  1830.             }
  1831.           }
  1832.         else
  1833.           {
  1834.           c = max - min;
  1835.           if (c > md->end_subject - eptr) c = md->end_subject - eptr;
  1836.           eptr += c;
  1837.           }
  1838.         break;
  1839.         case OP_NOT_DIGIT:
  1840.         for (i = min; i < max; i++)
  1841.           {
  1842.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
  1843.             break;
  1844.           eptr++;
  1845.           }
  1846.         break;
  1847.         case OP_DIGIT:
  1848.         for (i = min; i < max; i++)
  1849.           {
  1850.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
  1851.             break;
  1852.           eptr++;
  1853.           }
  1854.         break;
  1855.         case OP_NOT_WHITESPACE:
  1856.         for (i = min; i < max; i++)
  1857.           {
  1858.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
  1859.             break;
  1860.           eptr++;
  1861.           }
  1862.         break;
  1863.         case OP_WHITESPACE:
  1864.         for (i = min; i < max; i++)
  1865.           {
  1866.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
  1867.             break;
  1868.           eptr++;
  1869.           }
  1870.         break;
  1871.         case OP_NOT_WORDCHAR:
  1872.         for (i = min; i < max; i++)
  1873.           {
  1874.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
  1875.             break;
  1876.           eptr++;
  1877.           }
  1878.         break;
  1879.         case OP_WORDCHAR:
  1880.         for (i = min; i < max; i++)
  1881.           {
  1882.           if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
  1883.             break;
  1884.           eptr++;
  1885.           }
  1886.         break;
  1887.         }
  1888.       while (eptr >= pp)
  1889.         {
  1890.         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
  1891.           return TRUE;
  1892. #ifdef SUPPORT_UTF8
  1893.         if (md->utf8)
  1894.           while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
  1895. #endif
  1896.         }
  1897.       return FALSE;
  1898.       }
  1899.     /* Control never gets here */
  1900.     /* There's been some horrible disaster. */
  1901.     default:
  1902.     DPRINTF(("Unknown opcode %dn", *ecode));
  1903.     md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
  1904.     return FALSE;
  1905.     }
  1906.   /* Do not stick any code in here without much thought; it is assumed
  1907.   that "continue" in the code above comes out to here to repeat the main
  1908.   loop. */
  1909.   }             /* End of main loop */
  1910. /* Control never reaches here */
  1911. }
  1912. /*************************************************
  1913. *         Execute a Regular Expression           *
  1914. *************************************************/
  1915. /* This function applies a compiled re to a subject string and picks out
  1916. portions of the string if it matches. Two elements in the vector are set for
  1917. each substring: the offsets to the start and end of the substring.
  1918. Arguments:
  1919.   external_re     points to the compiled expression
  1920.   external_extra  points to "hints" from pcre_study() or is NULL
  1921.   subject         points to the subject string
  1922.   length          length of subject string (may contain binary zeros)
  1923.   start_offset    where to start in the subject string
  1924.   options         option bits
  1925.   offsets         points to a vector of ints to be filled in with offsets
  1926.   offsetcount     the number of elements in the vector
  1927. Returns:          > 0 => success; value is the number of elements filled in
  1928.                   = 0 => success, but offsets is not big enough
  1929.                    -1 => failed to match
  1930.                  < -1 => some kind of unexpected problem
  1931. */
  1932. int
  1933. pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
  1934.   const char *subject, int length, int start_offset, int options, int *offsets,
  1935.   int offsetcount)
  1936. {
  1937. int resetcount, ocount;
  1938. int first_char = -1;
  1939. int req_char = -1;
  1940. int req_char2 = -1;
  1941. unsigned long int ims = 0;
  1942. match_data match_block;
  1943. const uschar *start_bits = NULL;
  1944. const uschar *start_match = (const uschar *)subject + start_offset;
  1945. const uschar *end_subject;
  1946. const uschar *req_char_ptr = start_match - 1;
  1947. const real_pcre *re = (const real_pcre *)external_re;
  1948. const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
  1949. BOOL using_temporary_offsets = FALSE;
  1950. BOOL anchored;
  1951. BOOL startline;
  1952. if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
  1953. if (re == NULL || subject == NULL ||
  1954.    (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
  1955. if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
  1956. anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
  1957. startline = (re->options & PCRE_STARTLINE) != 0;
  1958. match_block.start_pattern = re->code;
  1959. match_block.start_subject = (const uschar *)subject;
  1960. match_block.end_subject = match_block.start_subject + length;
  1961. end_subject = match_block.end_subject;
  1962. match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
  1963. match_block.utf8 = (re->options & PCRE_UTF8) != 0;
  1964. match_block.notbol = (options & PCRE_NOTBOL) != 0;
  1965. match_block.noteol = (options & PCRE_NOTEOL) != 0;
  1966. match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
  1967. match_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */
  1968. match_block.lcc = re->tables + lcc_offset;
  1969. match_block.ctypes = re->tables + ctypes_offset;
  1970. /* The ims options can vary during the matching as a result of the presence
  1971. of (?ims) items in the pattern. They are kept in a local variable so that
  1972. restoring at the exit of a group is easy. */
  1973. ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
  1974. /* If the expression has got more back references than the offsets supplied can
  1975. hold, we get a temporary bit of working store to use during the matching.
  1976. Otherwise, we can use the vector supplied, rounding down its size to a multiple
  1977. of 3. */
  1978. ocount = offsetcount - (offsetcount % 3);
  1979. if (re->top_backref > 0 && re->top_backref >= ocount/3)
  1980.   {
  1981.   ocount = re->top_backref * 3 + 3;
  1982.   match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
  1983.   if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
  1984.   using_temporary_offsets = TRUE;
  1985.   DPRINTF(("Got memory to hold back referencesn"));
  1986.   }
  1987. else match_block.offset_vector = offsets;
  1988. match_block.offset_end = ocount;
  1989. match_block.offset_max = (2*ocount)/3;
  1990. match_block.offset_overflow = FALSE;
  1991. /* Compute the minimum number of offsets that we need to reset each time. Doing
  1992. this makes a huge difference to execution time when there aren't many brackets
  1993. in the pattern. */
  1994. resetcount = 2 + re->top_bracket * 2;
  1995. if (resetcount > offsetcount) resetcount = ocount;
  1996. /* Reset the working variable associated with each extraction. These should
  1997. never be used unless previously set, but they get saved and restored, and so we
  1998. initialize them to avoid reading uninitialized locations. */
  1999. if (match_block.offset_vector != NULL)
  2000.   {
  2001.   register int *iptr = match_block.offset_vector + ocount;
  2002.   register int *iend = iptr - resetcount/2 + 1;
  2003.   while (--iptr >= iend) *iptr = -1;
  2004.   }
  2005. /* Set up the first character to match, if available. The first_char value is
  2006. never set for an anchored regular expression, but the anchoring may be forced
  2007. at run time, so we have to test for anchoring. The first char may be unset for
  2008. an unanchored pattern, of course. If there's no first char and the pattern was
  2009. studied, there may be a bitmap of possible first characters. */
  2010. if (!anchored)
  2011.   {
  2012.   if ((re->options & PCRE_FIRSTSET) != 0)
  2013.     {
  2014.     first_char = re->first_char;
  2015.     if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
  2016.     }
  2017.   else
  2018.     if (!startline && extra != NULL &&
  2019.       (extra->options & PCRE_STUDY_MAPPED) != 0)
  2020.         start_bits = extra->start_bits;
  2021.   }
  2022. /* For anchored or unanchored matches, there may be a "last known required
  2023. character" set. If the PCRE_CASELESS is set, implying that the match starts
  2024. caselessly, or if there are any changes of this flag within the regex, set up
  2025. both cases of the character. Otherwise set the two values the same, which will
  2026. avoid duplicate testing (which takes significant time). This covers the vast
  2027. majority of cases. It will be suboptimal when the case flag changes in a regex
  2028. and the required character in fact is caseful. */
  2029. if ((re->options & PCRE_REQCHSET) != 0)
  2030.   {
  2031.   req_char = re->req_char;
  2032.   req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
  2033.     (re->tables + fcc_offset)[req_char] : req_char;
  2034.   }
  2035. /* Loop for handling unanchored repeated matching attempts; for anchored regexs
  2036. the loop runs just once. */
  2037. do
  2038.   {
  2039.   int rc;
  2040.   register int *iptr = match_block.offset_vector;
  2041.   register int *iend = iptr + resetcount;
  2042.   /* Reset the maximum number of extractions we might see. */
  2043.   while (iptr < iend) *iptr++ = -1;
  2044.   /* Advance to a unique first char if possible */
  2045.   if (first_char >= 0)
  2046.     {
  2047.     if ((ims & PCRE_CASELESS) != 0)
  2048.       while (start_match < end_subject &&
  2049.              match_block.lcc[*start_match] != first_char)
  2050.         start_match++;
  2051.     else
  2052.       while (start_match < end_subject && *start_match != first_char)
  2053.         start_match++;
  2054.     }
  2055.   /* Or to just after n for a multiline match if possible */
  2056.   else if (startline)
  2057.     {
  2058.     if (start_match > match_block.start_subject + start_offset)
  2059.       {
  2060.       while (start_match < end_subject && start_match[-1] != NEWLINE)
  2061.         start_match++;
  2062.       }
  2063.     }
  2064.   /* Or to a non-unique first char after study */
  2065.   else if (start_bits != NULL)
  2066.     {
  2067.     while (start_match < end_subject)
  2068.       {
  2069.       register int c = *start_match;
  2070.       if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
  2071.       }
  2072.     }
  2073. #ifdef DEBUG  /* Sigh. Some compilers never learn. */
  2074.   printf(">>>> Match against: ");
  2075.   pchars(start_match, end_subject - start_match, TRUE, &match_block);
  2076.   printf("n");
  2077. #endif
  2078.   /* If req_char is set, we know that that character must appear in the subject
  2079.   for the match to succeed. If the first character is set, req_char must be
  2080.   later in the subject; otherwise the test starts at the match point. This
  2081.   optimization can save a huge amount of backtracking in patterns with nested
  2082.   unlimited repeats that aren't going to match. We don't know what the state of
  2083.   case matching may be when this character is hit, so test for it in both its
  2084.   cases if necessary. However, the different cased versions will not be set up
  2085.   unless PCRE_CASELESS was given or the casing state changes within the regex.
  2086.   Writing separate code makes it go faster, as does using an autoincrement and
  2087.   backing off on a match. */
  2088.   if (req_char >= 0)
  2089.     {
  2090.     register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
  2091.     /* We don't need to repeat the search if we haven't yet reached the
  2092.     place we found it at last time. */
  2093.     if (p > req_char_ptr)
  2094.       {
  2095.       /* Do a single test if no case difference is set up */
  2096.       if (req_char == req_char2)
  2097.         {
  2098.         while (p < end_subject)
  2099.           {
  2100.           if (*p++ == req_char) { p--; break; }
  2101.           }
  2102.         }
  2103.       /* Otherwise test for either case */
  2104.       else
  2105.         {
  2106.         while (p < end_subject)
  2107.           {
  2108.           register int pp = *p++;
  2109.           if (pp == req_char || pp == req_char2) { p--; break; }
  2110.           }
  2111.         }
  2112.       /* If we can't find the required character, break the matching loop */
  2113.       if (p >= end_subject) break;
  2114.       /* If we have found the required character, save the point where we
  2115.       found it, so that we don't search again next time round the loop if
  2116.       the start hasn't passed this character yet. */
  2117.       req_char_ptr = p;
  2118.       }
  2119.     }
  2120.   /* When a match occurs, substrings will be set for all internal extractions;
  2121.   we just need to set up the whole thing as substring 0 before returning. If
  2122.   there were too many extractions, set the return code to zero. In the case
  2123.   where we had to get some local store to hold offsets for backreferences, copy
  2124.   those back references that we can. In this case there need not be overflow
  2125.   if certain parts of the pattern were not used. */
  2126.   match_block.start_match = start_match;
  2127.   if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
  2128.     continue;
  2129.   /* Copy the offset information from temporary store if necessary */
  2130.   if (using_temporary_offsets)
  2131.     {
  2132.     if (offsetcount >= 4)
  2133.       {
  2134.       memcpy(offsets + 2, match_block.offset_vector + 2,
  2135.         (offsetcount - 2) * sizeof(int));
  2136.       DPRINTF(("Copied offsets from temporary memoryn"));
  2137.       }
  2138.     if (match_block.end_offset_top > offsetcount)
  2139.       match_block.offset_overflow = TRUE;
  2140.     DPRINTF(("Freeing temporary memoryn"));
  2141.     (pcre_free)(match_block.offset_vector);
  2142.     }
  2143.   rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
  2144.   if (offsetcount < 2) rc = 0; else
  2145.     {
  2146.     offsets[0] = start_match - match_block.start_subject;
  2147.     offsets[1] = match_block.end_match_ptr - match_block.start_subject;
  2148.     }
  2149.   DPRINTF((">>>> returning %dn", rc));
  2150.   return rc;
  2151.   }
  2152. /* This "while" is the end of the "do" above */
  2153. while (!anchored &&
  2154.        match_block.errorcode == PCRE_ERROR_NOMATCH &&
  2155.        start_match++ < end_subject);
  2156. if (using_temporary_offsets)
  2157.   {
  2158.   DPRINTF(("Freeing temporary memoryn"));
  2159.   (pcre_free)(match_block.offset_vector);
  2160.   }
  2161. DPRINTF((">>>> returning %dn", match_block.errorcode));
  2162. return match_block.errorcode;
  2163. }
  2164. /* End of pcre.c */