diff --git a/.gitignore b/.gitignore index 858cbef..8858cd6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /pcre2-10.23.tar.bz2 +/pcre2-10.30.tar.bz2 diff --git a/mingw-pcre2.spec b/mingw-pcre2.spec index 364dc35..e0e4cac 100644 --- a/mingw-pcre2.spec +++ b/mingw-pcre2.spec @@ -3,8 +3,8 @@ %global pkgname pcre2 Name: mingw-%{pkgname} -Version: 10.23 -Release: 3%{?dist} +Version: 10.30 +Release: 1%{?dist} Summary: MinGW Windows %{pkgname} library License: BSD @@ -14,51 +14,6 @@ Source: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/%{pkgname}- ## Patches taken from native package ## # Do no set RPATH if libdir is not /usr/lib Patch0: pcre2-10.10-Fix-multilib.patch -# Handle memmory allocation failures in pcre2test tool, in upstream after 10.23 -Patch1: pcre2-10.23-Check-malloc-returns-in-pcre2test.patch -# Fix CVE-2017-7186 (a crash when finding a Unicode property for a character -# with a code point greater than 0x10ffff in UTF-32 library while UTF mode is -# disabled), upstream bug #2052, in upstream after 10.23 -Patch2: pcre2-10.23-Fix-32-bit-non-UTF-property-test-crash.patch -# Fix an internal error for a forward reference in a lookbehind with -# PCRE2_ANCHORED, # oss-fuzz bug #865, in upstream after 10.23 -Patch3: pcre2-10.23-Fix-crash-for-forward-reference-in-lookbehind-with-P.patch -# Fix a pcre2test bug for global match with zero terminated subject, -# upstream bug #2063, in upstream after 10.23 -Patch4: pcre2-10.23-Fix-pcre2test-bug-for-global-match-with-zero-termina.patch -# Close serialization file in pcre2test after any error, upstream bug #2074, -# in upstream after 10.23 -Patch5: pcre2-10.23-Close-serialization-file-in-pcre2test-after-any-erro.patch -# Fix a memory leak in pcre2_serialize_decode() when the input is invalid, -# upstream bug #2075, in upsream after 10.23. -Patch6: pcre2-10.23-Fix-memory-leak-when-deserializing-invalid-data-Bugz.patch -# Fix a potential NULL dereference in pcre2_callout_enumerate() if called with -# a NULL pattern pointer when Unicode support is available, upstream bug #2076, -# in upstream after 10.23 -Patch7: pcre2-10.23-Fix-NULL-deference-if-pcre2_callout_enumerate-is-cal.patch -# 1/2 Fix 32-bit error buffer size bug in pcre2test, upstream bug #2079, -# in upstream after 10.23 -Patch8: pcre2-10.23-Fix-32-bit-error-buffer-size-bug-in-pcre2test-Bugzil.patch -# 2/2 Fix 32-bit error buffer size bug in pcre2test, upstream bug #2079, -# in upstream after 10.23 -Patch9: pcre2-10.23-Previous-patch-was-not-quite-complete.patch -# Fix DFA match for a possessively repeated character class, upstream bug #2086, -# in upstream after 10.23 -Patch10: pcre2-10.23-Fix-misbehaving-DFA-match-for-possessively-repeated-.patch -# Use a memory allocator from the pattern if no context is supplied to -# pcre2_match(), in upsream after 10.23 -Patch11: pcre2-10.23-Fix-bug-introduced-at-10.21-use-memory-allocator-fro.patch -# Fix CVE-2017-7186 in JIT mode (a crash when finding a Unicode property for -# a character with a code point greater than 0x10ffff in UTF-32 library while -# UTF mode is disabled), bug #1434504, upstream bug #2052, -# in upstream after 10.23 -Patch12: pcre2-10.23-Fix-character-type-detection-when-32-bit-and-UCP-are.patch -# Fix an incorrect cast in UTF validation, upstream bug #2090, -# in upstream after 10.23 -Patch13: pcre2-10.23-Correct-an-incorrect-cast.patch -# Fix a pcre2test crash on multiple push statements, upstream bug #2109, -# in upstream after 10.23 -Patch14: pcre2-10.23-Fix-crash-when-more-than-one-kind-of-push-was-set-in.patch ## MinGW specific patches ## # Fix implicitly defined functions due to overly relaxed platform detection in macros @@ -181,7 +136,7 @@ chmod 0644 %{buildroot}%{mingw64_libdir}/*.dll.a %{mingw32_bindir}/libpcre2-8-0.dll %{mingw32_bindir}/libpcre2-16-0.dll %{mingw32_bindir}/libpcre2-32-0.dll -%{mingw32_bindir}/libpcre2-posix-1.dll +%{mingw32_bindir}/libpcre2-posix-2.dll %{mingw32_libdir}/libpcre2-8.dll.a %{mingw32_libdir}/libpcre2-16.dll.a %{mingw32_libdir}/libpcre2-32.dll.a @@ -206,7 +161,7 @@ chmod 0644 %{buildroot}%{mingw64_libdir}/*.dll.a %{mingw64_bindir}/libpcre2-8-0.dll %{mingw64_bindir}/libpcre2-16-0.dll %{mingw64_bindir}/libpcre2-32-0.dll -%{mingw64_bindir}/libpcre2-posix-1.dll +%{mingw64_bindir}/libpcre2-posix-2.dll %{mingw64_libdir}/libpcre2-8.dll.a %{mingw64_libdir}/libpcre2-16.dll.a %{mingw64_libdir}/libpcre2-32.dll.a @@ -224,6 +179,9 @@ chmod 0644 %{buildroot}%{mingw64_libdir}/*.dll.a %changelog +* Tue Aug 15 2017 Sandro Mani - 10.30-1 +- Update to 10.30 + * Wed Jul 26 2017 Fedora Release Engineering - 10.23-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild diff --git a/pcre2-10.23-Check-malloc-returns-in-pcre2test.patch b/pcre2-10.23-Check-malloc-returns-in-pcre2test.patch deleted file mode 100644 index d42232a..0000000 --- a/pcre2-10.23-Check-malloc-returns-in-pcre2test.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 86c1fb487cd84b1971d4446e58ddb1602c95fdc3 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Thu, 23 Feb 2017 17:05:43 +0000 -Subject: [PATCH] Check malloc returns in pcre2test. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@669 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. ---- - ChangeLog | 9 +++++++++ - configure.ac | 6 +++--- - src/pcre2.h | 6 +++--- - src/pcre2test.c | 22 +++++++++++++++++++--- - testdata/testinput2 | 3 +++ - testdata/testoutput2 | 4 ++++ - 6 files changed, 41 insertions(+), 9 deletions(-) - -diff --git a/src/pcre2test.c b/src/pcre2test.c -index 241c22c..01457e8 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -1365,8 +1365,7 @@ are supported. */ - (test_mode == PCRE8_MODE && G(x,8)->f r (y)) || \ - (test_mode == PCRE16_MODE && G(x,16)->f r (y)) || \ - (test_mode == PCRE32_MODE && G(x,32)->f r (y))) -- -- -+ - - /* ----- Two out of three modes are supported ----- */ - -@@ -1775,7 +1774,7 @@ the three different cases. */ - #define TESTFLD(x,f,r,y) ( \ - (test_mode == G(G(PCRE,BITONE),_MODE) && G(x,BITONE)->f r (y)) || \ - (test_mode == G(G(PCRE,BITTWO),_MODE) && G(x,BITTWO)->f r (y))) -- -+ - - #endif /* Two out of three modes */ - -@@ -6169,7 +6168,16 @@ if ((pat_patctl.control & CTL_POSIX) != 0) - if (msg[0] == 0) fprintf(outfile, "\n"); - - if (dat_datctl.oveccount > 0) -+ { - pmatch = (regmatch_t *)malloc(sizeof(regmatch_t) * dat_datctl.oveccount); -+ if (pmatch == NULL) -+ { -+ fprintf(outfile, "** Failed to get memory for recording matching " -+ "information (size set = %du)\n", dat_datctl.oveccount); -+ return PR_OK; -+ } -+ } -+ - if ((dat_datctl.options & PCRE2_NOTBOL) != 0) eflags |= REG_NOTBOL; - if ((dat_datctl.options & PCRE2_NOTEOL) != 0) eflags |= REG_NOTEOL; - if ((dat_datctl.options & PCRE2_NOTEMPTY) != 0) eflags |= REG_NOTEMPTY; -@@ -6305,6 +6313,14 @@ else - PCRE2_MATCH_DATA_CREATE(match_data, max_oveccount, NULL); - } - -+if (CASTVAR(void *, match_data) == NULL) -+ { -+ fprintf(outfile, "** Failed to get memory for recording matching " -+ "information (size requested: %d)\n", dat_datctl.oveccount); -+ max_oveccount = 0; -+ return PR_OK; -+ } -+ - /* Replacement processing is ignored for DFA matching. */ - - if (dat_datctl.replacement[0] != 0 && (dat_datctl.control & CTL_DFA) != 0) -diff --git a/testdata/testinput2 b/testdata/testinput2 -index a700d5a..921d83c 100644 ---- a/testdata/testinput2 -+++ b/testdata/testinput2 -@@ -4969,4 +4969,7 @@ a)"xI - - /(?a)(?b)\g{b}\g{a}\g{a}\g{a}\g{a}(?xx)(?zz)/I,dupnames - -+// -+ \=ovector=7777777777 -+ - # End of testinput2 -diff --git a/testdata/testoutput2 b/testdata/testoutput2 -index ce8c667..9862ea3 100644 ---- a/testdata/testoutput2 -+++ b/testdata/testoutput2 -@@ -15479,6 +15479,10 @@ First code unit = 'a' - Last code unit = 'z' - Subject length lower bound = 11 - -+// -+ \=ovector=7777777777 -+** Invalid value in 'ovector=7777777777' -+ - # End of testinput2 - Error -63: PCRE2_ERROR_BADDATA (unknown error number) - Error -62: bad serialized data --- -2.7.4 - diff --git a/pcre2-10.23-Close-serialization-file-in-pcre2test-after-any-erro.patch b/pcre2-10.23-Close-serialization-file-in-pcre2test-after-any-erro.patch deleted file mode 100644 index edc52f0..0000000 --- a/pcre2-10.23-Close-serialization-file-in-pcre2test-after-any-erro.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 23f3fd65eb57bdaa03701177bbd2043a08a3299e Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Tue, 21 Mar 2017 16:18:54 +0000 -Subject: [PATCH] Close serialization file in pcre2test after any error. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@692 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.32. - -diff --git a/src/pcre2test.c b/src/pcre2test.c -index 39eedbe..b6d3ec9 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -4456,6 +4456,7 @@ switch(cmd) - if (rc < 0) - { - serial_error(rc, "Serialization"); -+ fclose(f); - break; - } - -@@ -4469,6 +4470,7 @@ switch(cmd) - if (fwrite(serial, 1, serial_size, f) != serial_size) - { - fprintf(outfile, "** Wrong return from fwrite()\n"); -+ fclose(f); - return PR_ABEND; - } - -@@ -4496,6 +4498,7 @@ switch(cmd) - { - fprintf(outfile, "** Failed to get memory (size %lu) for #load\n", - (unsigned long int)serial_size); -+ fclose(f); - return PR_ABEND; - } - -@@ -4503,6 +4506,7 @@ switch(cmd) - { - fprintf(outfile, "** Wrong return from fread()\n"); - free(serial); -+ fclose(f); - return PR_ABEND; - } - fclose(f); --- -2.7.4 - diff --git a/pcre2-10.23-Correct-an-incorrect-cast.patch b/pcre2-10.23-Correct-an-incorrect-cast.patch deleted file mode 100644 index 02d6dbf..0000000 --- a/pcre2-10.23-Correct-an-incorrect-cast.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 8ac12aa2c80b1a5eec8fdafa66611c8c7cde5af7 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Fri, 14 Apr 2017 12:14:41 +0000 -Subject: [PATCH] Correct an incorrect cast. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@748 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. ---- - src/pcre2_valid_utf.c | 8 ++++---- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/src/pcre2_valid_utf.c b/src/pcre2_valid_utf.c -index 3e18f12..96e8bff 100644 ---- a/src/pcre2_valid_utf.c -+++ b/src/pcre2_valid_utf.c -@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge -- New API code Copyright (c) 2016 University of Cambridge -+ New API code Copyright (c) 2016-2017 University of Cambridge - - ----------------------------------------------------------------------------- - Redistribution and use in source and binary forms, with or without -@@ -142,20 +142,20 @@ for (p = string; length > 0; p++) - - if (c < 0xc0) /* Isolated 10xx xxxx byte */ - { -- *erroroffset = (int)(p - string); -+ *erroroffset = (PCRE2_SIZE)(p - string); - return PCRE2_ERROR_UTF8_ERR20; - } - - if (c >= 0xfe) /* Invalid 0xfe or 0xff bytes */ - { -- *erroroffset = (int)(p - string); -+ *erroroffset = (PCRE2_SIZE)(p - string); - return PCRE2_ERROR_UTF8_ERR21; - } - - ab = PRIV(utf8_table4)[c & 0x3f]; /* Number of additional bytes (1-5) */ - if (length < ab) /* Missing bytes */ - { -- *erroroffset = (int)(p - string); -+ *erroroffset = (PCRE2_SIZE)(p - string); - switch(ab - length) - { - case 1: return PCRE2_ERROR_UTF8_ERR1; --- -2.7.4 - diff --git a/pcre2-10.23-Fix-32-bit-error-buffer-size-bug-in-pcre2test-Bugzil.patch b/pcre2-10.23-Fix-32-bit-error-buffer-size-bug-in-pcre2test-Bugzil.patch deleted file mode 100644 index b0bf21e..0000000 --- a/pcre2-10.23-Fix-32-bit-error-buffer-size-bug-in-pcre2test-Bugzil.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 85f8f579ac7aa268290ed7bd3aca90d927a9b7e9 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Tue, 21 Mar 2017 17:46:21 +0000 -Subject: [PATCH 1/2] Fix 32-bit error buffer size bug in pcre2test (Bugzilla - 2079). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@696 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. ---- - doc/pcre2api.3 | 10 +++++----- - src/pcre2_error.c | 2 +- - src/pcre2test.c | 7 ++++--- - testdata/testinput2 | 2 ++ - testdata/testoutput2 | 3 +++ - -diff --git a/doc/pcre2api.3 b/doc/pcre2api.3 -index e0a434a..0a3d2ee 100644 ---- a/doc/pcre2api.3 -+++ b/doc/pcre2api.3 -@@ -1,4 +1,4 @@ --.TH PCRE2API 3 "24 December 2016" "PCRE2 10.23" -+.TH PCRE2API 3 "21 March 2017" "PCRE2 10.30" - .SH NAME - PCRE2 - Perl-compatible regular expressions (revised API) - .sp -@@ -2633,8 +2633,8 @@ The internal recursion limit was reached. - A text message for an error code from any PCRE2 function (compile, match, or - auxiliary) can be obtained by calling \fBpcre2_get_error_message()\fP. The code - is passed as the first argument, with the remaining two arguments specifying a --code unit buffer and its length, into which the text message is placed. Note --that the message is returned in code units of the appropriate width for the -+code unit buffer and its length in code units, into which the text message is -+placed. The message is returned in code units of the appropriate width for the - library that is being used. - .P - The returned message is terminated with a trailing zero, and the function -@@ -3321,6 +3321,6 @@ Cambridge, England. - .rs - .sp - .nf --Last updated: 23 December 2016 --Copyright (c) 1997-2016 University of Cambridge. -+Last updated: 21 March 2017 -+Copyright (c) 1997-2017 University of Cambridge. - .fi -diff --git a/src/pcre2_error.c b/src/pcre2_error.c -index 9eab4fc..e25c7e6 100644 ---- a/src/pcre2_error.c -+++ b/src/pcre2_error.c -@@ -271,7 +271,7 @@ distinct. - Arguments: - enumber error number - buffer where to put the message (zero terminated) -- size size of the buffer -+ size size of the buffer in code units - - Returns: length of message if all is well - negative on error -diff --git a/src/pcre2test.c b/src/pcre2test.c -index b6d3ec9..9289656 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -2889,7 +2889,7 @@ if (pbuffer32_size < 4*len + 4) - { - if (pbuffer32 != NULL) free(pbuffer32); - pbuffer32_size = 4*len + 4; -- if (pbuffer32_size < 256) pbuffer32_size = 256; -+ if (pbuffer32_size < 512) pbuffer32_size = 512; - pbuffer32 = (uint32_t *)malloc(pbuffer32_size); - if (pbuffer32 == NULL) - { -@@ -7600,7 +7600,8 @@ if (arg_error != NULL) - int errcode; - char *endptr; - --/* Ensure the relevant non-8-bit buffer is available. */ -+/* Ensure the relevant non-8-bit buffer is available. Ensure that it is at -+least 128 code units, because it is used for retrieving error messages. */ - - #ifdef SUPPORT_PCRE2_16 - if (test_mode == PCRE16_MODE) -@@ -7620,7 +7621,7 @@ if (arg_error != NULL) - #ifdef SUPPORT_PCRE2_32 - if (test_mode == PCRE32_MODE) - { -- pbuffer32_size = 256; -+ pbuffer32_size = 512; - pbuffer32 = (uint32_t *)malloc(pbuffer32_size); - if (pbuffer32 == NULL) - { -diff --git a/testdata/testinput2 b/testdata/testinput2 -index 5a77e88..d62e975 100644 ---- a/testdata/testinput2 -+++ b/testdata/testinput2 -@@ -5017,4 +5017,6 @@ a)"xI - - /(? -Date: Fri, 24 Feb 2017 18:25:32 +0000 -Subject: [PATCH] Fix 32-bit non-UTF property test crash. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@670 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. - -diff --git a/src/pcre2_internal.h b/src/pcre2_internal.h -index 6a8774c..720bbc9 100644 ---- a/src/pcre2_internal.h -+++ b/src/pcre2_internal.h -@@ -1774,10 +1774,17 @@ typedef struct { - /* UCD access macros */ - - #define UCD_BLOCK_SIZE 128 --#define GET_UCD(ch) (PRIV(ucd_records) + \ -+#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \ - PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \ - UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE]) - -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+#define GET_UCD(ch) ((ch > MAX_UTF_CODE_POINT)? \ -+ PRIV(dummy_ucd_record) : REAL_GET_UCD(ch)) -+#else -+#define GET_UCD(ch) REAL_GET_UCD(ch) -+#endif -+ - #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype - #define UCD_SCRIPT(ch) GET_UCD(ch)->script - #define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] -@@ -1834,6 +1841,9 @@ extern const uint8_t PRIV(utf8_table4)[]; - #define _pcre2_default_compile_context PCRE2_SUFFIX(_pcre2_default_compile_context_) - #define _pcre2_default_match_context PCRE2_SUFFIX(_pcre2_default_match_context_) - #define _pcre2_default_tables PCRE2_SUFFIX(_pcre2_default_tables_) -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+#define _pcre2_dummy_ucd_record PCRE2_SUFFIX(_pcre2_dummy_ucd_record_) -+#endif - #define _pcre2_hspace_list PCRE2_SUFFIX(_pcre2_hspace_list_) - #define _pcre2_vspace_list PCRE2_SUFFIX(_pcre2_vspace_list_) - #define _pcre2_ucd_caseless_sets PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_) -@@ -1858,6 +1868,9 @@ extern const uint32_t PRIV(hspace_list)[]; - extern const uint32_t PRIV(vspace_list)[]; - extern const uint32_t PRIV(ucd_caseless_sets)[]; - extern const ucd_record PRIV(ucd_records)[]; -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+extern const ucd_record PRIV(dummy_ucd_record)[]; -+#endif - extern const uint8_t PRIV(ucd_stage1)[]; - extern const uint16_t PRIV(ucd_stage2)[]; - extern const uint32_t PRIV(ucp_gbtable)[]; -diff --git a/src/pcre2_ucd.c b/src/pcre2_ucd.c -index 116f537..56aa29d 100644 ---- a/src/pcre2_ucd.c -+++ b/src/pcre2_ucd.c -@@ -41,6 +41,20 @@ const uint32_t PRIV(ucd_caseless_sets)[] = {0}; - - const char *PRIV(unicode_version) = "8.0.0"; - -+/* If the 32-bit library is run in non-32-bit mode, character values -+greater than 0x10ffff may be encountered. For these we set up a -+special record. */ -+ -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+const ucd_record PRIV(dummy_ucd_record)[] = {{ -+ ucp_Common, /* script */ -+ ucp_Cn, /* type unassigned */ -+ ucp_gbOther, /* grapheme break property */ -+ 0, /* case set */ -+ 0, /* other case */ -+ }}; -+#endif -+ - /* When recompiling tables with a new Unicode version, please check the - types in this structure definition from pcre2_internal.h (the actual - field names will be different): -diff --git a/testdata/testinput12 b/testdata/testinput12 -index c3b2bfc..decfe82 100644 ---- a/testdata/testinput12 -+++ b/testdata/testinput12 -@@ -360,4 +360,7 @@ - - /[\s[:^ascii:]]/B,ucp - -+/\pP/ucp -+ \x{7fffffff}\=no_jit -+ - # End of testinput12 -diff --git a/testdata/testoutput12-16 b/testdata/testoutput12-16 -index 3b5a0cd..41e0a48 100644 ---- a/testdata/testoutput12-16 -+++ b/testdata/testoutput12-16 -@@ -1415,4 +1415,10 @@ No match - End - ------------------------------------------------------------------ - -+/\pP/ucp -+ \x{7fffffff}\=no_jit -+** Character \x{7fffffff} is greater than 0xffff and UTF-16 mode is not enabled. -+** Truncation will probably give the wrong result. -+No match -+ - # End of testinput12 -diff --git a/testdata/testoutput12-32 b/testdata/testoutput12-32 -index 1496159..e9130b9 100644 ---- a/testdata/testoutput12-32 -+++ b/testdata/testoutput12-32 -@@ -1409,4 +1409,8 @@ No match - End - ------------------------------------------------------------------ - -+/\pP/ucp -+ \x{7fffffff}\=no_jit -+No match -+ - # End of testinput12 --- -2.7.4 - diff --git a/pcre2-10.23-Fix-NULL-deference-if-pcre2_callout_enumerate-is-cal.patch b/pcre2-10.23-Fix-NULL-deference-if-pcre2_callout_enumerate-is-cal.patch deleted file mode 100644 index 4e3afb1..0000000 --- a/pcre2-10.23-Fix-NULL-deference-if-pcre2_callout_enumerate-is-cal.patch +++ /dev/null @@ -1,37 +0,0 @@ -From d5790ad94d486405ecaac3d8f5796f642e57bf06 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Tue, 21 Mar 2017 16:31:54 +0000 -Subject: [PATCH] Fix NULL deference if pcre2_callout_enumerate() is called - with a NULL pattern when Unicode support is available (Bugzilla 2076). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@694 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. - -diff --git a/src/pcre2_pattern_info.c b/src/pcre2_pattern_info.c -index 0392a0b..5dd8ac5 100644 ---- a/src/pcre2_pattern_info.c -+++ b/src/pcre2_pattern_info.c -@@ -261,11 +261,15 @@ pcre2_real_code *re = (pcre2_real_code *)code; - pcre2_callout_enumerate_block cb; - PCRE2_SPTR cc; - #ifdef SUPPORT_UNICODE --BOOL utf = (re->overall_options & PCRE2_UTF) != 0; -+BOOL utf; - #endif - - if (re == NULL) return PCRE2_ERROR_NULL; - -+#ifdef SUPPORT_UNICODE -+utf = (re->overall_options & PCRE2_UTF) != 0; -+#endif -+ - /* Check that the first field in the block is the magic number. If it is not, - return with PCRE2_ERROR_BADMAGIC. */ - --- -2.7.4 - diff --git a/pcre2-10.23-Fix-bug-introduced-at-10.21-use-memory-allocator-fro.patch b/pcre2-10.23-Fix-bug-introduced-at-10.21-use-memory-allocator-fro.patch deleted file mode 100644 index 9c55057..0000000 --- a/pcre2-10.23-Fix-bug-introduced-at-10.21-use-memory-allocator-fro.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 51b522c0120d061f54317f8a1cede05328c97aca Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Sat, 25 Mar 2017 15:19:49 +0000 -Subject: [PATCH] Fix bug introduced at 10.21: use memory allocator from the - pattern if no context is supplied to pcre2_match(). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Ported to 10.23: - -commit 1b7e16d584f0560dd84d2a3260cf08e1a86cccc1 -Author: ph10 -Date: Sat Mar 25 15:19:49 2017 +0000 - - Fix bug introduced at 10.21: use memory allocator from the pattern if no - context is supplied to pcre2_match(). - - git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@707 6239d852-aaf2-0410-a92c- -79f79f948069 - -Signed-off-by: Petr Písař ---- - src/pcre2_match.c | 18 ++++++++++-------- - 1 file changed, 10 insertions(+), 8 deletions(-) - -diff --git a/src/pcre2_match.c b/src/pcre2_match.c -index 78a9bac..52bb843 100644 ---- a/src/pcre2_match.c -+++ b/src/pcre2_match.c -@@ -6518,11 +6518,6 @@ options |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1))); - #undef FF - #undef OO - --/* A NULL match context means "use a default context" */ -- --if (mcontext == NULL) -- mcontext = (pcre2_match_context *)(&PRIV(default_match_context)); -- - /* These two settings are used in the code for checking a UTF string that - follows immediately afterwards. Other values in the mb block are used only - during interpretive pcre_match() processing, not when the JIT support is in -@@ -6590,7 +6585,7 @@ if (utf && (options & PCRE2_NO_UTF_CHECK) == 0) - /* It is an error to set an offset limit without setting the flag at compile - time. */ - --if (mcontext->offset_limit != PCRE2_UNSET && -+if (mcontext != NULL && mcontext->offset_limit != PCRE2_UNSET && - (re->overall_options & PCRE2_USE_OFFSET_LIMIT) == 0) - return PCRE2_ERROR_BADOFFSETLIMIT; - -@@ -6609,7 +6604,15 @@ if (re->executable_jit != NULL && (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0) - } - #endif - --/* Carry on with non-JIT matching. */ -+/* Carry on with non-JIT matching. A NULL match context means "use a default -+context", but we take the memory control functions from the pattern. */ -+ -+if (mcontext == NULL) -+ { -+ mcontext = (pcre2_match_context *)(&PRIV(default_match_context)); -+ mb->memctl = re->memctl; -+ } -+else mb->memctl = mcontext->memctl; - - anchored = ((re->overall_options | options) & PCRE2_ANCHORED) != 0; - firstline = (re->overall_options & PCRE2_FIRSTLINE) != 0; -@@ -6621,7 +6624,6 @@ bumpalong_limit = (mcontext->offset_limit == PCRE2_UNSET)? - - mb->callout = mcontext->callout; - mb->callout_data = mcontext->callout_data; --mb->memctl = mcontext->memctl; - #ifdef HEAP_MATCH_RECURSE - mb->stack_memctl = mcontext->stack_memctl; - #endif --- -2.7.4 - diff --git a/pcre2-10.23-Fix-character-type-detection-when-32-bit-and-UCP-are.patch b/pcre2-10.23-Fix-character-type-detection-when-32-bit-and-UCP-are.patch deleted file mode 100644 index 29ee73d..0000000 --- a/pcre2-10.23-Fix-character-type-detection-when-32-bit-and-UCP-are.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 749c2eb6994ee26c1fcf1eb7b57faf5c84e9878b Mon Sep 17 00:00:00 2001 -From: zherczeg -Date: Fri, 31 Mar 2017 05:40:37 +0000 -Subject: [PATCH] Fix character type detection when 32-bit and UCP are enabled - but UTF is not in JIT. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@720 6239d852-aaf2-0410-a92c-79f79f948069 -Signed-off-by: Petr Písař ---- - src/pcre2_jit_compile.c | 31 +++++++++++++++++++++++++++++++ - testdata/testinput12 | 2 +- - testdata/testoutput12-16 | 2 +- - testdata/testoutput12-32 | 2 +- - 4 files changed, 34 insertions(+), 3 deletions(-) - -diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c -index 846510a..e93143d 100644 ---- a/src/pcre2_jit_compile.c -+++ b/src/pcre2_jit_compile.c -@@ -588,6 +588,8 @@ the start pointers when the end of the capturing group has not yet reached. */ - - #define READ_CHAR_MAX 0x7fffffff - -+#define INVALID_UTF_CHAR 888 -+ - static PCRE2_SPTR bracketend(PCRE2_SPTR cc) - { - SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); -@@ -3558,10 +3560,30 @@ static void do_getucd(compiler_common *common) - /* Search the UCD record for the character comes in TMP1. - Returns chartype in TMP1 and UCD offset in TMP2. */ - DEFINE_COMPILER; -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+struct sljit_jump *jump; -+#endif -+ -+#if defined SLJIT_DEBUG && SLJIT_DEBUG -+/* dummy_ucd_record */ -+const ucd_record *record = GET_UCD(INVALID_UTF_CHAR); -+SLJIT_ASSERT(record->script == ucp_Common && record->chartype == ucp_Cn && record->gbprop == ucp_gbOther); -+SLJIT_ASSERT(record->caseset == 0 && record->other_case == 0); -+#endif - - SLJIT_ASSERT(UCD_BLOCK_SIZE == 128 && sizeof(ucd_record) == 8); - - sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -+ -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+if (!common->utf) -+ { -+ jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, MAX_UTF_CODE_POINT + 1); -+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -+ JUMPHERE(jump); -+ } -+#endif -+ - OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT); - OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1)); - OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK); -@@ -5969,6 +5991,15 @@ if (needstype || needsscript) - if (needschar && !charsaved) - OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); - -+#if PCRE2_CODE_UNIT_WIDTH == 32 -+ if (!common->utf) -+ { -+ jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, MAX_UTF_CODE_POINT + 1); -+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); -+ JUMPHERE(jump); -+ } -+#endif -+ - OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT); - OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1)); - OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK); -diff --git a/testdata/testinput12 b/testdata/testinput12 -index decfe82..cca5dfa 100644 ---- a/testdata/testinput12 -+++ b/testdata/testinput12 -@@ -361,6 +361,6 @@ - /[\s[:^ascii:]]/B,ucp - - /\pP/ucp -- \x{7fffffff}\=no_jit -+ \x{7fffffff} - - # End of testinput12 -diff --git a/testdata/testoutput12-16 b/testdata/testoutput12-16 -index 41e0a48..33b8a33 100644 ---- a/testdata/testoutput12-16 -+++ b/testdata/testoutput12-16 -@@ -1416,7 +1416,7 @@ No match - ------------------------------------------------------------------ - - /\pP/ucp -- \x{7fffffff}\=no_jit -+ \x{7fffffff} - ** Character \x{7fffffff} is greater than 0xffff and UTF-16 mode is not enabled. - ** Truncation will probably give the wrong result. - No match -diff --git a/testdata/testoutput12-32 b/testdata/testoutput12-32 -index e9130b9..1abeb59 100644 ---- a/testdata/testoutput12-32 -+++ b/testdata/testoutput12-32 -@@ -1410,7 +1410,7 @@ No match - ------------------------------------------------------------------ - - /\pP/ucp -- \x{7fffffff}\=no_jit -+ \x{7fffffff} - No match - - # End of testinput12 --- -2.7.4 - diff --git a/pcre2-10.23-Fix-crash-for-forward-reference-in-lookbehind-with-P.patch b/pcre2-10.23-Fix-crash-for-forward-reference-in-lookbehind-with-P.patch deleted file mode 100644 index ec8fa4a..0000000 --- a/pcre2-10.23-Fix-crash-for-forward-reference-in-lookbehind-with-P.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 9db78c678d82cc166f77b007e4834354ecf690bd Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Thu, 16 Mar 2017 17:17:47 +0000 -Subject: [PATCH] Fix crash for forward reference in lookbehind with - PCRE2_ANCHORED. Fixes oss-fuzz issue 865. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Ported to 10.23: - -commit a74ea02e5006bae4484b508b04a010e90c4dfdc2 -Author: ph10 -Date: Thu Mar 16 17:17:47 2017 +0000 - - Fix crash for forward reference in lookbehind with PCRE2_ANCHORED. Fixes - oss-fuzz issue 865. - - git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@681 6239d852-aaf2-0410-a92c-79f79f948069 - -Signed-off-by: Petr Písař ---- - src/pcre2_compile.c | 52 +++++++++++++++++++++++++++++++++++----------------- - testdata/testinput2 | 2 ++ - testdata/testoutput2 | 2 ++ - 3 files changed, 39 insertions(+), 17 deletions(-) - -diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c -index 6d98a68..26831d7 100644 ---- a/src/pcre2_compile.c -+++ b/src/pcre2_compile.c -@@ -8049,6 +8049,10 @@ the end of the branch, it is called to skip over an internal lookaround, and it - is also called to skip to the end of a class, during which it will never - encounter nested groups (but there's no need to have special code for that). - -+When called to find the end of a branch or group, pptr must point to the first -+meta code inside the branch, not the branch-starting code. In other cases it -+can point to the item that causes the function to be called. -+ - Arguments: - pptr current pointer to skip from - skiptype PSKIP_CLASS when skipping to end of class -@@ -8065,10 +8069,10 @@ parsed_skip(uint32_t *pptr, uint32_t skiptype) - { - uint32_t nestlevel = 0; - --for (pptr += 1;; pptr++) -+for (;; pptr++) - { - uint32_t meta = META_CODE(*pptr); -- -+ - switch(meta) - { - default: /* Just skip over most items */ -@@ -8160,11 +8164,12 @@ return pptr; - /* This is called for nested groups within a branch of a lookbehind whose - length is being computed. If all the branches in the nested group have the same - length, that is OK. On entry, the pointer must be at the first element after --the group initializing code. Caching is used to improve processing speed when --the same capturing group occurs many times. -+the group initializing code. On exit it points to OP_KET. Caching is used to -+improve processing speed when the same capturing group occurs many times. - - Arguments: - pptrptr pointer to pointer in the parsed pattern -+ isinline FALSE if a reference or recursion; TRUE for inline group - errcodeptr pointer to the errorcode - lcptr pointer to the loop counter - group number of captured group or -1 for a non-capturing group -@@ -8175,27 +8180,29 @@ Returns: the group length or a negative number - */ - - static int --get_grouplength(uint32_t **pptrptr, int *errcodeptr, int *lcptr, -+get_grouplength(uint32_t **pptrptr, BOOL isinline, int *errcodeptr, int *lcptr, - int group, parsed_recurse_check *recurses, compile_block *cb) - { - int branchlength; - int grouplength = -1; - - /* The cache can be used only if there is no possibility of there being two --groups with the same number. */ -+groups with the same number. We do not need to set the end pointer for a group -+that is being processed as a back reference or recursion, but we must do so for -+an inline group. */ - --if (group > 0) -+if (group > 0 && (cb->external_flags & PCRE2_DUPCAPUSED) == 0) - { - uint32_t groupinfo = cb->groupinfo[group]; -- if ((cb->external_flags & PCRE2_DUPCAPUSED) == 0) -+ if ((groupinfo & GI_NOT_FIXED_LENGTH) != 0) return -1; -+ if ((groupinfo & GI_SET_FIXED_LENGTH) != 0) - { -- if ((groupinfo & GI_NOT_FIXED_LENGTH) != 0) return -1; -- if ((groupinfo & GI_SET_FIXED_LENGTH) != 0) -- return groupinfo & GI_FIXED_LENGTH_MASK; -+ if (isinline) *pptrptr = parsed_skip(*pptrptr, PSKIP_KET); -+ return groupinfo & GI_FIXED_LENGTH_MASK; - } - } - --/* Scan the group */ -+/* Scan the group. In this case we find the end pointer of necessity. */ - - for(;;) - { -@@ -8353,11 +8360,12 @@ for (;; pptr++) - } - break; - -- /* Lookaheads can be ignored. */ -+ /* Lookaheads can be ignored, but we must start the skip inside the group -+ so that it isn't treated as a group within the branch. */ - - case META_LOOKAHEAD: - case META_LOOKAHEADNOT: -- pptr = parsed_skip(pptr, PSKIP_KET); -+ pptr = parsed_skip(pptr + 1, PSKIP_KET); - if (pptr == NULL) goto PARSED_SKIP_FAILED; - break; - -@@ -8455,15 +8463,24 @@ for (;; pptr++) - else if (*gptr == (META_CAPTURE | group)) break; - } - -- gptrend = parsed_skip(gptr, PSKIP_KET); -+ /* We must start the search for the end of the group at the first meta code -+ inside the group. Otherwise it will be treated as an enclosed group. */ -+ -+ gptrend = parsed_skip(gptr + 1, PSKIP_KET); - if (gptrend == NULL) goto PARSED_SKIP_FAILED; - if (pptr > gptr && pptr < gptrend) goto ISNOTFIXED; /* Local recursion */ - for (r = recurses; r != NULL; r = r->prev) if (r->groupptr == gptr) break; - if (r != NULL) goto ISNOTFIXED; /* Mutual recursion */ - this_recurse.prev = recurses; - this_recurse.groupptr = gptr; -+ -+ /* We do not need to know the position of the end of the group, that is, -+ gptr is not used after the call to get_grouplength(). Setting the second -+ argument FALSE stops it scanning for the end when the length can be found -+ in the cache. */ -+ - gptr++; -- grouplength = get_grouplength(&gptr, errcodeptr, lcptr, group, -+ grouplength = get_grouplength(&gptr, FALSE, errcodeptr, lcptr, group, - &this_recurse, cb); - if (grouplength < 0) - { -@@ -8500,7 +8517,8 @@ for (;; pptr++) - case META_NOCAPTURE: - pptr++; - CHECK_GROUP: -- grouplength = get_grouplength(&pptr, errcodeptr, lcptr, group, recurses, cb); -+ grouplength = get_grouplength(&pptr, TRUE, errcodeptr, lcptr, group, -+ recurses, cb); - if (grouplength < 0) return -1; - itemlength = grouplength; - break; -diff --git a/testdata/testinput2 b/testdata/testinput2 -index 921d83c..43692ea 100644 ---- a/testdata/testinput2 -+++ b/testdata/testinput2 -@@ -4972,4 +4972,6 @@ a)"xI - // - \=ovector=7777777777 - -+/(? -Date: Sat, 6 May 2017 16:56:07 +0000 -Subject: [PATCH] Fix crash when more than one kind of "push" was set in - pcre2test. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@767 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. ---- - src/pcre2test.c | 15 +++++++++------ - testdata/testinput20 | 44 ++++++++++++++++++++++++++------------------ - testdata/testoutput20 | 47 +++++++++++++++++++++++++++++------------------ - -diff --git a/src/pcre2test.c b/src/pcre2test.c -index a7fe7c0..cab604f 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -721,12 +721,15 @@ the first control word. Note that CTL_POSIX_NOSUB is always accompanied by - CTL_POSIX, so it doesn't need its own entries. */ - - static uint32_t exclusive_pat_controls[] = { -- CTL_POSIX | CTL_HEXPAT, -- CTL_POSIX | CTL_PUSH, -- CTL_POSIX | CTL_PUSHCOPY, -- CTL_POSIX | CTL_PUSHTABLESCOPY, -- CTL_POSIX | CTL_USE_LENGTH, -- CTL_EXPAND | CTL_HEXPAT }; -+ CTL_POSIX | CTL_HEXPAT, -+ CTL_POSIX | CTL_PUSH, -+ CTL_POSIX | CTL_PUSHCOPY, -+ CTL_POSIX | CTL_PUSHTABLESCOPY, -+ CTL_POSIX | CTL_USE_LENGTH, -+ CTL_PUSH | CTL_PUSHCOPY, -+ CTL_PUSH | CTL_PUSHTABLESCOPY, -+ CTL_PUSHCOPY | CTL_PUSHTABLESCOPY, -+ CTL_EXPAND | CTL_HEXPAT }; - - /* Data controls that are mutually exclusive. At present these are all in the - first control word. */ -diff --git a/testdata/testinput20 b/testdata/testinput20 -index c87a07e..71f39ae 100644 ---- a/testdata/testinput20 -+++ b/testdata/testinput20 -@@ -31,20 +31,20 @@ - #load testsaved2 - - #pop info -- foofoo -+ foofoo - barbar -- -+ - #pop mark - C --\= Expect no match -- D -- -+\= Expect no match -+ D -+ - #pop -- AmanaplanacanalPanama -+ AmanaplanacanalPanama - - #pop info - metcalfe 33 -- -+ - # Check for an error when different tables are used. - - /abc/push,tables=1 -@@ -59,30 +59,30 @@ - - #pop should give an error - pqr -- -+ - /abcd/pushcopy - abcd -- -+ - #pop -- abcd -+ abcd - - #pop should give an error - - /abcd/push - #popcopy - abcd -- -+ - #pop -- abcd -- -+ abcd -+ - /abcd/push - #save testsaved1 - #pop should give an error - - #load testsaved1 --#popcopy -+#popcopy - abcd -- -+ - #pop - abcd - -@@ -91,10 +91,18 @@ - /abcd/pushtablescopy - abcd - --#popcopy -+#popcopy - abcd -- -+ - #pop -- abcd -+ abcd -+ -+# Must only specify one of these -+ -+//push,pushcopy -+ -+//push,pushtablescopy -+ -+//pushcopy,pushtablescopy - - # End of testinput20 -diff --git a/testdata/testoutput20 b/testdata/testoutput20 -index db99866..d6265fd 100644 ---- a/testdata/testoutput20 -+++ b/testdata/testoutput20 -@@ -40,25 +40,25 @@ Named capturing subpatterns: - Options: dupnames - Starting code units: b f - Subject length lower bound = 6 -- foofoo -+ foofoo - 0: foofoo - 1: foo - barbar - 0: barbar - 1: - 2: bar -- -+ - #pop mark - C - 0: C - 1: C - MK: A --\= Expect no match -- D -+\= Expect no match -+ D - No match, mark = A -- -+ - #pop -- AmanaplanacanalPanama -+ AmanaplanacanalPanama - 0: AmanaplanacanalPanama - 1: - 2: -@@ -78,7 +78,7 @@ Subject length lower bound = 3 - 0: metcalfe 33 - 1: metcalfe - 2: 33 -- -+ - # Check for an error when different tables are used. - - /abc/push,tables=1 -@@ -97,13 +97,13 @@ Serialization failed: error -30: patterns do not all use the same character tabl - #pop should give an error - ** Can't pop off an empty stack - pqr -- -+ - /abcd/pushcopy - abcd - 0: abcd -- -+ - #pop -- abcd -+ abcd - 0: abcd - - #pop should give an error -@@ -113,21 +113,21 @@ Serialization failed: error -30: patterns do not all use the same character tabl - #popcopy - abcd - 0: abcd -- -+ - #pop -- abcd -+ abcd - 0: abcd -- -+ - /abcd/push - #save testsaved1 - #pop should give an error - ** Can't pop off an empty stack - - #load testsaved1 --#popcopy -+#popcopy - abcd - 0: abcd -- -+ - #pop - abcd - 0: abcd -@@ -139,12 +139,23 @@ Serialization failed: error -30: patterns do not all use the same character tabl - abcd - 0: abcd - --#popcopy -+#popcopy - abcd - 0: abcd -- -+ - #pop -- abcd -+ abcd - 0: abcd - -+# Must only specify one of these -+ -+//push,pushcopy -+** Not allowed together: push pushcopy -+ -+//push,pushtablescopy -+** Not allowed together: push pushtablescopy -+ -+//pushcopy,pushtablescopy -+** Not allowed together: pushcopy pushtablescopy -+ - # End of testinput20 --- -2.9.3 - diff --git a/pcre2-10.23-Fix-memory-leak-when-deserializing-invalid-data-Bugz.patch b/pcre2-10.23-Fix-memory-leak-when-deserializing-invalid-data-Bugz.patch deleted file mode 100644 index 78159ca..0000000 --- a/pcre2-10.23-Fix-memory-leak-when-deserializing-invalid-data-Bugz.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0fece4355e2a5d494936d285eb200314112c9a8b Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Tue, 21 Mar 2017 16:25:01 +0000 -Subject: [PATCH] Fix memory leak when deserializing invalid data (Bugzilla - 2075). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@693 6239d852-aaf2-0410-a92c-79f79f948069 - -Petr Písař: Ported to 10.23. - -diff --git a/src/pcre2_serialize.c b/src/pcre2_serialize.c -index 0af26d8..d2cc603 100644 ---- a/src/pcre2_serialize.c -+++ b/src/pcre2_serialize.c -@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge -- New API code Copyright (c) 2016 University of Cambridge -+ New API code Copyright (c) 2016-2017 University of Cambridge - - ----------------------------------------------------------------------------- - Redistribution and use in source and binary forms, with or without -@@ -214,7 +214,10 @@ for (i = 0; i < number_of_codes; i++) - if (dst_re->magic_number != MAGIC_NUMBER || - dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 || - dst_re->name_count > MAX_NAME_COUNT) -+ { -+ memctl->free(dst_re, memctl->memory_data); - return PCRE2_ERROR_BADSERIALIZEDDATA; -+ } - - /* At the moment only one table is supported. */ - --- -2.7.4 - diff --git a/pcre2-10.23-Fix-misbehaving-DFA-match-for-possessively-repeated-.patch b/pcre2-10.23-Fix-misbehaving-DFA-match-for-possessively-repeated-.patch deleted file mode 100644 index ae5fd25..0000000 --- a/pcre2-10.23-Fix-misbehaving-DFA-match-for-possessively-repeated-.patch +++ /dev/null @@ -1,101 +0,0 @@ -From a96183f8281c6e8b0a42c5a05146a96f9540b673 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Wed, 22 Mar 2017 15:12:06 +0000 -Subject: [PATCH] Fix misbehaving DFA match for possessively repeated character - class (Bugzilla 2086). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Ported to 10.23: - -commit 46399965f23c3efc1197823d1cd54084b27d9174 -Author: ph10 -Date: Wed Mar 22 15:12:06 2017 +0000 - - Fix misbehaving DFA match for possessively repeated character class (Bugzilla - 2086). - - git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@698 6239d852-aaf2-0410-a92c-79f79f948069 - -Signed-off-by: Petr Písař ---- - src/pcre2_dfa_match.c | 10 ++++++---- - testdata/testinput6 | 3 +++ - testdata/testoutput6 | 4 ++++ - 3 files changed, 13 insertions(+), 4 deletions(-) - -diff --git a/src/pcre2_dfa_match.c b/src/pcre2_dfa_match.c -index c909d61..519a147 100644 ---- a/src/pcre2_dfa_match.c -+++ b/src/pcre2_dfa_match.c -@@ -544,7 +544,7 @@ for (;;) - BOOL partial_newline = FALSE; - BOOL could_continue = reset_could_continue; - reset_could_continue = FALSE; -- -+ - if (ptr > mb->last_used_ptr) mb->last_used_ptr = ptr; - - /* Make the new state list into the active state list and empty the -@@ -597,7 +597,7 @@ for (;;) - int state_offset = current_state->offset; - int rrc; - int count; -- -+ - /* A negative offset is a special case meaning "hold off going to this - (negated) state until the number of characters in the data field have - been skipped". If the could_continue flag was passed over from a previous -@@ -633,7 +633,7 @@ for (;;) - - code = start_code + state_offset; - codevalue = *code; -- -+ - /* If this opcode inspects a character, but we are at the end of the - subject, remember the fact for use when testing for a partial match. */ - -@@ -2539,11 +2539,13 @@ for (;;) - if (isinclass) - { - int max = (int)GET2(ecode, 1 + IMM2_SIZE); -- if (*ecode == OP_CRPOSRANGE) -+ -+ if (*ecode == OP_CRPOSRANGE && count >= (int)GET2(ecode, 1)) - { - active_count--; /* Remove non-match possibility */ - next_active_state--; - } -+ - if (++count >= max && max != 0) /* Max 0 => no limit */ - { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); } - else -diff --git a/testdata/testinput6 b/testdata/testinput6 -index ee6cd1b..be9b767 100644 ---- a/testdata/testinput6 -+++ b/testdata/testinput6 -@@ -4886,4 +4886,7 @@ - \= Expect recursion limit exceeded - a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00] - -+/(02-)?[0-9]{3}-[0-9]{3}/ -+ 02-123-123 -+ - # End of testinput6 -diff --git a/testdata/testoutput6 b/testdata/testoutput6 -index 62f2674..2930acc 100644 ---- a/testdata/testoutput6 -+++ b/testdata/testoutput6 -@@ -7687,4 +7687,8 @@ No match - a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00] - Failed: error -53: recursion limit exceeded - -+/(02-)?[0-9]{3}-[0-9]{3}/ -+ 02-123-123 -+ 0: 02-123-123 -+ - # End of testinput6 --- -2.7.4 - diff --git a/pcre2-10.23-Fix-pcre2test-bug-for-global-match-with-zero-termina.patch b/pcre2-10.23-Fix-pcre2test-bug-for-global-match-with-zero-termina.patch deleted file mode 100644 index 06c3ee7..0000000 --- a/pcre2-10.23-Fix-pcre2test-bug-for-global-match-with-zero-termina.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 37fdecdb938eae9aece6c3b552b26d9054212a43 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Sun, 19 Mar 2017 18:34:27 +0000 -Subject: [PATCH] Fix pcre2test bug for global match with zero terminated - subject. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Ported to 10.23: - -commit 0f66bd9a67d59124c7f81b44ee28b6c1f26fd789 -Author: ph10 -Date: Sun Mar 19 18:34:27 2017 +0000 - - Fix pcre2test bug for global match with zero terminated subject. - - git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@687 6239d852-aaf2-0410-a92c-79f79f948069 - -Signed-off-by: Petr Písař ---- - src/pcre2test.c | 38 ++++++++++++++++++++++---------------- - testdata/testinput5 | 3 +++ - testdata/testoutput5 | 4 ++++ - 3 files changed, 29 insertions(+), 16 deletions(-) - -diff --git a/src/pcre2test.c b/src/pcre2test.c -index 01457e8..4220b46 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -5724,7 +5724,7 @@ Returns: PR_OK continue processing next line - static int - process_data(void) - { --PCRE2_SIZE len, ulen; -+PCRE2_SIZE len, ulen, arg_ulen; - uint32_t gmatched; - uint32_t c, k; - uint32_t g_notempty = 0; -@@ -6087,6 +6087,7 @@ ENDSTRING: - SET(*q, 0); - len = CASTVAR(uint8_t *, q) - dbuffer; /* Length in bytes */ - ulen = len/code_unit_size; /* Length in code units */ -+arg_ulen = ulen; /* Value to use in match arg */ - - /* If the string was terminated by \= we must now interpret modifiers. */ - -@@ -6115,11 +6116,15 @@ if (pat_patctl.replacement[0] != 0 && - } - - /* We now have the subject in dbuffer, with len containing the byte length, and --ulen containing the code unit length. Move the data to the end of the buffer so --that a read over the end can be caught by valgrind or other means. If we have --explicit valgrind support, mark the unused start of the buffer unaddressable. --If we are using the POSIX interface, or testing zero-termination, we must --include the terminating zero in the usable data. */ -+ulen containing the code unit length, with a copy in arg_ulen for use in match -+function arguments (this gets changed to PCRE2_ZERO_TERMINATED when the -+zero_terminate modifier is present). -+ -+Move the data to the end of the buffer so that a read over the end can be -+caught by valgrind or other means. If we have explicit valgrind support, mark -+the unused start of the buffer unaddressable. If we are using the POSIX -+interface, or testing zero-termination, we must include the terminating zero in -+the usable data. */ - - c = code_unit_size * (((pat_patctl.control & CTL_POSIX) + - (dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1:0); -@@ -6250,7 +6255,7 @@ if ((dat_datctl.control & (CTL_ALLUSEDTEXT|CTL_DFA)) == CTL_ALLUSEDTEXT && - /* Handle passing the subject as zero-terminated. */ - - if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) -- ulen = PCRE2_ZERO_TERMINATED; -+ arg_ulen = PCRE2_ZERO_TERMINATED; - - /* The nullcontext modifier is used to test calling pcre2_[jit_]match() with a - NULL context. */ -@@ -6452,7 +6457,7 @@ if (dat_datctl.replacement[0] != 0) - rlen = PCRE2_ZERO_TERMINATED; - else - rlen = (CASTVAR(uint8_t *, r) - rbuffer)/code_unit_size; -- PCRE2_SUBSTITUTE(rc, compiled_code, pp, ulen, dat_datctl.offset, -+ PCRE2_SUBSTITUTE(rc, compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options|xoptions, match_data, dat_context, - rbuffer, rlen, nbuffer, &nsize); - -@@ -6534,7 +6539,7 @@ else for (gmatched = 0;; gmatched++) - start_time = clock(); - for (i = 0; i < timeitm; i++) - { -- PCRE2_DFA_MATCH(capcount, compiled_code, pp, ulen, -+ PCRE2_DFA_MATCH(capcount, compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } -@@ -6545,7 +6550,7 @@ else for (gmatched = 0;; gmatched++) - start_time = clock(); - for (i = 0; i < timeitm; i++) - { -- PCRE2_JIT_MATCH(capcount, compiled_code, pp, ulen, -+ PCRE2_JIT_MATCH(capcount, compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } -@@ -6556,7 +6561,7 @@ else for (gmatched = 0;; gmatched++) - start_time = clock(); - for (i = 0; i < timeitm; i++) - { -- PCRE2_MATCH(capcount, compiled_code, pp, ulen, -+ PCRE2_MATCH(capcount, compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } -@@ -6572,9 +6577,9 @@ else for (gmatched = 0;; gmatched++) - - if ((dat_datctl.control & CTL_FINDLIMITS) != 0) - { -- capcount = check_match_limit(pp, ulen, PCRE2_ERROR_MATCHLIMIT, "match"); -+ capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_MATCHLIMIT, "match"); - if (FLD(compiled_code, executable_jit) == NULL) -- (void)check_match_limit(pp, ulen, PCRE2_ERROR_RECURSIONLIMIT, -+ (void)check_match_limit(pp, arg_ulen, PCRE2_ERROR_RECURSIONLIMIT, - "recursion"); - } - -@@ -6604,7 +6609,7 @@ else for (gmatched = 0;; gmatched++) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ -- PCRE2_DFA_MATCH(capcount, compiled_code, pp, ulen, -+ PCRE2_DFA_MATCH(capcount, compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - if (capcount == 0) -@@ -6616,10 +6621,10 @@ else for (gmatched = 0;; gmatched++) - else - { - if ((pat_patctl.control & CTL_JITFAST) != 0) -- PCRE2_JIT_MATCH(capcount, compiled_code, pp, ulen, dat_datctl.offset, -+ PCRE2_JIT_MATCH(capcount, compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - else -- PCRE2_MATCH(capcount, compiled_code, pp, ulen, dat_datctl.offset, -+ PCRE2_MATCH(capcount, compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - if (capcount == 0) - { -@@ -7032,6 +7037,7 @@ else for (gmatched = 0;; gmatched++) - pp += end_offset * code_unit_size; - len -= end_offset * code_unit_size; - ulen -= end_offset; -+ if (arg_ulen != PCRE2_ZERO_TERMINATED) arg_ulen -= end_offset; - } - } - } /* End of global loop */ -diff --git a/testdata/testinput5 b/testdata/testinput5 -index e5a43e5..a574872 100644 ---- a/testdata/testinput5 -+++ b/testdata/testinput5 -@@ -1763,4 +1763,7 @@ - - /[^\HH]/Bi,utf - -+//g,utf -+ \=zero_terminate -+ - # End of testinput5 -diff --git a/testdata/testoutput5 b/testdata/testoutput5 -index 9651fd1..26f9569 100644 ---- a/testdata/testoutput5 -+++ b/testdata/testoutput5 -@@ -4232,4 +4232,8 @@ Failed: error 125 at offset 2: lookbehind assertion is not fixed length - End - ------------------------------------------------------------------ - -+//g,utf -+ \=zero_terminate -+ 0: -+ - # End of testinput5 --- -2.7.4 - diff --git a/pcre2-10.23-Previous-patch-was-not-quite-complete.patch b/pcre2-10.23-Previous-patch-was-not-quite-complete.patch deleted file mode 100644 index c0a247f..0000000 --- a/pcre2-10.23-Previous-patch-was-not-quite-complete.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 3091213a8f163aaad43390229380e22adb096787 Mon Sep 17 00:00:00 2001 -From: ph10 -Date: Tue, 21 Mar 2017 18:36:13 +0000 -Subject: [PATCH 2/2] Previous patch was not quite complete. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@697 6239d852-aaf2-0410-a92c-79f79f948069 -Signed-off-by: Petr Písař ---- - src/pcre2test.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - -diff --git a/src/pcre2test.c b/src/pcre2test.c -index 9289656..b979dd1 100644 ---- a/src/pcre2test.c -+++ b/src/pcre2test.c -@@ -1017,9 +1017,9 @@ are supported. */ - if (test_mode == PCRE8_MODE) \ - r = pcre2_get_error_message_8(a,G(b,8),G(G(b,8),_size)); \ - else if (test_mode == PCRE16_MODE) \ -- r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size)); \ -+ r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2)); \ - else \ -- r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size)) -+ r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4)) - - #define PCRE2_GET_OVECTOR_COUNT(a,b) \ - if (test_mode == PCRE8_MODE) \ -@@ -1399,6 +1399,9 @@ the three different cases. */ - - /* ----- Common macros for two-mode cases ----- */ - -+#define BYTEONE (BITONE/8) -+#define BYTETWO (BITTWO/8) -+ - #define CASTFLD(t,a,b) \ - ((test_mode == G(G(PCRE,BITONE),_MODE))? (t)(G(a,BITONE)->b) : \ - (t)(G(a,BITTWO)->b)) -@@ -1481,9 +1484,9 @@ the three different cases. */ - - #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \ - if (test_mode == G(G(PCRE,BITONE),_MODE)) \ -- r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size)); \ -+ r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size/BYTEONE)); \ - else \ -- r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size)) -+ r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size/BYTETWO)) - - #define PCRE2_GET_OVECTOR_COUNT(a,b) \ - if (test_mode == G(G(PCRE,BITONE),_MODE)) \ -@@ -1904,7 +1907,7 @@ the three different cases. */ - #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \ - a = pcre2_dfa_match_16(G(b,16),(PCRE2_SPTR16)c,d,e,f,G(g,16),h,i,j) - #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \ -- r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size)) -+ r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2)) - #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_16(G(b,16)) - #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_16(G(b,16)) - #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_16(G(a,16),b) -@@ -2000,7 +2003,7 @@ the three different cases. */ - #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \ - a = pcre2_dfa_match_32(G(b,32),(PCRE2_SPTR32)c,d,e,f,G(g,32),h,i,j) - #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \ -- r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size)) -+ r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4)) - #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_32(G(b,32)) - #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_32(G(b,32)) - #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_32(G(a,32),b) --- -2.7.4 - diff --git a/sources b/sources index a708b9a..2c9967a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (pcre2-10.23.tar.bz2) = 3e5910bd2405cc35934d91e4be760abe4f2e900202a20b6ba74adb7a3acb2b74b3bf9b0e97e8de10f8e8534133e0722e0bf0f5fb40d6c2c4520d1ed61749d456 +SHA512 (pcre2-10.30.tar.bz2) = f247a9f917c75920793b9919a45bb1426d126246e7a5d04e39d9407e44b5781f894a90cd3d232b385436b2f22be391335ab782664dd3a28c79058a2fcc74dc3e