/[pcre]/code/branches/pcre16/pcre_compile.c
ViewVC logotype

Diff of /code/branches/pcre16/pcre_compile.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 264 by ph10, Tue Nov 13 11:07:16 2007 UTC revision 269 by ph10, Fri Nov 16 16:22:24 2007 UTC
# Line 241  static const char error_texts[] = Line 241  static const char error_texts[] =
241    /* 10 */    /* 10 */
242    "operand of unlimited repeat could match the empty string\0"  /** DEAD **/    "operand of unlimited repeat could match the empty string\0"  /** DEAD **/
243    "internal error: unexpected repeat\0"    "internal error: unexpected repeat\0"
244    "unrecognized character after (?\0"    "unrecognized character after (? or (?-\0"
245    "POSIX named classes are supported only within a class\0"    "POSIX named classes are supported only within a class\0"
246    "missing )\0"    "missing )\0"
247    /* 15 */    /* 15 */
# Line 300  static const char error_texts[] = Line 300  static const char error_texts[] =
300    "(*VERB) with an argument is not supported\0"    "(*VERB) with an argument is not supported\0"
301    /* 60 */    /* 60 */
302    "(*VERB) not recognized\0"    "(*VERB) not recognized\0"
303    "number is too big";    "number is too big\0"
304      "subpattern name expected after (?&\0"
305      "digit expected after (?+";
306    
307    
308  /* Table to identify digits and hex digits. This is used when compiling  /* Table to identify digits and hex digits. This is used when compiling
# Line 2710  for (;; ptr++) Line 2712  for (;; ptr++)
2712          if (*ptr == '^')          if (*ptr == '^')
2713            {            {
2714            local_negate = TRUE;            local_negate = TRUE;
2715              should_flip_negation = TRUE;  /* Note negative special */
2716            ptr++;            ptr++;
2717            }            }
2718    
# Line 4534  we set the flag only if there is a liter Line 4537  we set the flag only if there is a liter
4537    
4538          if (lengthptr != NULL)          if (lengthptr != NULL)
4539            {            {
4540              if (namelen == 0)
4541                {
4542                *errorcodeptr = ERR62;
4543                goto FAILED;
4544                }
4545            if (*ptr != terminator)            if (*ptr != terminator)
4546              {              {
4547              *errorcodeptr = ERR42;              *errorcodeptr = ERR42;
# Line 4547  we set the flag only if there is a liter Line 4555  we set the flag only if there is a liter
4555            recno = 0;            recno = 0;
4556            }            }
4557    
4558          /* In the real compile, seek the name in the table */          /* In the real compile, seek the name in the table. We check the name
4559            first, and then check that we have reached the end of the name in the
4560            table. That way, if the name that is longer than any in the table,
4561            the comparison will fail without reading beyond the table entry. */
4562    
4563          else          else
4564            {            {
4565            slot = cd->name_table;            slot = cd->name_table;
4566            for (i = 0; i < cd->names_found; i++)            for (i = 0; i < cd->names_found; i++)
4567              {              {
4568              if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;              if (strncmp((char *)name, (char *)slot+2, namelen) == 0 &&
4569                    slot[2+namelen] == 0)
4570                  break;
4571              slot += cd->name_entry_size;              slot += cd->name_entry_size;
4572              }              }
4573    
# Line 4591  we set the flag only if there is a liter Line 4604  we set the flag only if there is a liter
4604            {            {
4605            const uschar *called;            const uschar *called;
4606    
4607            if ((refsign = *ptr) == '+') ptr++;            if ((refsign = *ptr) == '+')
4608                {
4609                ptr++;
4610                if ((digitab[*ptr] & ctype_digit) == 0)
4611                  {
4612                  *errorcodeptr = ERR63;
4613                  goto FAILED;
4614                  }
4615                }
4616            else if (refsign == '-')            else if (refsign == '-')
4617              {              {
4618              if ((digitab[ptr[1]] & ctype_digit) == 0)              if ((digitab[ptr[1]] & ctype_digit) == 0)

Legend:
Removed from v.264  
changed lines
  Added in v.269

  ViewVC Help
Powered by ViewVC 1.1.5