summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2016-06-17 17:28:14 +0000
committerph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2016-06-17 17:28:14 +0000
commit664df44c7eb62edbce95ab6dbdedcba7f07fed02 (patch)
tree189645a8ae23bfdcdeff61095b2ec5a1fa0bb2a4
parent1005d5bd381e441e9afb9ada4cb1006cd666073b (diff)
downloadpcre-664df44c7eb62edbce95ab6dbdedcba7f07fed02.tar.gz
Fix bad interaction between -o and -M in pcregrep.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1658 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--ChangeLog7
-rw-r--r--configure.ac6
-rw-r--r--pcregrep.c6
3 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index a34f845..1588319 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,13 @@ ChangeLog for PCRE
Note that the PCRE 8.xx series (PCRE1) is now in a bugfix-only state. All
development is happening in the PCRE2 10.xx series.
+Version 8.40 17-June-2016
+-------------------------
+
+1. Using -o with -M in pcregrep could cause unnecessary repeated output when
+ the match extended over a line boundary.
+
+
Version 8.39 14-June-2016
-------------------------
diff --git a/configure.ac b/configure.ac
index 3cefaf1..ebec5e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,9 +9,9 @@ dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
dnl be defined as -RC2, for example. For real releases, it should be empty.
m4_define(pcre_major, [8])
-m4_define(pcre_minor, [39])
-m4_define(pcre_prerelease, [])
-m4_define(pcre_date, [2016-06-14])
+m4_define(pcre_minor, [40])
+m4_define(pcre_prerelease, [-RC1])
+m4_define(pcre_date, [2016-06-17])
# NOTE: The CMakeLists.txt file searches for the above variables in the first
# 50 lines of this file. Please update that if the variables above are moved.
diff --git a/pcregrep.c b/pcregrep.c
index cd53c64..fd2a676 100644
--- a/pcregrep.c
+++ b/pcregrep.c
@@ -1803,6 +1803,12 @@ while (ptr < endptr)
match = FALSE;
if (line_buffered) fflush(stdout);
rc = 0; /* Had some success */
+
+ /* If the current match ended past the end of the line (only possible
+ in multiline mode), we are done with this line. */
+
+ if ((unsigned int)offsets[1] > linelength) goto END_ONE_MATCH;
+
startoffset = offsets[1]; /* Restart after the match */
if (startoffset <= oldstartoffset)
{