--- embedaddon/pcre/pcreposix.c 2012/10/09 09:19:17 1.1.1.3 +++ embedaddon/pcre/pcreposix.c 2014/06/15 19:46:03 1.1.1.5 @@ -110,7 +110,7 @@ static const int eint[] = { REG_BADPAT, /* POSIX collating elements are not supported */ REG_INVARG, /* this version of PCRE is not compiled with PCRE_UTF8 support */ REG_BADPAT, /* spare error */ - REG_BADPAT, /* character value in \x{...} sequence is too large */ + REG_BADPAT, /* character value in \x{} or \o{} is too large */ /* 35 */ REG_BADPAT, /* invalid condition (?(0) */ REG_BADPAT, /* \C not allowed in lookbehind assertion */ @@ -157,11 +157,20 @@ static const int eint[] = { REG_BADPAT, /* internal error: unknown opcode in find_fixedlength() */ REG_BADPAT, /* \N is not supported in a class */ REG_BADPAT, /* too many forward references */ - REG_BADPAT, /* disallowed UTF-8/16 code point (>= 0xd800 && <= 0xdfff) */ + REG_BADPAT, /* disallowed UTF-8/16/32 code point (>= 0xd800 && <= 0xdfff) */ REG_BADPAT, /* invalid UTF-16 string (should not occur) */ /* 75 */ REG_BADPAT, /* overlong MARK name */ - REG_BADPAT /* character value in \u.... sequence is too large */ + REG_BADPAT, /* character value in \u.... sequence is too large */ + REG_BADPAT, /* invalid UTF-32 string (should not occur) */ + REG_BADPAT, /* setting UTF is disabled by the application */ + REG_BADPAT, /* non-hex character in \\x{} (closing brace missing?) */ + /* 80 */ + REG_BADPAT, /* non-octal character in \o{} (closing brace missing?) */ + REG_BADPAT, /* missing opening brace after \o */ + REG_BADPAT, /* parentheses too deeply nested */ + REG_BADPAT, /* invalid range in character class */ + REG_BADPAT /* group name must start with a non-digit */ }; /* Table of texts corresponding to POSIX error codes */ @@ -259,6 +268,7 @@ const char *errorptr; int erroffset; int errorcode; int options = 0; +int re_nsub = 0; if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS; if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE; @@ -282,7 +292,8 @@ if (preg->re_pcre == NULL) } (void)pcre_fullinfo((const pcre *)preg->re_pcre, NULL, PCRE_INFO_CAPTURECOUNT, - &(preg->re_nsub)); + &re_nsub); +preg->re_nsub = (size_t)re_nsub; return 0; } @@ -314,7 +325,7 @@ int *ovector = NULL; int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; BOOL allocated_ovector = FALSE; BOOL nosub = - (((const pcre *)preg->re_pcre)->options & PCRE_NO_AUTO_CAPTURE) != 0; + (REAL_PCRE_OPTIONS((const pcre *)preg->re_pcre) & PCRE_NO_AUTO_CAPTURE) != 0; if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL; if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;