[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