+++ /dev/null
---- pcre_compile.c 2006-10-10 12:00:00.000000000 +0200
-+++ pcre_compile.c 2006-10-10 12:00:00.000000000 +0200
-@@ -129,10 +129,21 @@
- terminated by a zero length entry. The first three must be alpha, lower, upper,
- as this is assumed for handling case independence. */
-
--static const char *const posix_names[] = {
-- "alpha", "lower", "upper",
-- "alnum", "ascii", "blank", "cntrl", "digit", "graph",
-- "print", "punct", "space", "word", "xdigit" };
-+static const char posix_names[] =
-+ "alpha\0"
-+ "lower\0"
-+ "upper\0"
-+ "alnum\0"
-+ "ascii\0"
-+ "blank\0"
-+ "cntrl\0"
-+ "digit\0"
-+ "graph\0"
-+ "print\0"
-+ "punct\0"
-+ "space\0"
-+ "word\0"
-+ "xdigit";
-
- static const uschar posix_name_lengths[] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-@@ -173,76 +184,138 @@
- they are documented. Always add a new error instead. Messages marked DEAD below
- are no longer used. */
-
--static const char *error_texts[] = {
-- "no error",
-- "\\ at end of pattern",
-- "\\c at end of pattern",
-- "unrecognized character follows \\",
-- "numbers out of order in {} quantifier",
-+#define DEAD(s) "\0"
-+
-+static const char error_texts[] =
-+ "no error\0"
-+ "\\ at end of pattern\0"
-+ "\\c at end of pattern\0"
-+ "unrecognized character follows \\\0"
-+ "numbers out of order in {} quantifier\0"
- /* 5 */
-- "number too big in {} quantifier",
-- "missing terminating ] for character class",
-- "invalid escape sequence in character class",
-- "range out of order in character class",
-- "nothing to repeat",
-+ "number too big in {} quantifier\0"
-+ "missing terminating ] for character class\0"
-+ "invalid escape sequence in character class\0"
-+ "range out of order in character class\0"
-+ "nothing to repeat\0"
- /* 10 */
-- "operand of unlimited repeat could match the empty string", /** DEAD **/
-- "internal error: unexpected repeat",
-- "unrecognized character after (?",
-- "POSIX named classes are supported only within a class",
-- "missing )",
-+ DEAD("operand of unlimited repeat could match the empty string")
-+ "internal error: unexpected repeat\0"
-+ "unrecognized character after (?\0"
-+ "POSIX named classes are supported only within a class\0"
-+ "missing )\0"
- /* 15 */
-- "reference to non-existent subpattern",
-- "erroffset passed as NULL",
-- "unknown option bit(s) set",
-- "missing ) after comment",
-- "parentheses nested too deeply", /** DEAD **/
-+ "reference to non-existent subpattern\0"
-+ "erroffset passed as NULL\0"
-+ "unknown option bit(s) set\0"
-+ "missing ) after comment\0"
-+ DEAD("parentheses nested too deeply")
- /* 20 */
-- "regular expression too large",
-- "failed to get memory",
-- "unmatched parentheses",
-- "internal error: code overflow",
-- "unrecognized character after (?<",
-+ "regular expression too large\0"
-+ "failed to get memory\0"
-+ "unmatched parentheses\0"
-+ "internal error: code overflow\0"
-+ "unrecognized character after (?<\0"
- /* 25 */
-- "lookbehind assertion is not fixed length",
-- "malformed number or name after (?(",
-- "conditional group contains more than two branches",
-- "assertion expected after (?(",
-- "(?R or (?digits must be followed by )",
-+ "lookbehind assertion is not fixed length\0"
-+ "malformed number or name after (?(\0"
-+ "conditional group contains more than two branches\0"
-+ "assertion expected after (?(\0"
-+ "(?R or (?digits must be followed by )\0"
- /* 30 */
-- "unknown POSIX class name",
-- "POSIX collating elements are not supported",
-- "this version of PCRE is not compiled with PCRE_UTF8 support",
-- "spare error", /** DEAD **/
-- "character value in \\x{...} sequence is too large",
-+ "unknown POSIX class name\0"
-+ "POSIX collating elements are not supported\0"
-+ "this version of PCRE is not compiled with PCRE_UTF8 support\0"
-+ DEAD("spare error")
-+ "character value in \\x{...} sequence is too large\0"
- /* 35 */
-- "invalid condition (?(0)",
-- "\\C not allowed in lookbehind assertion",
-- "PCRE does not support \\L, \\l, \\N, \\U, or \\u",
-- "number after (?C is > 255",
-- "closing ) for (?C expected",
-+ "invalid condition (?(0)\0"
-+ "\\C not allowed in lookbehind assertion\0"
-+ "PCRE does not support \\L, \\l, \\N, \\U, or \\u\0"
-+ "number after (?C is > 255\0"
-+ "closing ) for (?C expected\0"
- /* 40 */
-- "recursive call could loop indefinitely",
-- "unrecognized character after (?P",
-- "syntax error in subpattern name (missing terminator)",
-- "two named subpatterns have the same name",
-- "invalid UTF-8 string",
-+ "recursive call could loop indefinitely\0"
-+ "unrecognized character after (?P\0"
-+ "syntax error in subpattern name (missing terminator)\0"
-+ "two named subpatterns have the same name\0"
-+ "invalid UTF-8 string\0"
- /* 45 */
-- "support for \\P, \\p, and \\X has not been compiled",
-- "malformed \\P or \\p sequence",
-- "unknown property name after \\P or \\p",
-- "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)",
-- "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")",
-+ "support for \\P, \\p, and \\X has not been compiled\0"
-+ "malformed \\P or \\p sequence\0"
-+ "unknown property name after \\P or \\p\0"
-+ "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)\0"
-+ "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0"
- /* 50 */
-- "repeated subpattern is too long",
-- "octal value is greater than \\377 (not in UTF-8 mode)",
-- "internal error: overran compiling workspace",
-- "internal error: previously-checked referenced subpattern not found",
-- "DEFINE group contains more than one branch",
-+ "repeated subpattern is too long\0"
-+ "octal value is greater than \\377 (not in UTF-8 mode)\0"
-+ "internal error: overran compiling workspace\0"
-+ "internal error: previously-checked referenced subpattern not found\0"
-+ "DEFINE group contains more than one branch\0"
- /* 55 */
-- "repeating a DEFINE group is not allowed",
-- "inconsistent NEWLINE options",
-- "\\g is not followed by an (optionally braced) non-zero number"
-+ "repeating a DEFINE group is not allowed\0"
-+ "inconsistent NEWLINE options\0"
-+ "\\g is not followed by an (optionally braced) non-zero number";
-+
-+static const int error_texts_offsets[] = {
-+ 0,
-+ 9,
-+ 29,
-+ 50,
-+ 83,
-+ 121,
-+ 153,
-+ 195,
-+ 238,
-+ 276,
-+ 294,
-+ 295,
-+ 329,
-+ 361,
-+ 415,
-+ 425,
-+ 462,
-+ 487,
-+ 513,
-+ 537,
-+ 538,
-+ 567,
-+ 588,
-+ 610,
-+ 640,
-+ 673,
-+ 714,
-+ 749,
-+ 799,
-+ 828,
-+ 866,
-+ 891,
-+ 934,
-+ 994,
-+ 995,
-+ 1044,
-+ 1068,
-+ 1107,
-+ 1151,
-+ 1177,
-+ 1204,
-+ 1243,
-+ 1276,
-+ 1329,
-+ 1370,
-+ 1391,
-+ 1440,
-+ 1468,
-+ 1505,
-+ 1557,
-+ 1600,
-+ 1632,
-+ 1685,
-+ 1729,
-+ 1796,
-+ 1839,
-+ 1879,
-+ 1908
- };
-
-
-@@ -1453,14 +1526,16 @@
- static int
- check_posix_name(const uschar *ptr, int len)
- {
--register int yield = 0;
--while (posix_name_lengths[yield] != 0)
-- {
-- if (len == posix_name_lengths[yield] &&
-- strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
-- yield++;
-- }
--return -1;
-+ int offset = 0;
-+ int yield = 0;
-+ while (posix_name_lengths[yield] != 0)
-+ {
-+ if (len == posix_name_lengths[yield] &&
-+ strcmp((const char *)ptr, posix_names + offset) == 0) return yield;
-+ offset += posix_name_lengths[yield] + 1;
-+ yield++;
-+ }
-+ return -1;
- }
-
-
-@@ -5200,7 +5275,7 @@
- #ifdef SUPPORT_UTF8
- PCRE_UTF8_ERROR_RETURN:
- #endif
-- *errorptr = error_texts[errorcode];
-+ *errorptr = error_texts + error_texts_offsets[errorcode];
- if (errorcodeptr != NULL) *errorcodeptr = errorcode;
- return NULL;
- }
-@@ -5297,7 +5372,7 @@
- if (code - codestart > length)
- {
- (pcre_free)(re);
-- *errorptr = error_texts[ERR23];
-+ *errorptr = error_texts + error_texts_offsets[ERR23];
- *erroroffset = ptr - (uschar *)pattern;
- if (errorcodeptr != NULL) *errorcodeptr = ERR23;
- return NULL;