/[pcre]/code/trunk/pcre_compile.c
ViewVC logotype

Diff of /code/trunk/pcre_compile.c

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

revision 150 by ph10, Tue Apr 17 08:22:40 2007 UTC revision 166 by ph10, Wed May 9 14:48:28 2007 UTC
# Line 208  static const char *error_texts[] = { Line 208  static const char *error_texts[] = {
208    "malformed number or name after (?(",    "malformed number or name after (?(",
209    "conditional group contains more than two branches",    "conditional group contains more than two branches",
210    "assertion expected after (?(",    "assertion expected after (?(",
211    "(?R or (?digits must be followed by )",    "(?R or (?[+-]digits must be followed by )",
212    /* 30 */    /* 30 */
213    "unknown POSIX class name",    "unknown POSIX class name",
214    "POSIX collating elements are not supported",    "POSIX collating elements are not supported",
# Line 242  static const char *error_texts[] = { Line 242  static const char *error_texts[] = {
242    /* 55 */    /* 55 */
243    "repeating a DEFINE group is not allowed",    "repeating a DEFINE group is not allowed",
244    "inconsistent NEWLINE options",    "inconsistent NEWLINE options",
245    "\\g is not followed by an (optionally braced) non-zero number"    "\\g is not followed by an (optionally braced) non-zero number",
246      "(?+ or (?- must be followed by a non-zero number"
247  };  };
248    
249    
# Line 3999  for (;; ptr++) Line 4000  for (;; ptr++)
4000    
4001    
4002          /* ------------------------------------------------------------ */          /* ------------------------------------------------------------ */
4003            case '-': case '+':
4004          case '0': case '1': case '2': case '3': case '4':   /* Recursion or */          case '0': case '1': case '2': case '3': case '4':   /* Recursion or */
4005          case '5': case '6': case '7': case '8': case '9':   /* subroutine */          case '5': case '6': case '7': case '8': case '9':   /* subroutine */
4006            {            {
4007            const uschar *called;            const uschar *called;
4008              int sign = *ptr;
4009    
4010              if (sign == '+') ptr++;
4011              else if (sign == '-')
4012                {
4013                if ((digitab[ptr[1]] & ctype_digit) == 0)
4014                  goto OTHER_CHAR_AFTER_QUERY;
4015                ptr++;
4016                }
4017    
4018            recno = 0;            recno = 0;
4019            while((digitab[*ptr] & ctype_digit) != 0)            while((digitab[*ptr] & ctype_digit) != 0)
4020              recno = recno * 10 + *ptr++ - '0';              recno = recno * 10 + *ptr++ - '0';
4021    
4022            if (*ptr != ')')            if (*ptr != ')')
4023              {              {
4024              *errorcodeptr = ERR29;              *errorcodeptr = ERR29;
4025              goto FAILED;              goto FAILED;
4026              }              }
4027    
4028              if (sign == '-')
4029                {
4030                if (recno == 0)
4031                  {
4032                  *errorcodeptr = ERR58;
4033                  goto FAILED;
4034                  }
4035                recno = cd->bracount - recno + 1;
4036                if (recno <= 0)
4037                  {
4038                  *errorcodeptr = ERR15;
4039                  goto FAILED;
4040                  }
4041                }
4042              else if (sign == '+')
4043                {
4044                if (recno == 0)
4045                  {
4046                  *errorcodeptr = ERR58;
4047                  goto FAILED;
4048                  }
4049                recno += cd->bracount;
4050                }
4051    
4052            /* Come here from code above that handles a named recursion */            /* Come here from code above that handles a named recursion */
4053    
# Line 4084  for (;; ptr++) Line 4121  for (;; ptr++)
4121    
4122          /* ------------------------------------------------------------ */          /* ------------------------------------------------------------ */
4123          default:              /* Other characters: check option setting */          default:              /* Other characters: check option setting */
4124            OTHER_CHAR_AFTER_QUERY:
4125          set = unset = 0;          set = unset = 0;
4126          optset = &set;          optset = &set;
4127    

Legend:
Removed from v.150  
changed lines
  Added in v.166

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12