[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- grep branch, master, updated. v2.28-3-g6e4c872,
Paul Eggert <=