From a41246966f5e48e3aea1f77bcc24c1bba5ab603f Mon Sep 17 00:00:00 2001 From: gaoruoshu Date: Mon, 26 Dec 2022 16:07:29 +0800 Subject: [PATCH] [grep]backport patch from upstream --- ...g-backref-in-last-of-multiple-patter.patch | 67 +++++++++++++++++++ grep.spec | 6 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 backport-grep-bug-backref-in-last-of-multiple-patter.patch diff --git a/backport-grep-bug-backref-in-last-of-multiple-patter.patch b/backport-grep-bug-backref-in-last-of-multiple-patter.patch new file mode 100644 index 0000000..d87e821 --- /dev/null +++ b/backport-grep-bug-backref-in-last-of-multiple-patter.patch @@ -0,0 +1,67 @@ +From b061d24916fb9a14da37a3f2a05cb80dc65cfd38 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Mon, 5 Dec 2022 14:16:45 -0800 +Subject: [PATCH] backport: grep: bug backref in last of multiple patterns + +--- + src/dfasearch.c | 25 ++++++++++++------------- + tests/backref | 8 ++++++++ + 2 files changed, 20 insertions(+), 13 deletions(-) + +diff --git a/src/dfasearch.c b/src/dfasearch.c +index d6afa8d..2d0e861 100644 +--- a/src/dfasearch.c ++++ b/src/dfasearch.c +@@ -267,20 +267,19 @@ GEAcompile (char *pattern, size_t size, reg_syntax_t syntax_bits, + if (compilation_failed) + exit (EXIT_TROUBLE); + +- if (prev <= patlim) ++ if (patlim < prev) ++ buflen--; ++ else if (pattern < prev) + { +- if (pattern < prev) +- { +- ptrdiff_t prevlen = patlim - prev; +- buf = xrealloc (buf, buflen + prevlen); +- memcpy (buf + buflen, prev, prevlen); +- buflen += prevlen; +- } +- else +- { +- buf = pattern; +- buflen = size; +- } ++ ptrdiff_t prevlen = patlim - prev; ++ buf = xrealloc (buf, buflen + prevlen); ++ memcpy (buf + buflen, prev, prevlen); ++ buflen += prevlen; ++ } ++ else ++ { ++ buf = pattern; ++ buflen = size; + } + + /* In the match_words and match_lines cases, we use a different pattern +diff --git a/tests/backref b/tests/backref +index 947981b..5cc3060 100755 +--- a/tests/backref ++++ b/tests/backref +@@ -43,4 +43,12 @@ if test $? -ne 2 ; then + failures=1 + fi + ++# https://bugs.gnu.org/36148#13 ++echo 'Total failed: 2 (1 ignored)' | ++ grep -e '^Total failed: 0$' -e '^Total failed: \([0-9]*\) (\1 ignored)$' ++if test $? -ne 1 ; then ++ echo "Backref: Multiple -e test, test #5 failed" ++ failures=1 ++fi ++ + Exit $failures +-- +2.30.1 (Apple Git-130) + diff --git a/grep.spec b/grep.spec index 9d5ba6c..fa799e7 100644 --- a/grep.spec +++ b/grep.spec @@ -1,6 +1,6 @@ Name: grep Version: 3.7 -Release: 7 +Release: 8 Summary: A string search utility License: GPLv3+ URL: http://www.gnu.org/software/grep/ @@ -22,6 +22,7 @@ Patch10: backport-grep-fix-bug-with-and-some-Hangul-Syllables.patch Patch11: backport-tests-improve-tests-of.patch Patch12: backport-grep-sanity-check-GREP_COLOR.patch Patch13: backport-grep-fix-regex-compilation-memory-leaks.patch +Patch14: backport-grep-bug-backref-in-last-of-multiple-patter.patch BuildRequires: gcc pcre2-devel texinfo gettext libsigsegv-devel automake Provides: /bin/egrep /bin/fgrep /bin/grep bundled(gnulib) @@ -67,6 +68,9 @@ make check %changelog +* Mon Dec 26 2022 gaoruoshu - 3.7-8 +- backport patch from upstream + * Wed Jul 27 2022 panxiaohe - 3.7-7 - backport patches from upstream -- Gitee