grep-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

grep branch, master, updated. v2.26-29-g6a3f4e4


From: Paul Eggert
Subject: grep branch, master, updated. v2.26-29-g6a3f4e4
Date: Sat, 19 Nov 2016 11:14:22 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "grep".

The branch, master has been updated
       via  6a3f4e447af3698b1e26337211a587ff54aab99d (commit)
      from  575bdb1bc65d0aa73df127ec1bf70ab6ec3db174 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/grep.git/commit/?id=6a3f4e447af3698b1e26337211a587ff54aab99d


commit 6a3f4e447af3698b1e26337211a587ff54aab99d
Author: Paul Eggert <address@hidden>
Date:   Sat Nov 19 03:12:56 2016 -0800

    grep: fix -zxP bug
    
    * NEWS: Document this.
    * src/pcresearch.c (Pcompile): Search a line at a time if -x is
    used, since -x uses ^ and $.
    * tests/pcre: Test this.

diff --git a/NEWS b/NEWS
index 978ec55..4972c01 100644
--- a/NEWS
+++ b/NEWS
@@ -10,9 +10,9 @@ GNU grep NEWS                                    -*- outline 
-*-
   >/dev/null" where PROGRAM dies when writing into a broken pipe.
   [bug introduced in grep-2.26]
 
-  grep -Pz no longer rejects patterns containing ^ and $, and is
-  more cautious about special patterns like (?-m) and (*FAIL).
-  [bug introduced in grep-2.23]
+  grep -Pz no longer rejects patterns containing ^ and $, is more
+  cautious about special patterns like (?-m) and (*FAIL), and works
+  when combined with -x.  [bug introduced in grep-2.23]
 
   grep -m0 -L PAT FILE now outputs "FILE".  [bug introduced in grep-2.5]
 
diff --git a/src/pcresearch.c b/src/pcresearch.c
index 439945a..01616c2 100644
--- a/src/pcresearch.c
+++ b/src/pcresearch.c
@@ -128,22 +128,28 @@ Pcompile (char const *pattern, size_t size)
 
   if (! eolbyte)
     {
-      bool escaped = false;
-      bool after_unescaped_left_bracket = false;
-      for (p = pattern; *p; p++)
-        if (escaped)
-          escaped = after_unescaped_left_bracket = false;
-        else
-          {
-            if (*p == '$' || (*p == '^' && !after_unescaped_left_bracket)
-                || (*p == '(' && (p[1] == '?' || p[1] == '*')))
+      bool line_at_a_time = match_lines;
+      if (! line_at_a_time)
+        {
+          bool escaped = false;
+          bool after_unescaped_left_bracket = false;
+          for (p = pattern; *p; p++)
+            if (escaped)
+              escaped = after_unescaped_left_bracket = false;
+            else
               {
-                flags = (flags & ~ PCRE_MULTILINE) | PCRE_DOLLAR_ENDONLY;
-                break;
+                if (*p == '$' || (*p == '^' && !after_unescaped_left_bracket)
+                    || (*p == '(' && (p[1] == '?' || p[1] == '*')))
+                  {
+                    line_at_a_time = true;
+                    break;
+                  }
+                escaped = *p == '\\';
+                after_unescaped_left_bracket = *p == '[';
               }
-            escaped = *p == '\\';
-            after_unescaped_left_bracket = *p == '[';
-          }
+        }
+      if (line_at_a_time)
+        flags = (flags & ~ PCRE_MULTILINE) | PCRE_DOLLAR_ENDONLY;
     }
 
   *n = '\0';
diff --git a/tests/pcre b/tests/pcre
index 653ef22..a290099 100755
--- a/tests/pcre
+++ b/tests/pcre
@@ -17,5 +17,6 @@ echo | grep -zP '\s$' || fail=1
 echo '.ab' | returns_ 1 grep -Pwx ab || fail=1
 echo x | grep -Pz '[^a]' || fail=1
 printf 'x\n\0' | returns_ 1 grep -zP 'x$' || fail=1
+printf 'a\nb\0' | grep -zxP a && fail=1
 
 Exit $fail

-----------------------------------------------------------------------

Summary of changes:
 NEWS             |    6 +++---
 src/pcresearch.c |   34 ++++++++++++++++++++--------------
 tests/pcre       |    1 +
 3 files changed, 24 insertions(+), 17 deletions(-)


hooks/post-receive
-- 
grep



reply via email to

[Prev in Thread] Current Thread [Next in Thread]