grep-commit
[Top][All Lists]
Advanced

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

grep branch, master, updated. v2.28-3-g6e4c872


From: Paul Eggert
Subject: grep branch, master, updated. v2.28-3-g6e4c872
Date: Wed, 8 Feb 2017 17:12:04 -0500 (EST)

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  6e4c8728f0e75af57f839625d0bd51b0a02d091e (commit)
      from  6e9836442e63dbbc710d3bfe5e48103aeded4605 (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=6e4c8728f0e75af57f839625d0bd51b0a02d091e


commit 6e4c8728f0e75af57f839625d0bd51b0a02d091e
Author: Paul Eggert <address@hidden>
Date:   Wed Feb 8 13:00:11 2017 -0800

    grep: do not mishandle \. in multiple patterns
    
    Problem reported by Lars Wendler (Bug#25655).
    * NEWS: Document this.
    * src/grep.c (try_fgrep_pattern): Fix typo that prevented
    keys from being properly updated.
    * tests/foad1: Test for the bug.

diff --git a/NEWS b/NEWS
index 072b1e9..a3248e4 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,11 @@ GNU grep NEWS                                    -*- outline 
-*-
 
 ** Bug fixes
 
+  grep without -F no longer goes awry when given two or more patterns
+  that contain no special characters other than '\' and also contain a
+  subpattern like '\.' that escapes a character to make it ordinary.
+  [bug introduced in grep 2.28]
+
   grep no longer fails to build on PCRE versions before 8.20.
   [bug introduced in grep 2.28]
 
diff --git a/src/grep.c b/src/grep.c
index 81654c3..74acb0b 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -2361,11 +2361,12 @@ try_fgrep_pattern (int matcher, char *keys, size_t 
*len_p)
   size_t len = *len_p;
   char *new_keys = xmalloc (len + 1);
   char *p = new_keys;
+  char const *q = keys;
   mbstate_t mb_state = { 0 };
 
   while (len != 0)
     {
-      switch (*keys)
+      switch (*q)
         {
         case '$': case '*': case '.': case '[': case '^':
           goto fail;
@@ -2377,7 +2378,7 @@ try_fgrep_pattern (int matcher, char *keys, size_t *len_p)
 
         case '\\':
           if (1 < len)
-            switch (keys[1])
+            switch (q[1])
               {
               case '\n':
               case 'B': case 'S': case 'W': case'\'': case '<':
@@ -2391,7 +2392,7 @@ try_fgrep_pattern (int matcher, char *keys, size_t *len_p)
                   goto fail;
                 /* Fall through.  */
               default:
-                keys++, len--;
+                q++, len--;
                 break;
               }
           break;
@@ -2401,20 +2402,20 @@ try_fgrep_pattern (int matcher, char *keys, size_t 
*len_p)
         size_t n;
         if (match_icase)
           {
-            int ni = fgrep_icase_charlen (keys, len, &mb_state);
+            int ni = fgrep_icase_charlen (q, len, &mb_state);
             if (ni < 0)
               goto fail;
             n = ni;
           }
         else
           {
-            n = mb_clen (keys, len, &mb_state);
+            n = mb_clen (q, len, &mb_state);
             if (MB_LEN_MAX < n)
               goto fail;
           }
 
-        p = mempcpy (p, keys, n);
-        keys += n;
+        p = mempcpy (p, q, n);
+        q += n;
         len -= n;
       }
     }
diff --git a/tests/foad1 b/tests/foad1
index 286c449..0163f1a 100755
--- a/tests/foad1
+++ b/tests/foad1
@@ -137,6 +137,13 @@ grep_test "$x2" "$y2" -F -w --color=always bc
 grep_test "$x3" "$y3" -E -w --color=always bc
 grep_test "$x3" "$y3" -F -w --color=always bc
 
+# Bug#25655
+grep_test .tar/ .tar/ -e '\.tar' -e '\.tbz'
+grep_test .tar/ .tar/ -o -e '\.tar' -e 'tar'
+grep_test '$*.[^\/' '$*.[^\/' -o -e '\$\*\.\[\^\\' -e abc
+grep_test '$*.[^\/(+?{|/' '$*.[^\/(+?{|/' -o -E \
+          -e '\$\*\.\[\^\\' -e '\(\+\?\{\|'
+
 # Skip the rest of the tests - known to fail. TAA.
 Exit $failures
 

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

Summary of changes:
 NEWS        |  5 +++++
 src/grep.c  | 15 ++++++++-------
 tests/foad1 |  7 +++++++
 3 files changed, 20 insertions(+), 7 deletions(-)


hooks/post-receive
-- 
grep



reply via email to

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