From 63f1aabcabdc7ace28c649657fe2a4f880a87c5a Mon Sep 17 00:00:00 2001 From: ph10 Date: Mon, 20 Feb 2017 17:45:21 +0000 Subject: [PATCH] Fix recognition of (?# style comment between quantifier and '+' or '?'. 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@1682 2f5784b3-3f2a-0410-8824-cb99058d5e15 Petr Písař: Ported to 8.40. diff --git a/pcre_compile.c b/pcre_compile.c index de92313..c787813 100644 --- a/pcre_compile.c +++ b/pcre_compile.c @@ -5739,6 +5739,21 @@ for (;; ptr++) ptr = p - 1; /* Character before the next significant one. */ } + /* We also need to skip over (?# comments, which are not dependent on + extended mode. */ + + if (ptr[1] == CHAR_LEFT_PARENTHESIS && ptr[2] == CHAR_QUESTION_MARK && + ptr[3] == CHAR_NUMBER_SIGN) + { + ptr += 4; + while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++; + if (*ptr == CHAR_NULL) + { + *errorcodeptr = ERR18; + goto FAILED; + } + } + /* If the next character is '+', we have a possessive quantifier. This implies greediness, whatever the setting of the PCRE_UNGREEDY option. If the next character is '?' this is a minimizing repeat, by default, diff --git a/testdata/testinput1 b/testdata/testinput1 index 93abab3..5c23f41 100644 --- a/testdata/testinput1 +++ b/testdata/testinput1 @@ -5739,4 +5739,7 @@ AbcdCBefgBhiBqz /(?=.*X)X$/ \ X +/X+(?#comment)?/ + >XXX< + /-- End of testinput1 --/ diff --git a/testdata/testoutput1 b/testdata/testoutput1 index a2b3cff..eff8ecc 100644 --- a/testdata/testoutput1 +++ b/testdata/testoutput1 @@ -9442,4 +9442,8 @@ No match \ X 0: X +/X+(?#comment)?/ + >XXX< + 0: X + /-- End of testinput1 --/ -- 2.7.4