# # # add_file "debian/shlibs.local" # content [08938a843783bffb941e32b07e68bdc0bf60408e] # # patch "AUTHORS" # from [db4c252c7e73c7b4caf4d1a7906ef5ee03eb4245] # to [0d557f0e9540cf8a1627203f1e0fbeb4d63577ea] # # patch "NEWS" # from [ccebca5f660b9bdaeb5115cf72ad0c24dc76a6fe] # to [dd8203903ced79ac590535703f7ce080478bc9d1] # # patch "debian/changelog" # from [2f39643f77187a66d63ab350c896e794f3d78f33] # to [aac674902d1db7669b2398fe485f6697cfff58d2] # # patch "debian/control" # from [db47b774b8ef4deb6ae3a7929e07acc580e05c45] # to [222a0fe9a7cf363ae803d763145e82b4554eb33b] # # patch "debian/rules" # from [cf52cb2c0fe1bbf5def6c6750fd09e498279a7c1] # to [5ccfa63d48112f0275bc04dac651b06583d08566] # # patch "m4/pcre.m4" # from [5f81d646e630ac56e84b9651c4cd58dfbe0cd5b7] # to [692cc1d5069148e2c9fa0c1cf4870db7a4d6d5cb] # # patch "pcre/pcre.h" # from [3d50cb3220621ae4952c574e5f6970a2f6bda6fd] # to [880bda6dd833cb64df1b7a2ee30597f7045605f5] # # patch "pcre/pcre_compile.c" # from [7e46181d93904b1c2030713b028b75f5588b303f] # to [3a08469385200a7e1bee6f35399a1494aa50611a] # # patch "pcre/pcre_config.c" # from [9e873bc83d131086cab79a943b783ea9367222e4] # to [fe26da3d3d90d22d5d90c330858ee2628c395892] # # patch "pcre/pcre_dfa_exec.c" # from [54e1c705cf360ac00f188006e24f1faa813c8508] # to [2fbee25dff3b1a89178c7666cc57d8ffa3850462] # # patch "pcre/pcre_exec.c" # from [15e9af69dc4d3e1a33cf3b7b8a2906d6ca426dc9] # to [5d79ad415ec123623b0d8bfced2f87f93f13ed3e] # # patch "pcre/pcre_fullinfo.c" # from [3596c951b0cc5bb905d8ca91cba96161f39bb607] # to [cfe87732c2a7ff49b946b0cef32a94201b6d5d8a] # # patch "pcre/pcre_get.c" # from [8e8c912b9d50848a74761991314b6ea326b2464a] # to [d1400b33a0738dc2fd25f675c09017c1008c2df5] # # patch "pcre/pcre_globals.c" # from [3cf49201069daca47dc593a2ef160fbb13610a69] # to [8fe626d0db539f06b1161166b7c434178c2392b0] # # patch "pcre/pcre_info.c" # from [004e534421480865060b938b75561b8e523beb2b] # to [b767abb2c7478d4dfd810e8dad698086881d9166] # # patch "pcre/pcre_internal.h" # from [787e957bffa8995e75e15a2a1c17befc5d570cdc] # to [4149f246bdadbb3b67a854df4c382c25531eb976] # # patch "pcre/pcre_maketables.c" # from [a5231ea973f291c3fe8f7f44534028794a3bb1da] # to [8036b1f3772cf076c761fb8bbaaabb312d681e59] # # patch "pcre/pcre_newline.c" # from [52667cdf33813f8c161638c91b14813f0aceeb21] # to [88f9b74f1dcfab4da15e7ca2e0acc76deded42a7] # # patch "pcre/pcre_ord2utf8.c" # from [e2da5e11be19beab7cbe98fc4f1200438a4612f2] # to [dfa43ef059a1d075f09a82e402836d1980d695b1] # # patch "pcre/pcre_refcount.c" # from [84e42bff9f54245918ff28b8e8fb23dc53fb0db9] # to [2b18333691e83b9a3745bb18688e7a38f864a3ab] # # patch "pcre/pcre_study.c" # from [29605e98e732f8139fd1fedc6a5d7de268add456] # to [43df641947553eec2c8487b9b42cdc6ad2c5a86c] # # patch "pcre/pcre_tables.c" # from [43b929d5086b991efc569e2d3fe2924fde8e7009] # to [556d518067a568f8e9f8326d70c8207f7db0efc9] # # patch "pcre/pcre_try_flipped.c" # from [2d7f11db16127e769a87613dbb38ba1959a89c5c] # to [194ea39ba5e0cc8cad7c9571b2fe39a607d68a17] # # patch "pcre/pcre_ucp_searchfuncs.c" # from [bd92f7801af94ebe492b49be93a02fa992de0fdf] # to [da98ce81b5a387c0240a1d4c4fc571957f83a340] # # patch "pcre/pcre_valid_utf8.c" # from [c587b5e870e25985bca0d58a189d7d5fca4a4a29] # to [f4354314ba53b3caaec709d8aa4868bd387530fc] # # patch "pcre/pcre_version.c" # from [97e12b4b30fc68214564f746963f1701528925a7] # to [97d0df5b29a822927867080761143b73b95538ff] # # patch "pcre/pcre_xclass.c" # from [b9a3ce19007386f9fb242cd8396ca94efaa29b5d] # to [a62818c3e4c06be6a798b02a9cacfe443ca7e6d8] # # patch "pcre/pcresyntax.texi" # from [a5c795d675697cc91f001cc242cb717e34bcbcac] # to [6a09cf8810f16624ffa083e803b9f9a84bb0dbfa] # # patch "pcre/ucptable.h" # from [665475a65598de16193f595e4ec78d84b9059662] # to [531d05f34d19eb6abea2d771f266eea7f2c8e574] # # patch "tests/syntax_errors_in_.mtn-ignore/stderr-ref" # from [6d982783b4455a358e195a462a8347cee1b41e83] # to [2d805e4050dd9908bf700c86907406767a729f4b] # ============================================================ --- debian/shlibs.local 08938a843783bffb941e32b07e68bdc0bf60408e +++ debian/shlibs.local 08938a843783bffb941e32b07e68bdc0bf60408e @@ -0,0 +1 @@ +libpcre 3 libpcre3 (>= 7.6), libpcre3 (<< 7.7) ============================================================ --- AUTHORS db4c252c7e73c7b4caf4d1a7906ef5ee03eb4245 +++ AUTHORS 0d557f0e9540cf8a1627203f1e0fbeb4d63577ea @@ -462,7 +462,7 @@ under a BSD-like license: distribution may be retrieved from http://www.pcre.org/. It is licensed under a BSD-like license: -# Copyright (c) 1997-2007 University of Cambridge. +# Copyright (c) 1997-2008 University of Cambridge. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions ============================================================ --- NEWS ccebca5f660b9bdaeb5115cf72ad0c24dc76a6fe +++ NEWS dd8203903ced79ac590535703f7ce080478bc9d1 @@ -19,6 +19,11 @@ messages, however it may report content conflicts that will be resolved automatically by the line merger. + - The internal copy of PCRE has been updated to version 7.6. + If you use the '--with-system-pcre' configure switch, it + will insist on this version and no other. See m4/pcre.m4 + for further discussion. + Bugs fixed - for changes near the beginning of a file, mtn's unified diff ============================================================ --- debian/changelog 2f39643f77187a66d63ab350c896e794f3d78f33 +++ debian/changelog aac674902d1db7669b2398fe485f6697cfff58d2 @@ -1,3 +1,12 @@ +monotone (0.39-1) UNRELEASED; urgency=low + + * New upstream release. + * Enable use of system libpcre, set appropriate Build-Depends. Note + use of tight B-Ds and shared library dependencies, consistent + with behavior of upstream configure script. + + -- J Maintainer ???, ?? ??? ???? ??:??:?? +???? + monotone (0.38-1) unstable; urgency=low [ Richard Levitte ] @@ -92,7 +101,7 @@ monotone (0.36-1) unstable; urgency=low - if not asked to manage the database, do not delete it. - if deleting the database and there is a hot journal, delete that too. - delete editor backups of ucf-managed conffiles. - - expunge the auto-generated key's passphrase from + - expunge the auto-generated key's passphrase from /etc/monotone/passphrases and if that leaves the file empty, delete it. - do not delete the monotone user or group if leaving /var/lib/monotone ============================================================ --- debian/control db47b774b8ef4deb6ae3a7929e07acc580e05c45 +++ debian/control 222a0fe9a7cf363ae803d763145e82b4554eb33b @@ -6,7 +6,8 @@ Build-Depends: debhelper (>= 4.2.0), aut Homepage: http://monotone.ca/ Vcs-Browser: http://viewmtn.angrygoats.net/branch/changes/net.venge.monotone Build-Depends: debhelper (>= 4.2.0), autotools-dev, libz-dev, po-debconf, - libboost-dev (>= 1.34.1-2), patch + libboost-dev (>= 1.34.1-2), libpcre3-dev (>= 7.6), libpcre3-dev (<< 7.7), + patch Build-Depends-Indep: ps2eps, texlive-base, texlive-generic-recommended, texlive-latex-base, texinfo, xpdf-utils Standards-Version: 3.7.3 ============================================================ --- debian/rules cf52cb2c0fe1bbf5def6c6750fd09e498279a7c1 +++ debian/rules 5ccfa63d48112f0275bc04dac651b06583d08566 @@ -39,15 +39,8 @@ else # optimization enabled DEFAULT_CFLAGS += -mlong-calls endif else # optimization enabled -# Back Alpha down to -O1 to avoid apparent compiler bugs -# (0.37-1 did not build on alpha with random crashes, 0.37-2 did, -# only plausible difference was the accidental -O0 in all 0.37-2 builds). -ifneq (,$(findstring alpha,$(DEB_HOST_GNU_TYPE))) -DEFAULT_CFLAGS += -O1 -else DEFAULT_CFLAGS += -O2 endif -endif CFLAGS ?= $(DEFAULT_CFLAGS) @@ -71,6 +64,16 @@ build: build-arch # tried it with actual root privileges and don't propose to). build: build-arch +# Note regarding PCRE: monotone upstream wants tight control over +# which version of the library is used with any given release of the +# program. In --with-system-pcre mode, configure will error out if it +# finds any version other than the one bundled with the program. This +# is why the package has both >= and << build-dependencies on +# libpcre3-dev. There is a documented way to override this, should it +# be necessary for e.g. security NMUs: see m4/pcre.m4. You will also +# need to change the build dependencies in debian/control *and* the +# shared library dependencies override in debian/shlibs.local. + config.status: configure dh_testdir ifneq "$(wildcard /usr/share/misc/config.sub)" "" @@ -80,6 +83,7 @@ endif cp -f /usr/share/misc/config.guess config.guess endif ./configure $(BUILD_AND_HOST) \ + --with-system-pcre \ --prefix=/usr --mandir='$${prefix}/share/man' \ --infodir='$${prefix}/share/info' CFLAGS="$(CFLAGS)" \ CXXFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" @@ -123,7 +127,7 @@ binary-indep: build-indep # monotone.html installed.) Annoyingly, at present we cannot simply # dh_installdocs the entire html directory, because it contains a # bunch of unwanted junk; instead we dh_installdirs the directory -# hierarchy that is required and use cp -a to put all the files in place. +# hierarchy that is required and use cp -p to put all the files in place. cp -p html/*.html html/*.css debian/monotone-doc/usr/share/doc/html cp -p html/figures/*.png debian/monotone-doc/usr/share/doc/html/figures ============================================================ --- m4/pcre.m4 5f81d646e630ac56e84b9651c4cd58dfbe0cd5b7 +++ m4/pcre.m4 692cc1d5069148e2c9fa0c1cf4870db7a4d6d5cb @@ -1,4 +1,26 @@ -# Detect libpcre or fall back to our bundled version. +# Set up to use either a bundled or a system-provided version of libpcre. +# +# If --with-system-pcre is specified and the library cannot be found or is +# unsuitable, the configure script will error out rather than falling back +# to the bundled version. This is to avoid surprising a user who expected +# their system libpcre to be used. +# +# "Unsuitable" is defined as "any version other than the bundled one". In +# other words, if you want to use a system PCRE you must provide the exact +# same version that was shipped with this release of Monotone. We do this +# because regexes are part of the visible user interface, but their syntax +# may change from release to release of PCRE. We want each version of our +# program to exhibit the regex syntax that was documented in its manual. +# +# If you want to rebuild monotone with a newer system PCRE to get some bug +# fixes, and you've verified that the newer version of PCRE doesn't change +# the regex syntax, you can override the check by changing the #defines in +# pcre/pcre.h that state the bundled library's version number. You do not +# have to regenerate 'configure'. +# +# We are discussing this with the upstream maintainers of PCRE and hope to +# find a better solution soon. + AC_DEFUN([MTN_LIB_PCRE], [AC_ARG_WITH([system-pcre], AC_HELP_STRING([--with-system-pcre], @@ -13,8 +35,7 @@ AC_DEFUN([MTN_LIB_PCRE], [with_system_pcre=no]) if test "$with_system_pcre" = yes; then MTN_FIND_PCRE - fi - if test $with_system_pcre = no; then + else AC_DEFINE([PCRE_STATIC],[1],[Define if using bundled pcre]) AC_MSG_NOTICE([using the bundled copy of PCRE]) fi @@ -34,7 +55,7 @@ AC_DEFUN([MTN_FIND_PCRE], if test -n "${PCRE_CFLAGS+set}" || test -n "${PCRE_LIBS+set}"; then found_libpcre=yes else - PKG_CHECK_MODULES([PCRE], [libpcre >= 6.7], + PKG_CHECK_MODULES([PCRE], [libpcre], [found_libpcre=yes], [found_libpcre=no]) fi if test $found_libpcre = no; then @@ -85,5 +106,26 @@ AC_DEFUN([MTN_FIND_PCRE], LIBS="$save_LIBS" CFLAGS="$save_CFLAGS"]) if test $ac_cv_lib_pcre_works = no; then + AC_MSG_ERROR([system-provided libpcre is not usable. Correct your settings or use --with-system-pcre=no.]) + fi + + # This is deliberately not cached. + AC_MSG_CHECKING([whether the system libpcre matches the bundled version]) + sed -n -e 's/#define PCRE_MAJOR[ ]*/#define BUNDLED_PCRE_MAJOR /p' \ + -e 's/#define PCRE_MINOR[ ]*/#define BUNDLED_PCRE_MINOR /p' \ + $srcdir/pcre/pcre.h > conftest.h + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PCRE_CFLAGS" + AC_PREPROC_IFELSE([ +#include "conftest.h" +#include "pcre.h" +#if PCRE_MAJOR != BUNDLED_PCRE_MAJOR || PCRE_MINOR != BUNDLED_PCRE_MINOR +#error PCRE version mismatch +#endif], + [pcre_version_match=yes], + [pcre_version_match=no]) + AC_MSG_RESULT($pcre_version_match) + if test $pcre_version_match = no; then + AC_MSG_ERROR([system-provided libpcre does not match bundled pcre. Correct your settings, use --with-system-pcre=no, or read m4/pcre.m4 for advice.]) + fi +]) - with_system_pcre=no - fi]) ============================================================ --- pcre/pcre.h 3d50cb3220621ae4952c574e5f6970a2f6bda6fd +++ pcre/pcre.h 880bda6dd833cb64df1b7a2ee30597f7045605f5 @@ -5,7 +5,7 @@ applications that call the PCRE function /* This is the public header file for the PCRE library, to be #included by applications that call the PCRE functions. - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE_MAJOR 7 -#define PCRE_MINOR 4 +#define PCRE_MINOR 6 #define PCRE_PRERELEASE -#define PCRE_DATE 2007-09-21 +#define PCRE_DATE 2008-01-28 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE, the appropriate ============================================================ --- pcre/pcre_compile.c 7e46181d93904b1c2030713b028b75f5588b303f +++ pcre/pcre_compile.c 3a08469385200a7e1bee6f35399a1494aa50611a @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -239,7 +239,7 @@ static const char error_texts[] = /* 10 */ "operand of unlimited repeat could match the empty string\0" /** DEAD **/ "internal error: unexpected repeat\0" - "unrecognized character after (?\0" + "unrecognized character after (? or (?-\0" "POSIX named classes are supported only within a class\0" "missing )\0" /* 15 */ @@ -298,7 +298,9 @@ static const char error_texts[] = "(*VERB) with an argument is not supported\0" /* 60 */ "(*VERB) not recognized\0" - "number is too big"; + "number is too big\0" + "subpattern name expected\0" + "digit expected after (?+"; /* Table to identify digits and hex digits. This is used when compiling @@ -494,16 +496,16 @@ if (c == 0) *errorcodeptr = ERR1; if (c == 0) *errorcodeptr = ERR1; -/* Non-alphamerics are literals. For digits or letters, do an initial lookup in -a table. A non-zero result is something that can be returned immediately. +/* Non-alphanumerics are literals. For digits or letters, do an initial lookup +in a table. A non-zero result is something that can be returned immediately. Otherwise further processing may be required. */ #ifndef EBCDIC /* ASCII coding */ -else if (c < '0' || c > 'z') {} /* Not alphameric */ +else if (c < '0' || c > 'z') {} /* Not alphanumeric */ else if ((i = escapes[c - '0']) != 0) c = i; #else /* EBCDIC coding */ -else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {} /* Not alphameric */ +else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {} /* Not alphanumeric */ else if ((i = escapes[c - 0x48]) != 0) c = i; #endif @@ -720,10 +722,10 @@ else break; /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any - other alphameric following \ is an error if PCRE_EXTRA was set; otherwise, - for Perl compatibility, it is a literal. This code looks a bit odd, but - there used to be some cases other than the default, and there may be again - in future, so I haven't "optimized" it. */ + other alphanumeric following \ is an error if PCRE_EXTRA was set; + otherwise, for Perl compatibility, it is a literal. This code looks a bit + odd, but there used to be some cases other than the default, and there may + be again in future, so I haven't "optimized" it. */ default: if ((options & PCRE_EXTRA) != 0) switch(c) @@ -1504,8 +1506,9 @@ group that can match nothing. Note that can match the empty string or not. It is called from could_be_empty() below and from compile_branch() when checking for an unlimited repeat of a group that can match nothing. Note that first_significant_code() skips over -assertions. If we hit an unclosed bracket, we return "empty" - this means we've -struck an inner bracket whose current branch will already have been scanned. +backward and negative forward assertions when its final argument is TRUE. If we +hit an unclosed bracket, we return "empty" - this means we've struck an inner +bracket whose current branch will already have been scanned. Arguments: code points to start of search @@ -1527,6 +1530,16 @@ for (code = first_significant_code(code c = *code; + /* Skip over forward assertions; the other assertions are skipped by + first_significant_code() with a TRUE final argument. */ + + if (c == OP_ASSERT) + { + do code += GET(code, 1); while (*code == OP_ALT); + c = *code; + continue; + } + /* Groups with zero repeats can of course be empty; skip them. */ if (c == OP_BRAZERO || c == OP_BRAMINZERO) @@ -1722,29 +1735,48 @@ return TRUE; *************************************************/ /* This function is called when the sequence "[:" or "[." or "[=" is -encountered in a character class. It checks whether this is followed by an -optional ^ and then a sequence of letters, terminated by a matching ":]" or -".]" or "=]". +encountered in a character class. It checks whether this is followed by a +sequence of characters terminated by a matching ":]" or ".]" or "=]". If we +reach an unescaped ']' without the special preceding character, return FALSE. -Argument: +Originally, this function only recognized a sequence of letters between the +terminators, but it seems that Perl recognizes any sequence of characters, +though of course unknown POSIX names are subsequently rejected. Perl gives an +"Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE +didn't consider this to be a POSIX class. Likewise for [:1234:]. + +The problem in trying to be exactly like Perl is in the handling of escapes. We +have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX +class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code +below handles the special case of \], but does not try to do any other escape +processing. This makes it different from Perl for cases such as [:l\ower:] +where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize +"l\ower". This is a lesser evil that not diagnosing bad classes when Perl does, +I think. + +Arguments: ptr pointer to the initial [ endptr where to return the end pointer - cd pointer to compile data Returns: TRUE or FALSE */ static BOOL -check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd) +check_posix_syntax(const uschar *ptr, const uschar **endptr) { int terminator; /* Don't combine these lines; the Solaris cc */ terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */ -if (*(++ptr) == '^') ptr++; -while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++; -if (*ptr == terminator && ptr[1] == ']') +for (++ptr; *ptr != 0; ptr++) { - *endptr = ptr; - return TRUE; + if (*ptr == '\\' && ptr[1] == ']') ptr++; else + { + if (*ptr == ']') return FALSE; + if (*ptr == terminator && ptr[1] == ']') + { + *endptr = ptr; + return TRUE; + } + } } return FALSE; } @@ -2342,6 +2374,7 @@ uschar *class_utf8data; BOOL class_utf8; BOOL utf8 = (options & PCRE_UTF8) != 0; uschar *class_utf8data; +uschar *class_utf8data_base; uschar utf8_char[6]; #else BOOL utf8 = FALSE; @@ -2381,6 +2414,7 @@ for (;; ptr++) for (;; ptr++) { BOOL negate_class; + BOOL should_flip_negation; BOOL possessive_quantifier; BOOL is_quantifier; BOOL is_recurse; @@ -2604,7 +2638,7 @@ for (;; ptr++) they are encountered at the top level, so we'll do that too. */ if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && - check_posix_syntax(ptr, &tempptr, cd)) + check_posix_syntax(ptr, &tempptr)) { *errorcodeptr = (ptr[1] == ':')? ERR13 : ERR31; goto FAILED; @@ -2629,6 +2663,12 @@ for (;; ptr++) else break; } + /* If a class contains a negative special such as \S, we need to flip the + negation flag at the end, so that support for characters > 255 works + correctly (they are all included in the class). */ + + should_flip_negation = FALSE; + /* Keep a count of chars with values < 256 so that we can optimize the case of just a single character (as long as it's < 256). However, For higher valued UTF-8 characters, we don't yet do any optimization. */ @@ -2646,6 +2686,7 @@ for (;; ptr++) #ifdef SUPPORT_UTF8 class_utf8 = FALSE; /* No chars >= 256 */ class_utf8data = code + LINK_SIZE + 2; /* For UTF-8 items */ + class_utf8data_base = class_utf8data; /* For resetting in pass 1 */ #endif /* Process characters until ] is reached. By writing this as a "do" it @@ -2661,6 +2702,18 @@ for (;; ptr++) { /* Braces are required because the */ GETCHARLEN(c, ptr, ptr); /* macro generates multiple statements */ } + + /* In the pre-compile phase, accumulate the length of any UTF-8 extra + data and reset the pointer. This is so that very large classes that + contain a zillion UTF-8 characters no longer overwrite the work space + (which is on the stack). */ + + if (lengthptr != NULL) + { + *lengthptr += class_utf8data - class_utf8data_base; + class_utf8data = class_utf8data_base; + } + #endif /* Inside \Q...\E everything is literal except \E */ @@ -2684,7 +2737,7 @@ for (;; ptr++) if (c == '[' && (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && - check_posix_syntax(ptr, &tempptr, cd)) + check_posix_syntax(ptr, &tempptr)) { BOOL local_negate = FALSE; int posix_class, taboffset, tabopt; @@ -2701,6 +2754,7 @@ for (;; ptr++) if (*ptr == '^') { local_negate = TRUE; + should_flip_negation = TRUE; /* Note negative special */ ptr++; } @@ -2775,7 +2829,7 @@ for (;; ptr++) c = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE); if (*errorcodeptr != 0) goto FAILED; - if (-c == ESC_b) c = '\b'; /* \b is backslash in a class */ + if (-c == ESC_b) c = '\b'; /* \b is backspace in a class */ else if (-c == ESC_X) c = 'X'; /* \X is literal X in a class */ else if (-c == ESC_R) c = 'R'; /* \R is literal R in a class */ else if (-c == ESC_Q) /* Handle start of quoted string */ @@ -2803,6 +2857,7 @@ for (;; ptr++) continue; case ESC_D: + should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit]; continue; @@ -2811,6 +2866,7 @@ for (;; ptr++) continue; case ESC_W: + should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word]; continue; @@ -2820,13 +2876,11 @@ for (;; ptr++) continue; case ESC_S: + should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space]; classbits[1] |= 0x08; /* Perl 5.004 onwards omits VT from \s */ continue; - case ESC_E: /* Perl ignores an orphan \E */ - continue; - default: /* Not recognized; fall through */ break; /* Need "default" setting to stop compiler warning. */ } @@ -3061,7 +3115,7 @@ for (;; ptr++) d = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE); if (*errorcodeptr != 0) goto FAILED; - /* \b is backslash; \X is literal X; \R is literal R; any other + /* \b is backspace; \X is literal X; \R is literal R; any other special means the '-' was literal */ if (d < 0) @@ -3325,11 +3379,14 @@ we set the flag only if there is a liter zeroreqbyte = reqbyte; /* If there are characters with values > 255, we have to compile an - extended class, with its own opcode. If there are no characters < 256, - we can omit the bitmap in the actual compiled code. */ + extended class, with its own opcode, unless there was a negated special + such as \S in the class, because in that case all characters > 255 are in + the class, so any that were explicitly given as well can be ignored. If + (when there are explicit characters > 255 that must be listed) there are no + characters < 256, we can omit the bitmap in the actual compiled code. */ #ifdef SUPPORT_UTF8 - if (class_utf8) + if (class_utf8 && !should_flip_negation) { *class_utf8data++ = XCL_END; /* Marks the end of extra data */ *code++ = OP_XCLASS; @@ -3355,20 +3412,19 @@ we set the flag only if there is a liter } #endif - /* If there are no characters > 255, negate the 32-byte map if necessary, - and copy it into the code vector. If this is the first thing in the branch, - there can be no first char setting, whatever the repeat count. Any reqbyte - setting must remain unchanged after any kind of repeat. */ + /* If there are no characters > 255, set the opcode to OP_CLASS or + OP_NCLASS, depending on whether the whole class was negated and whether + there were negative specials such as \S in the class. Then copy the 32-byte + map into the code vector, negating it if necessary. */ + *code++ = (negate_class == should_flip_negation) ? OP_CLASS : OP_NCLASS; if (negate_class) { - *code++ = OP_NCLASS; if (lengthptr == NULL) /* Save time in the pre-compile phase */ for (c = 0; c < 32; c++) code[c] = ~classbits[c]; } else { - *code++ = OP_CLASS; memcpy(code, classbits, 32); } code += 32; @@ -4004,7 +4060,9 @@ we set the flag only if there is a liter int len; if (*tempcode == OP_EXACT || *tempcode == OP_TYPEEXACT || *tempcode == OP_NOTEXACT) - tempcode += _pcre_OP_lengths[*tempcode]; + tempcode += _pcre_OP_lengths[*tempcode] + + ((*tempcode == OP_TYPEEXACT && + (tempcode[3] == OP_PROP || tempcode[3] == OP_NOTPROP))? 2:0); len = code - tempcode; if (len > 0) switch (*tempcode) { @@ -4231,16 +4289,13 @@ we set the flag only if there is a liter *errorcodeptr = ERR58; goto FAILED; } - if (refsign == '-') + recno = (refsign == '-')? + cd->bracount - recno + 1 : recno +cd->bracount; + if (recno <= 0 || recno > cd->final_bracount) { - recno = cd->bracount - recno + 1; - if (recno <= 0) - { - *errorcodeptr = ERR15; - goto FAILED; - } + *errorcodeptr = ERR15; + goto FAILED; } - else recno += cd->bracount; PUT2(code, 2+LINK_SIZE, recno); break; } @@ -4312,9 +4367,10 @@ we set the flag only if there is a liter skipbytes = 1; } - /* Check for the "name" actually being a subpattern number. */ + /* Check for the "name" actually being a subpattern number. We are + in the second pass here, so final_bracount is set. */ - else if (recno > 0) + else if (recno > 0 && recno <= cd->final_bracount) { PUT2(code, 2+LINK_SIZE, recno); } @@ -4508,7 +4564,9 @@ we set the flag only if there is a liter /* We come here from the Python syntax above that handles both references (?P=name) and recursion (?P>name), as well as falling - through from the Perl recursion syntax (?&name). */ + through from the Perl recursion syntax (?&name). We also come here from + the Perl \k or \k'name' back reference syntax and the \k{name} + .NET syntax. */ NAMED_REF_OR_RECURSE: name = ++ptr; @@ -4520,6 +4578,11 @@ we set the flag only if there is a liter if (lengthptr != NULL) { + if (namelen == 0) + { + *errorcodeptr = ERR62; + goto FAILED; + } if (*ptr != terminator) { *errorcodeptr = ERR42; @@ -4533,14 +4596,19 @@ we set the flag only if there is a liter recno = 0; } - /* In the real compile, seek the name in the table */ + /* In the real compile, seek the name in the table. We check the name + first, and then check that we have reached the end of the name in the + table. That way, if the name that is longer than any in the table, + the comparison will fail without reading beyond the table entry. */ else { slot = cd->name_table; for (i = 0; i < cd->names_found; i++) { - if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break; + if (strncmp((char *)name, (char *)slot+2, namelen) == 0 && + slot[2+namelen] == 0) + break; slot += cd->name_entry_size; } @@ -4577,7 +4645,15 @@ we set the flag only if there is a liter { const uschar *called; - if ((refsign = *ptr) == '+') ptr++; + if ((refsign = *ptr) == '+') + { + ptr++; + if ((digitab[*ptr] & ctype_digit) == 0) + { + *errorcodeptr = ERR63; + goto FAILED; + } + } else if (refsign == '-') { if ((digitab[ptr[1]] & ctype_digit) == 0) @@ -5743,7 +5819,6 @@ uschar cworkspace[COMPILE_WORK_SIZE]; uschar cworkspace[COMPILE_WORK_SIZE]; - /* Set this early so that early errors get offset 0. */ ptr = (const uschar *)pattern; @@ -5904,7 +5979,7 @@ is a test for its doing so. */ no longer needed, so hopefully this workspace will never overflow, though there is a test for its doing so. */ -cd->bracount = 0; +cd->bracount = cd->final_bracount = 0; cd->names_found = 0; cd->name_entry_size = 0; cd->name_table = NULL; @@ -5981,6 +6056,7 @@ field; this time it's used for rememberi field; this time it's used for remembering forward references to subpatterns. */ +cd->final_bracount = cd->bracount; /* Save for checking forward references */ cd->bracount = 0; cd->names_found = 0; cd->name_table = (uschar *)re + re->name_table_offset; ============================================================ --- pcre/pcre_config.c 9e873bc83d131086cab79a943b783ea9367222e4 +++ pcre/pcre_config.c fe26da3d3d90d22d5d90c330858ee2628c395892 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_dfa_exec.c 54e1c705cf360ac00f188006e24f1faa813c8508 +++ pcre/pcre_dfa_exec.c 2fbee25dff3b1a89178c7666cc57d8ffa3850462 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_exec.c 15e9af69dc4d3e1a33cf3b7b8a2906d6ca426dc9 +++ pcre/pcre_exec.c 5d79ad415ec123623b0d8bfced2f87f93f13ed3e @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -4668,10 +4668,10 @@ for(;;) if (first_byte_caseless) while (start_match < end_subject && md->lcc[*start_match] != first_byte) - start_match++; + { NEXTCHAR(start_match); } else while (start_match < end_subject && *start_match != first_byte) - start_match++; + { NEXTCHAR(start_match); } } /* Or to just after a linebreak for a multiline match if possible */ @@ -4681,7 +4681,7 @@ for(;;) if (start_match > md->start_subject + start_offset) { while (start_match <= end_subject && !WAS_NEWLINE(start_match)) - start_match++; + { NEXTCHAR(start_match); } /* If we have just passed a CR and the newline option is ANY or ANYCRLF, and we are now at a LF, advance the match position by one more character. @@ -4702,7 +4702,9 @@ for(;;) while (start_match < end_subject) { register unsigned int c = *start_match; - if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break; + if ((start_bits[c/8] & (1 << (c&7))) == 0) + { NEXTCHAR(start_match); } + else break; } } ============================================================ --- pcre/pcre_fullinfo.c 3596c951b0cc5bb905d8ca91cba96161f39bb607 +++ pcre/pcre_fullinfo.c cfe87732c2a7ff49b946b0cef32a94201b6d5d8a @@ -1,12 +1,12 @@ /************************************************* * Perl-Compatible Regular Expressions * *************************************************/ -/*PCRE is a library of functions to support regular expressions whose syntax +/* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_get.c 8e8c912b9d50848a74761991314b6ea326b2464a +++ pcre/pcre_get.c d1400b33a0738dc2fd25f675c09017c1008c2df5 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_globals.c 3cf49201069daca47dc593a2ef160fbb13610a69 +++ pcre/pcre_globals.c 8fe626d0db539f06b1161166b7c434178c2392b0 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_info.c 004e534421480865060b938b75561b8e523beb2b +++ pcre/pcre_info.c b767abb2c7478d4dfd810e8dad698086881d9166 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_internal.h 787e957bffa8995e75e15a2a1c17befc5d570cdc +++ pcre/pcre_internal.h 4149f246bdadbb3b67a854df4c382c25531eb976 @@ -7,7 +7,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -363,6 +363,7 @@ support is omitted, we don't even define support is omitted, we don't even define it. */ #ifndef SUPPORT_UTF8 +#define NEXTCHAR(p) p++; #define GETCHAR(c, eptr) c = *eptr; #define GETCHARTEST(c, eptr) c = *eptr; #define GETCHARINC(c, eptr) c = *eptr++; @@ -372,6 +373,13 @@ support is omitted, we don't even define #else /* SUPPORT_UTF8 */ +/* Advance a character pointer one byte in non-UTF-8 mode and by one character +in UTF-8 mode. */ + +#define NEXTCHAR(p) \ + p++; \ + if (utf8) { while((*p & 0xc0) == 0x80) p++; } + /* Get the next UTF-8 character, not advancing the pointer. This is called when we know we are in UTF-8 mode. */ @@ -871,7 +879,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49, ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, - ERR60, ERR61 }; + ERR60, ERR61, ERR62, ERR63 }; /* The real format of the start of the pcre block; the index of names and the code vector run on as long as necessary after the end. We store an explicit @@ -934,7 +942,8 @@ typedef struct compile_data { uschar *name_table; /* The name/number table */ int names_found; /* Number of entries so far */ int name_entry_size; /* Size of each entry */ - int bracount; /* Count of capturing parens */ + int bracount; /* Count of capturing parens as we compile */ + int final_bracount; /* Saved value after first pass */ int top_backref; /* Maximum back reference */ unsigned int backref_map; /* Bitmap of low back refs */ int external_options; /* External (initial) options */ @@ -1036,7 +1045,7 @@ typedef struct dfa_match_data { #define ctype_letter 0x02 #define ctype_digit 0x04 #define ctype_xdigit 0x08 -#define ctype_word 0x10 /* alphameric or '_' */ +#define ctype_word 0x10 /* alphanumeric or '_' */ #define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ /* Offsets for the bitmap tables in pcre_cbits. Each table contains a set ============================================================ --- pcre/pcre_maketables.c a5231ea973f291c3fe8f7f44534028794a3bb1da +++ pcre/pcre_maketables.c 8036b1f3772cf076c761fb8bbaaabb312d681e59 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_newline.c 52667cdf33813f8c161638c91b14813f0aceeb21 +++ pcre/pcre_newline.c 88f9b74f1dcfab4da15e7ca2e0acc76deded42a7 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_ord2utf8.c e2da5e11be19beab7cbe98fc4f1200438a4612f2 +++ pcre/pcre_ord2utf8.c dfa43ef059a1d075f09a82e402836d1980d695b1 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_refcount.c 84e42bff9f54245918ff28b8e8fb23dc53fb0db9 +++ pcre/pcre_refcount.c 2b18333691e83b9a3745bb18688e7a38f864a3ab @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_study.c 29605e98e732f8139fd1fedc6a5d7de268add456 +++ pcre/pcre_study.c 43df641947553eec2c8487b9b42cdc6ad2c5a86c @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_tables.c 43b929d5086b991efc569e2d3fe2924fde8e7009 +++ pcre/pcre_tables.c 556d518067a568f8e9f8326d70c8207f7db0efc9 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_try_flipped.c 2d7f11db16127e769a87613dbb38ba1959a89c5c +++ pcre/pcre_try_flipped.c 194ea39ba5e0cc8cad7c9571b2fe39a607d68a17 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_ucp_searchfuncs.c bd92f7801af94ebe492b49be93a02fa992de0fdf +++ pcre/pcre_ucp_searchfuncs.c da98ce81b5a387c0240a1d4c4fc571957f83a340 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_valid_utf8.c c587b5e870e25985bca0d58a189d7d5fca4a4a29 +++ pcre/pcre_valid_utf8.c f4354314ba53b3caaec709d8aa4868bd387530fc @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -60,7 +60,7 @@ the canonical format. Once somebody had Originally, this function checked according to RFC 2279, allowing for values in the range 0 to 0x7fffffff, up to 6 bytes long, but ensuring that they were in the canonical format. Once somebody had pointed out RFC 3629 to me (it -obsoletes 2279), additional restrictions were applies. The values are now +obsoletes 2279), additional restrictions were applied. The values are now limited to be between 0 and 0x0010ffff, no more than 4 bytes long, and the subrange 0xd000 to 0xdfff is excluded. ============================================================ --- pcre/pcre_version.c 97e12b4b30fc68214564f746963f1701528925a7 +++ pcre/pcre_version.c 97d0df5b29a822927867080761143b73b95538ff @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcre_xclass.c b9a3ce19007386f9fb242cd8396ca94efaa29b5d +++ pcre/pcre_xclass.c a62818c3e4c06be6a798b02a9cacfe443ca7e6d8 @@ -6,7 +6,7 @@ and semantics are as close as possible t and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2007 University of Cambridge + Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without ============================================================ --- pcre/pcresyntax.texi a5c795d675697cc91f001cc242cb717e34bcbcac +++ pcre/pcresyntax.texi 6a09cf8810f16624ffa083e803b9f9a84bb0dbfa @@ -285,7 +285,7 @@ @subsubheading Character Classes range (can be used for hex characters) @item [[:@var{xxx}:]] positive POSIX named set address@hidden [[^:@var{xxx}:]] address@hidden [[:address@hidden:]] negative POSIX named set @item alnum ============================================================ --- pcre/ucptable.h 665475a65598de16193f595e4ec78d84b9059662 +++ pcre/ucptable.h 531d05f34d19eb6abea2d771f266eea7f2c8e574 @@ -539,7 +539,8 @@ static const cnode ucp_table[] = { { 0x21000293, 0x14000000 }, { 0x21000294, 0x1c000000 }, { 0x21800295, 0x1400001a }, - { 0x218002b0, 0x18000011 }, + { 0x218002b0, 0x18000008 }, + { 0x098002b9, 0x18000008 }, { 0x098002c2, 0x60000003 }, { 0x098002c6, 0x1800000b }, { 0x098002d2, 0x6000000d }, @@ -1039,15 +1040,18 @@ static const cnode ucp_table[] = { { 0x198005f3, 0x54000001 }, { 0x09800600, 0x04000003 }, { 0x0000060b, 0x5c000000 }, - { 0x0980060c, 0x54000001 }, + { 0x0900060c, 0x54000000 }, + { 0x0000060d, 0x54000000 }, { 0x0080060e, 0x68000001 }, { 0x00800610, 0x30000005 }, { 0x0900061b, 0x54000000 }, - { 0x0080061e, 0x54000001 }, + { 0x0000061e, 0x54000000 }, + { 0x0900061f, 0x54000000 }, { 0x00800621, 0x1c000019 }, { 0x09000640, 0x18000000 }, { 0x00800641, 0x1c000009 }, - { 0x1b80064b, 0x30000013 }, + { 0x1b80064b, 0x3000000a }, + { 0x00800656, 0x30000008 }, { 0x09800660, 0x34000009 }, { 0x0080066a, 0x54000003 }, { 0x0080066e, 0x1c000001 }, @@ -1074,7 +1078,8 @@ static const cnode ucp_table[] = { { 0x31000711, 0x30000000 }, { 0x31800712, 0x1c00001d }, { 0x31800730, 0x3000001a }, - { 0x3180074d, 0x1c000020 }, + { 0x3180074d, 0x1c000002 }, + { 0x00800750, 0x1c00001d }, { 0x37800780, 0x1c000025 }, { 0x378007a6, 0x3000000a }, { 0x370007b1, 0x1c000000 }, @@ -1460,7 +1465,10 @@ static const cnode ucp_table[] = { { 0x1f0017dd, 0x30000000 }, { 0x1f8017e0, 0x34000009 }, { 0x1f8017f0, 0x3c000009 }, - { 0x25801800, 0x54000005 }, + { 0x25801800, 0x54000001 }, + { 0x09801802, 0x54000001 }, + { 0x25001804, 0x54000000 }, + { 0x09001805, 0x54000000 }, { 0x25001806, 0x44000000 }, { 0x25801807, 0x54000003 }, { 0x2580180b, 0x30000002 }, @@ -1513,14 +1521,20 @@ static const cnode ucp_table[] = { { 0x3d801b61, 0x68000009 }, { 0x3d801b6b, 0x30000008 }, { 0x3d801b74, 0x68000008 }, - { 0x21801d00, 0x1400002b }, - { 0x21801d2c, 0x18000035 }, - { 0x21801d62, 0x14000015 }, + { 0x21801d00, 0x14000025 }, + { 0x13801d26, 0x14000004 }, + { 0x0c001d2b, 0x14000000 }, + { 0x21801d2c, 0x18000030 }, + { 0x13801d5d, 0x18000004 }, + { 0x21801d62, 0x14000003 }, + { 0x13801d66, 0x14000004 }, + { 0x21801d6b, 0x1400000c }, { 0x0c001d78, 0x18000000 }, { 0x21801d79, 0x14000003 }, { 0x21001d7d, 0x14000ee6 }, { 0x21801d7e, 0x1400001c }, - { 0x21801d9b, 0x18000024 }, + { 0x21801d9b, 0x18000023 }, + { 0x13001dbf, 0x18000000 }, { 0x1b801dc0, 0x3000000a }, { 0x1b801dfe, 0x30000001 }, { 0x21001e00, 0x24000001 }, @@ -1982,7 +1996,9 @@ static const cnode ucp_table[] = { { 0x13001ffc, 0x2000fff7 }, { 0x13801ffd, 0x60000001 }, { 0x09802000, 0x7400000a }, - { 0x0980200b, 0x04000004 }, + { 0x0900200b, 0x04000000 }, + { 0x1b80200c, 0x04000001 }, + { 0x0980200e, 0x04000001 }, { 0x09802010, 0x44000005 }, { 0x09802016, 0x54000001 }, { 0x09002018, 0x50000000 }, @@ -2615,7 +2631,8 @@ static const cnode ucp_table[] = { { 0x090030a0, 0x44000000 }, { 0x1d8030a1, 0x1c000059 }, { 0x090030fb, 0x54000000 }, - { 0x098030fc, 0x18000002 }, + { 0x090030fc, 0x18000000 }, + { 0x1d8030fd, 0x18000001 }, { 0x1d0030ff, 0x1c000000 }, { 0x03803105, 0x1c000027 }, { 0x17803131, 0x1c00005d }, @@ -2630,7 +2647,8 @@ static const cnode ucp_table[] = { { 0x0980322a, 0x68000019 }, { 0x09003250, 0x68000000 }, { 0x09803251, 0x3c00000e }, - { 0x17803260, 0x6800001f }, + { 0x17803260, 0x6800001d }, + { 0x0980327e, 0x68000001 }, { 0x09803280, 0x3c000009 }, { 0x0980328a, 0x68000026 }, { 0x098032b1, 0x3c00000e }, @@ -2678,7 +2696,8 @@ static const cnode ucp_table[] = { { 0x1900fb3e, 0x1c000000 }, { 0x1980fb40, 0x1c000001 }, { 0x1980fb43, 0x1c000001 }, - { 0x1980fb46, 0x1c00006b }, + { 0x1980fb46, 0x1c000009 }, + { 0x0080fb50, 0x1c000061 }, { 0x0080fbd3, 0x1c00016a }, { 0x0900fd3e, 0x58000000 }, { 0x0900fd3f, 0x48000000 }, @@ -2944,7 +2963,8 @@ static const cnode ucp_table[] = { { 0x0d01044d, 0x1400ffd8 }, { 0x0d01044e, 0x1400ffd8 }, { 0x0d01044f, 0x1400ffd8 }, - { 0x2e810450, 0x1c00004d }, + { 0x2e810450, 0x1c00002f }, + { 0x2c810480, 0x1c00001d }, { 0x2c8104a0, 0x34000009 }, { 0x0b810800, 0x1c000005 }, { 0x0b010808, 0x1c000000 }, ============================================================ --- tests/syntax_errors_in_.mtn-ignore/stderr-ref 6d982783b4455a358e195a462a8347cee1b41e83 +++ tests/syntax_errors_in_.mtn-ignore/stderr-ref 2d805e4050dd9908bf700c86907406767a729f4b @@ -12,7 +12,7 @@ - skipping this regex for all remaining files. .mtn-ignore:7: warning: error near char 1 of regex "*": nothing to repeat - skipping this regex for all remaining files. -.mtn-ignore:8: warning: error near char 3 of regex "(?h)": unrecognized character after (? +.mtn-ignore:8: warning: error near char 3 of regex "(?h)": unrecognized character after (? or (?- - skipping this regex for all remaining files. .mtn-ignore:9: warning: error near char 1 of regex "[:alpha:]": POSIX named classes are supported only within a class - skipping this regex for all remaining files.