[packages/pcre] - rel 2; patches from FC which backport fixes from pcre2/3
arekm
arekm at pld-linux.org
Fri Nov 9 14:28:53 CET 2018
commit f56be28d7d0575d24fdf6c671940a05682c5bf3a
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Fri Nov 9 14:28:45 2018 +0100
- rel 2; patches from FC which backport fixes from pcre2/3
pcre-8.41-fix_stack_estimator.patch | 24 +++
...nchoring-bug-in-conditional-subexpression.patch | 70 ++++++++
...x-bad-auto-possessify-for-certain-classes.patch | 65 ++++++++
pcre-8.42-Fix-subject-buffer-overread-in-JIT.patch | 29 ++++
...ix-two-C-wrapper-bugs-unnoticed-for-years.patch | 178 +++++++++++++++++++++
pcre-8.42-Fix-typos-in-pcrgrep.patch | 36 +++++
...peat-leading-subroutine-call-first-charac.patch | 89 +++++++++++
pcre.spec | 16 +-
8 files changed, 506 insertions(+), 1 deletion(-)
---
diff --git a/pcre.spec b/pcre.spec
index 9041197..7eaf771 100644
--- a/pcre.spec
+++ b/pcre.spec
@@ -12,12 +12,19 @@ Summary(pl.UTF-8): Biblioteka perlowych wyrażeń regularnych
Summary(pt_BR.UTF-8): Biblioteca de expressões regulares versão
Name: pcre
Version: 8.42
-Release: 1
+Release: 2
License: BSD (see LICENCE)
Group: Libraries
Source0: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/%{name}-%{version}.tar.bz2
# Source0-md5: 085b6aa253e0f91cae70b3cdbe8c1ac2
Patch0: %{name}-pcreposix-glibc-conflict.patch
+Patch1: pcre-8.41-fix_stack_estimator.patch
+Patch2: pcre-8.42-Fix-anchoring-bug-in-conditional-subexpression.patch
+Patch3: pcre-8.42-Fix-bad-auto-possessify-for-certain-classes.patch
+Patch4: pcre-8.42-Fix-subject-buffer-overread-in-JIT.patch
+Patch5: pcre-8.42-Fix-two-C-wrapper-bugs-unnoticed-for-years.patch
+Patch6: pcre-8.42-Fix-typos-in-pcrgrep.patch
+Patch7: pcre-8.42-Fix-zero-repeat-leading-subroutine-call-first-charac.patch
URL: http://www.pcre.org/
BuildRequires: autoconf >= 2.57
BuildRequires: automake
@@ -266,6 +273,13 @@ Dokumentacja dla PCRE w formacie HTML.
%prep
%setup -q
%patch0 -p1
+%patch1 -p2
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
%build
%{__libtoolize}
diff --git a/pcre-8.41-fix_stack_estimator.patch b/pcre-8.41-fix_stack_estimator.patch
new file mode 100644
index 0000000..cf388bf
--- /dev/null
+++ b/pcre-8.41-fix_stack_estimator.patch
@@ -0,0 +1,24 @@
+Fix recursion stack estimator
+
+Due to inlining match() by recent GCC, the stack estimator reported 4-bytes
+stack consumption.
+
+Author: Sergei Golubchik <vuvova at gmail.com>
+<https://bugs.exim.org/show_bug.cgi?id=2173>
+
+diff --git a/pcre/pcre_exec.c b/pcre/pcre_exec.c
+--- a/pcre/pcre_exec.c
++++ b/pcre/pcre_exec.c
+@@ -509,6 +509,12 @@
+ (e.g. stopped by repeated call or recursion limit)
+ */
+
++#ifdef __GNUC__
++static int
++match(REGISTER PCRE_PUCHAR eptr, REGISTER const pcre_uchar *ecode,
++ PCRE_PUCHAR mstart, int offset_top, match_data *md, eptrblock *eptrb,
++ unsigned int rdepth) __attribute__((noinline,noclone));
++#endif
+ static int
+ match(REGISTER PCRE_PUCHAR eptr, REGISTER const pcre_uchar *ecode,
+ PCRE_PUCHAR mstart, int offset_top, match_data *md, eptrblock *eptrb,
diff --git a/pcre-8.42-Fix-anchoring-bug-in-conditional-subexpression.patch b/pcre-8.42-Fix-anchoring-bug-in-conditional-subexpression.patch
new file mode 100644
index 0000000..d7247bd
--- /dev/null
+++ b/pcre-8.42-Fix-anchoring-bug-in-conditional-subexpression.patch
@@ -0,0 +1,70 @@
+From 7abc4de8303e8908eeb96714dac53ae10ff465e3 Mon Sep 17 00:00:00 2001
+From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Sun, 2 Sep 2018 17:05:38 +0000
+Subject: [PATCH] Fix anchoring bug in conditional subexpression.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1739 2f5784b3-3f2a-0410-8824-cb99058d5e15
+Petr Písař: Ported to 8.42
+---
+ pcre_compile.c | 12 ++++++++++--
+ testdata/testinput2 | 3 +++
+ testdata/testoutput2 | 4 ++++
+
+ Version 8.42 20-March-2018
+ --------------------------
+diff --git a/pcre_compile.c b/pcre_compile.c
+index 3991d6c..6141fb3 100644
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -8682,10 +8682,18 @@ do {
+ if (!is_anchored(scode, new_map, cd, atomcount)) return FALSE;
+ }
+
+- /* Positive forward assertions and conditions */
++ /* Positive forward assertion */
+
+- else if (op == OP_ASSERT || op == OP_COND)
++ else if (op == OP_ASSERT)
++ {
++ if (!is_anchored(scode, bracket_map, cd, atomcount)) return FALSE;
++ }
++
++ /* Condition; not anchored if no second branch */
++
++ else if (op == OP_COND)
+ {
++ if (scode[GET(scode,1)] != OP_ALT) return FALSE;
+ if (!is_anchored(scode, bracket_map, cd, atomcount)) return FALSE;
+ }
+
+diff --git a/testdata/testinput2 b/testdata/testinput2
+index 8ba4dc4..3528de1 100644
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4257,4 +4257,7 @@ backtracking verbs. --/
+ ab
+ aaab
+
++/(?(?=^))b/
++ abc
++
+ /-- End of testinput2 --/
+diff --git a/testdata/testoutput2 b/testdata/testoutput2
+index 61ed8d9..4ccda27 100644
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14721,4 +14721,8 @@ No need char
+ 0: ab
+ 1: a
+
++/(?(?=^))b/
++ abc
++ 0: b
++
+ /-- End of testinput2 --/
+--
+2.14.4
+
diff --git a/pcre-8.42-Fix-bad-auto-possessify-for-certain-classes.patch b/pcre-8.42-Fix-bad-auto-possessify-for-certain-classes.patch
new file mode 100644
index 0000000..c47ec5f
--- /dev/null
+++ b/pcre-8.42-Fix-bad-auto-possessify-for-certain-classes.patch
@@ -0,0 +1,65 @@
+From 952cac5f4a17e52aec7d0536f405b25428367840 Mon Sep 17 00:00:00 2001
+From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Fri, 17 Aug 2018 14:50:21 +0000
+Subject: [PATCH] Fix bad auto-possessify for certain classes.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1738 2f5784b3-3f2a-0410-8824-cb99058d5e15
+Petr Písař: Ported to 8.42.
+---
+ pcre_compile.c | 4 ++--
+ testdata/testinput4 | 3 +++
+ testdata/testoutput4 | 4 ++++
+
+diff --git a/pcre_compile.c b/pcre_compile.c
+index 6dd8886..3991d6c 100644
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -6,7 +6,7 @@
+ and semantics are as close as possible to those of the Perl 5 language.
+
+ Written by Philip Hazel
+- Copyright (c) 1997-2016 University of Cambridge
++ Copyright (c) 1997-2018 University of Cambridge
+
+ -----------------------------------------------------------------------------
+ Redistribution and use in source and binary forms, with or without
+@@ -3299,7 +3299,7 @@ for(;;)
+ if ((*xclass_flags & XCL_MAP) == 0)
+ {
+ /* No bits are set for characters < 256. */
+- if (list[1] == 0) return TRUE;
++ if (list[1] == 0) return (*xclass_flags & XCL_NOT) == 0;
+ /* Might be an empty repeat. */
+ continue;
+ }
+diff --git a/testdata/testinput4 b/testdata/testinput4
+index 8bdbdac..63368c0 100644
+--- a/testdata/testinput4
++++ b/testdata/testinput4
+@@ -727,4 +727,7 @@
+ /\C(\W?ſ)'?{{/8
+ \\C(\\W?ſ)'?{{
+
++/[^\x{100}-\x{ffff}]*[\x80-\xff]/8
++ \x{99}\x{99}\x{99}
++
+ /-- End of testinput4 --/
+diff --git a/testdata/testoutput4 b/testdata/testoutput4
+index d43c123..69e812c 100644
+--- a/testdata/testoutput4
++++ b/testdata/testoutput4
+@@ -1277,4 +1277,8 @@ No match
+ \\C(\\W?ſ)'?{{
+ No match
+
++/[^\x{100}-\x{ffff}]*[\x80-\xff]/8
++ \x{99}\x{99}\x{99}
++ 0: \x{99}\x{99}\x{99}
++
+ /-- End of testinput4 --/
+--
+2.14.4
+
diff --git a/pcre-8.42-Fix-subject-buffer-overread-in-JIT.patch b/pcre-8.42-Fix-subject-buffer-overread-in-JIT.patch
new file mode 100644
index 0000000..1b64902
--- /dev/null
+++ b/pcre-8.42-Fix-subject-buffer-overread-in-JIT.patch
@@ -0,0 +1,29 @@
+From 1aa76cb33f04fcea3127a0859450e5d18369e5e2 Mon Sep 17 00:00:00 2001
+From: zherczeg <zherczeg at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Fri, 21 Sep 2018 07:34:10 +0000
+Subject: [PATCH] Fix subject buffer overread in JIT.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1740 2f5784b3-3f2a-0410-8824-cb99058d5e15
+Petr Písař: Ported to 8.42.
+---
+ pcre_jit_compile.c | 2 +-
+
+diff --git a/pcre_jit_compile.c b/pcre_jit_compile.c
+index 2bad74b..bc5f9c0 100644
+--- a/pcre_jit_compile.c
++++ b/pcre_jit_compile.c
+@@ -9002,7 +9002,7 @@ if (exact > 1)
+ #ifdef SUPPORT_UTF
+ && !common->utf
+ #endif
+- )
++ && type != OP_ANYNL && type != OP_EXTUNI)
+ {
+ OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(exact));
+ add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_GREATER, TMP1, 0, STR_END, 0));
+--
+2.17.2
+
diff --git a/pcre-8.42-Fix-two-C-wrapper-bugs-unnoticed-for-years.patch b/pcre-8.42-Fix-two-C-wrapper-bugs-unnoticed-for-years.patch
new file mode 100644
index 0000000..be2418a
--- /dev/null
+++ b/pcre-8.42-Fix-two-C-wrapper-bugs-unnoticed-for-years.patch
@@ -0,0 +1,178 @@
+From 2ede5a4b4a98add3bbf982f5805e015e8c61c565 Mon Sep 17 00:00:00 2001
+From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Tue, 26 Jun 2018 16:51:43 +0000
+Subject: [PATCH] Fix two C++ wrapper bugs, unnoticed for years.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1735 2f5784b3-3f2a-0410-8824-cb99058d5e15
+
+Petr Písař: Ported to 8.42.
+
+diff --git a/pcrecpp.cc b/pcrecpp.cc
+index d09c9ab..77a2fed 100644
+--- a/pcrecpp.cc
++++ b/pcrecpp.cc
+@@ -80,6 +80,24 @@ static const string empty_string;
+ // If the user doesn't ask for any options, we just use this one
+ static RE_Options default_options;
+
++// Specials for the start of patterns. See comments where start_options is used
++// below. (PH June 2018)
++static const char *start_options[] = {
++ "(*UTF8)",
++ "(*UTF)",
++ "(*UCP)",
++ "(*NO_START_OPT)",
++ "(*NO_AUTO_POSSESS)",
++ "(*LIMIT_RECURSION=",
++ "(*LIMIT_MATCH=",
++ "(*CRLF)",
++ "(*CR)",
++ "(*BSR_UNICODE)",
++ "(*BSR_ANYCRLF)",
++ "(*ANYCRLF)",
++ "(*ANY)",
++ "" };
++
+ void RE::Init(const string& pat, const RE_Options* options) {
+ pattern_ = pat;
+ if (options == NULL) {
+@@ -135,7 +153,49 @@ pcre* RE::Compile(Anchor anchor) {
+ } else {
+ // Tack a '\z' at the end of RE. Parenthesize it first so that
+ // the '\z' applies to all top-level alternatives in the regexp.
+- string wrapped = "(?:"; // A non-counting grouping operator
++
++ /* When this code was written (for PCRE 6.0) it was enough just to
++ parenthesize the entire pattern. Unfortunately, when the feature of
++ starting patterns with (*UTF8) or (*CR) etc. was added to PCRE patterns,
++ this code was never updated. This bug was not noticed till 2018, long after
++ PCRE became obsolescent and its maintainer no longer around. Since PCRE is
++ frozen, I have added a hack to check for all the existing "start of
++ pattern" specials - knowing that no new ones will ever be added. I am not a
++ C++ programmer, so the code style is no doubt crude. It is also
++ inefficient, but is only run when the pattern starts with "(*".
++ PH June 2018. */
++
++ string wrapped = "";
++
++ if (pattern_.c_str()[0] == '(' && pattern_.c_str()[1] == '*') {
++ int kk, klen, kmat;
++ for (;;) { // Loop for any number of leading items
++
++ for (kk = 0; start_options[kk][0] != 0; kk++) {
++ klen = strlen(start_options[kk]);
++ kmat = strncmp(pattern_.c_str(), start_options[kk], klen);
++ if (kmat >= 0) break;
++ }
++ if (kmat != 0) break; // Not found
++
++ // If the item ended in "=" we must copy digits up to ")".
++
++ if (start_options[kk][klen-1] == '=') {
++ while (isdigit(pattern_.c_str()[klen])) klen++;
++ if (pattern_.c_str()[klen] != ')') break; // Syntax error
++ klen++;
++ }
++
++ // Move the item from the pattern to the start of the wrapped string.
++
++ wrapped += pattern_.substr(0, klen);
++ pattern_.erase(0, klen);
++ }
++ }
++
++ // Wrap the rest of the pattern.
++
++ wrapped += "(?:"; // A non-counting grouping operator
+ wrapped += pattern_;
+ wrapped += ")\\z";
+ re = pcre_compile(wrapped.c_str(), pcre_options,
+@@ -415,7 +475,7 @@ int RE::GlobalReplace(const StringPiece& rewrite,
+ matchend++;
+ }
+ // We also need to advance more than one char if we're in utf8 mode.
+-#ifdef SUPPORT_UTF8
++#ifdef SUPPORT_UTF
+ if (options_.utf8()) {
+ while (matchend < static_cast<int>(str->length()) &&
+ ((*str)[matchend] & 0xc0) == 0x80)
+diff --git a/pcrecpp_unittest.cc b/pcrecpp_unittest.cc
+index 4b15fbe..255066f 100644
+--- a/pcrecpp_unittest.cc
++++ b/pcrecpp_unittest.cc
+@@ -309,7 +309,7 @@ static void TestReplace() {
+ "@aa",
+ "@@@",
+ 3 },
+-#ifdef SUPPORT_UTF8
++#ifdef SUPPORT_UTF
+ { "b*",
+ "bb",
+ "\xE3\x83\x9B\xE3\x83\xBC\xE3\x83\xA0\xE3\x81\xB8", // utf8
+@@ -327,7 +327,7 @@ static void TestReplace() {
+ { "", NULL, NULL, NULL, NULL, 0 }
+ };
+
+-#ifdef SUPPORT_UTF8
++#ifdef SUPPORT_UTF
+ const bool support_utf8 = true;
+ #else
+ const bool support_utf8 = false;
+@@ -535,7 +535,7 @@ static void TestQuoteMetaLatin1() {
+ }
+
+ static void TestQuoteMetaUtf8() {
+-#ifdef SUPPORT_UTF8
++#ifdef SUPPORT_UTF
+ TestQuoteMeta("Pl\xc3\xa1\x63ido Domingo", pcrecpp::UTF8());
+ TestQuoteMeta("xyz", pcrecpp::UTF8()); // No fancy utf8
+ TestQuoteMeta("\xc2\xb0", pcrecpp::UTF8()); // 2-byte utf8 (degree symbol)
+@@ -1178,7 +1178,7 @@ int main(int argc, char** argv) {
+ CHECK(re.error().empty()); // Must have no error
+ }
+
+-#ifdef SUPPORT_UTF8
++#ifdef SUPPORT_UTF
+ // Check UTF-8 handling
+ {
+ printf("Testing UTF-8 handling\n");
+@@ -1202,6 +1202,24 @@ int main(int argc, char** argv) {
+ CHECK(re_test1.FullMatch(utf8_string));
+ RE re_test2("...", pcrecpp::UTF8());
+ CHECK(re_test2.FullMatch(utf8_string));
++
++ // PH added these tests for leading option settings
++
++ RE re_testZ1("(*UTF8)...");
++ CHECK(re_testZ1.FullMatch(utf8_string));
++
++ RE re_testZ2("(*UTF)...");
++ CHECK(re_testZ2.FullMatch(utf8_string));
++
++ RE re_testZ3("(*UCP)(*UTF)...");
++ CHECK(re_testZ3.FullMatch(utf8_string));
++
++ RE re_testZ4("(*UCP)(*LIMIT_MATCH=1000)(*UTF)...");
++ CHECK(re_testZ4.FullMatch(utf8_string));
++
++ RE re_testZ5("(*UCP)(*LIMIT_MATCH=1000)(*ANY)(*UTF)...");
++ CHECK(re_testZ5.FullMatch(utf8_string));
++
+
+ // Check that '.' matches one byte or UTF-8 character
+ // according to the mode.
+@@ -1248,7 +1266,7 @@ int main(int argc, char** argv) {
+ CHECK(!match_sentence.FullMatch(target));
+ CHECK(!match_sentence_re.FullMatch(target));
+ }
+-#endif /* def SUPPORT_UTF8 */
++#endif /* def SUPPORT_UTF */
+
+ printf("Testing error reporting\n");
+
+--
+2.14.4
+
diff --git a/pcre-8.42-Fix-typos-in-pcrgrep.patch b/pcre-8.42-Fix-typos-in-pcrgrep.patch
new file mode 100644
index 0000000..e09fe2d
--- /dev/null
+++ b/pcre-8.42-Fix-typos-in-pcrgrep.patch
@@ -0,0 +1,36 @@
+From 6d8fa98d5167bdd915ce1e32bcb6aaed078e5938 Mon Sep 17 00:00:00 2001
+From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Tue, 26 Jun 2018 17:04:02 +0000
+Subject: [PATCH] Fix typos in pcrgrep.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1736 2f5784b3-3f2a-0410-8824-cb99058d5e15
+Petr Písař: Ported to 8.42.
+
+diff --git a/pcregrep.c b/pcregrep.c
+index a406be9..5982406 100644
+--- a/pcregrep.c
++++ b/pcregrep.c
+@@ -2252,7 +2252,7 @@ if (isdirectory(pathname))
+ int fnlength = strlen(pathname) + strlen(nextfile) + 2;
+ if (fnlength > 2048)
+ {
+- fprintf(stderr, "pcre2grep: recursive filename is too long\n");
++ fprintf(stderr, "pcregrep: recursive filename is too long\n");
+ rc = 2;
+ break;
+ }
+@@ -3034,7 +3034,7 @@ LC_ALL environment variable is set, and if so, use it. */
+ if (locale == NULL)
+ {
+ locale = getenv("LC_ALL");
+- locale_from = "LCC_ALL";
++ locale_from = "LC_ALL";
+ }
+
+ if (locale == NULL)
+--
+2.14.4
+
diff --git a/pcre-8.42-Fix-zero-repeat-leading-subroutine-call-first-charac.patch b/pcre-8.42-Fix-zero-repeat-leading-subroutine-call-first-charac.patch
new file mode 100644
index 0000000..c997a5b
--- /dev/null
+++ b/pcre-8.42-Fix-zero-repeat-leading-subroutine-call-first-charac.patch
@@ -0,0 +1,89 @@
+From a65e1b693110caa27fe8f724583fc28ce5924026 Mon Sep 17 00:00:00 2001
+From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
+Date: Sat, 20 Oct 2018 09:38:44 +0000
+Subject: [PATCH] Fix zero-repeat leading subroutine call first character
+ error.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1741 2f5784b3-3f2a-0410-8824-cb99058d5e15
+Petr Písař: Ported to 8.42.
+---
+ pcre_compile.c | 2 ++
+ testdata/testinput1 | 15 +++++++++++++++
+ testdata/testoutput1 | 24 ++++++++++++++++++++++++
+
+diff --git a/pcre_compile.c b/pcre_compile.c
+index 6141fb3..079d30a 100644
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -7642,6 +7642,8 @@ for (;; ptr++)
+ /* Can't determine a first byte now */
+
+ if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
++ zerofirstchar = firstchar;
++ zerofirstcharflags = firstcharflags;
+ continue;
+
+
+diff --git a/testdata/testinput1 b/testdata/testinput1
+index 5c23f41..02e4f48 100644
+--- a/testdata/testinput1
++++ b/testdata/testinput1
+@@ -5742,4 +5742,19 @@ AbcdCBefgBhiBqz
+ /X+(?#comment)?/
+ >XXX<
+
++/ (?<word> \w+ )* \. /xi
++ pokus.
++
++/(?(DEFINE) (?<word> \w+ ) ) (?&word)* \./xi
++ pokus.
++
++/(?(DEFINE) (?<word> \w+ ) ) ( (?&word)* ) \./xi
++ pokus.
++
++/(?&word)* (?(DEFINE) (?<word> \w+ ) ) \./xi
++ pokus.
++
++/(?&word)* \. (?<word> \w+ )/xi
++ pokus.hokus
++
+ /-- End of testinput1 --/
+diff --git a/testdata/testoutput1 b/testdata/testoutput1
+index eff8ecc..e6147e6 100644
+--- a/testdata/testoutput1
++++ b/testdata/testoutput1
+@@ -9446,4 +9446,28 @@ No match
+ >XXX<
+ 0: X
+
++/ (?<word> \w+ )* \. /xi
++ pokus.
++ 0: pokus.
++ 1: pokus
++
++/(?(DEFINE) (?<word> \w+ ) ) (?&word)* \./xi
++ pokus.
++ 0: pokus.
++
++/(?(DEFINE) (?<word> \w+ ) ) ( (?&word)* ) \./xi
++ pokus.
++ 0: pokus.
++ 1: <unset>
++ 2: pokus
++
++/(?&word)* (?(DEFINE) (?<word> \w+ ) ) \./xi
++ pokus.
++ 0: pokus.
++
++/(?&word)* \. (?<word> \w+ )/xi
++ pokus.hokus
++ 0: pokus.hokus
++ 1: hokus
++
+ /-- End of testinput1 --/
+--
+2.17.2
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/pcre.git/commitdiff/f56be28d7d0575d24fdf6c671940a05682c5bf3a
More information about the pld-cvs-commit
mailing list