Compare commits

..

4 commits

Author SHA1 Message Date
Jaroslav Škarvada
abfeb11c5f Fixed pcre-count test on secondary architectures
(byt test-pcre-count-fix patch)
  Resolves: rhbz#1296842
2016-01-12 10:56:36 +01:00
Jaroslav Škarvada
06192f4293 Used latest upstream patch for bug 1269014 to fix regression,
fixed order of patches
  Resolves: rhbz#1269014
2016-01-06 18:30:07 +01:00
Jaroslav Škarvada
4c87a4d510 Improved encoding errors handling (by better-encoding-errors-handling patch)
Resolves: rhbz#1219141
2016-01-05 14:10:12 +01:00
Jaroslav Škarvada
c7e5c9ff07 Fixed grep to be consistent in 'grep -Pc' and 'grep -P | wc -l'
Resolves: rhbz#1269014
2015-12-02 10:39:54 +01:00
18 changed files with 1114 additions and 4002 deletions

View file

@ -1 +0,0 @@
1

3
.gitignore vendored
View file

@ -1,2 +1 @@
/grep-*.tar.xz
/grep-*.tar.xz.sig
grep-*.tar.xz

View file

@ -7,5 +7,5 @@ if ( $status == 1 ) then
endif
alias grep 'grep --color=auto'
alias egrep 'grep -E --color=auto'
alias fgrep 'grep -F --color=auto'
alias egrep 'egrep --color=auto'
alias fgrep 'fgrep --color=auto'

View file

@ -3,5 +3,5 @@
/usr/libexec/grepconf.sh -c || return
alias grep='grep --color=auto' 2>/dev/null
alias egrep='grep -E --color=auto' 2>/dev/null
alias fgrep='grep -F --color=auto' 2>/dev/null
alias egrep='egrep --color=auto' 2>/dev/null
alias fgrep='fgrep --color=auto' 2>/dev/null

View file

@ -1,16 +0,0 @@
--- !Policy
product_versions:
- fedora-*
decision_contexts: [bodhi_update_push_testing]
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
#gating rawhide
--- !Policy
product_versions:
- fedora-*
decision_contexts: [bodhi_update_push_stable]
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}

View file

@ -0,0 +1,81 @@
diff --git a/src/grep.c b/src/grep.c
index 6f18c1b..859ec27 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -1339,7 +1339,8 @@ grep (int fd, struct stat const *st)
has_nulls = true;
if (binary_files == WITHOUT_MATCH_BINARY_FILES)
return 0;
- done_on_match = out_quiet = true;
+ if (!count_matches)
+ done_on_match = out_quiet = true;
nul_zapper = eol;
skip_nuls = skip_empty_lines;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 47b9883..1b2281d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -91,6 +91,7 @@ TESTS = \
options \
pcre \
pcre-abort \
+ pcre-count \
pcre-infloop \
pcre-invalid-utf8-input \
pcre-o \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 4aaebdf..0f40547 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1395,6 +1395,7 @@ TESTS = \
options \
pcre \
pcre-abort \
+ pcre-count \
pcre-infloop \
pcre-invalid-utf8-input \
pcre-o \
@@ -2166,6 +2167,13 @@ pcre-abort.log: pcre-abort
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+pcre-count.log: pcre-count
+ @p='pcre-count'; \
+ b='pcre-count'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
pcre-infloop.log: pcre-infloop
@p='pcre-infloop'; \
b='pcre-infloop'; \
diff --git a/tests/pcre-count b/tests/pcre-count
new file mode 100755
index 0000000..78e1c7c
--- /dev/null
+++ b/tests/pcre-count
@@ -0,0 +1,23 @@
+#! /bin/sh
+# grep -P / grep -Pc are inconsistent results
+# This bug affected grep versions 2.21 through 2.22.
+#
+# Copyright (C) 2015 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+require_pcre_
+
+fail=0
+
+printf 'a\n%032768d\nb\x0\n%032768d\na\n' 0 0 > in
+
+LC_ALL=C grep -P 'a' in | wc -l > exp
+
+LC_ALL=C grep -Pc 'a' in > out || fail=1
+compare exp out || fail=1
+
+Exit $fail

View file

@ -0,0 +1,671 @@
diff --git a/src/grep.c b/src/grep.c
index 50a9868..6f18c1b 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -351,7 +351,6 @@ bool match_icase;
bool match_words;
bool match_lines;
char eolbyte;
-enum textbin input_textbin;
static char const *matcher;
@@ -362,6 +361,10 @@ static size_t filename_prefix_len;
static bool errseen;
static bool write_error_seen;
+/* True if output from the current input file has been suppressed
+ because an output line had an encoding error. */
+static bool encoding_error_output;
+
enum directories_type
{
READ_DIRECTORIES = 2,
@@ -447,12 +450,6 @@ clean_up_stdout (void)
close_stdout ();
}
-static bool
-textbin_is_binary (enum textbin textbin)
-{
- return textbin < TEXTBIN_UNKNOWN;
-}
-
/* The high-order bit of a byte. */
enum { HIBYTE = 0x80 };
@@ -517,58 +514,60 @@ skip_easy_bytes (char const *buf)
return p;
}
-/* Return the text type of data in BUF, of size SIZE.
+/* Return true if BUF, of size SIZE, has an encoding error.
BUF must be followed by at least sizeof (uword) bytes,
- which may be arbitrarily written to or read from. */
-static enum textbin
-buffer_textbin (char *buf, size_t size)
+ the first of which may be modified. */
+static bool
+buf_has_encoding_errors (char *buf, size_t size)
{
- if (eolbyte && memchr (buf, '\0', size))
- return TEXTBIN_BINARY;
+ if (MB_CUR_MAX <= 1)
+ return false;
- if (1 < MB_CUR_MAX)
- {
- mbstate_t mbs = { 0 };
- size_t clen;
- char const *p;
+ mbstate_t mbs = { 0 };
+ size_t clen;
- buf[size] = -1;
- for (p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
- {
- clen = mbrlen (p, buf + size - p, &mbs);
- if ((size_t) -2 <= clen)
- return clen == (size_t) -2 ? TEXTBIN_UNKNOWN : TEXTBIN_BINARY;
- }
+ buf[size] = -1;
+ for (char const *p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
+ {
+ clen = mbrlen (p, buf + size - p, &mbs);
+ if ((size_t) -2 <= clen)
+ return true;
}
- return TEXTBIN_TEXT;
+ return false;
}
-/* Return the text type of a file. BUF, of size SIZE, is the initial
- buffer read from the file with descriptor FD and status ST.
- BUF must be followed by at least sizeof (uword) bytes,
+
+/* Return true if BUF, of size SIZE, has a null byte.
+ BUF must be followed by at least one byte,
which may be arbitrarily written to or read from. */
-static enum textbin
-file_textbin (char *buf, size_t size, int fd, struct stat const *st)
+static bool
+buf_has_nulls (char *buf, size_t size)
{
- enum textbin textbin = buffer_textbin (buf, size);
- if (textbin_is_binary (textbin))
- return textbin;
+ buf[size] = 0;
+ return strlen (buf) != size;
+}
+/* Return true if a file is known to contain null bytes.
+ SIZE bytes have already been read from the file
+ with descriptor FD and status ST. */
+static bool
+file_must_have_nulls (size_t size, int fd, struct stat const *st)
+{
if (usable_st_size (st))
{
if (st->st_size <= size)
- return textbin == TEXTBIN_UNKNOWN ? TEXTBIN_BINARY : textbin;
+ return false;
/* If the file has holes, it must contain a null byte somewhere. */
- if (SEEK_HOLE != SEEK_SET && eolbyte)
+ if (SEEK_HOLE != SEEK_SET)
{
off_t cur = size;
if (O_BINARY || fd == STDIN_FILENO)
{
cur = lseek (fd, 0, SEEK_CUR);
if (cur < 0)
- return TEXTBIN_UNKNOWN;
+ return false;
}
/* Look for a hole after the current location. */
@@ -578,12 +577,12 @@ file_textbin (char *buf, size_t size, int fd, struct stat const *st)
if (lseek (fd, cur, SEEK_SET) < 0)
suppressible_error (filename, errno);
if (hole_start < st->st_size)
- return TEXTBIN_BINARY;
+ return true;
}
}
}
- return TEXTBIN_UNKNOWN;
+ return false;
}
/* Convert STR to a nonnegative integer, storing the result in *OUT.
@@ -841,7 +840,7 @@ static char *label = NULL; /* Fake filename for stdin */
/* Internal variables to keep track of byte count, context, etc. */
static uintmax_t totalcc; /* Total character count before bufbeg. */
static char const *lastnl; /* Pointer after last newline counted. */
-static char const *lastout; /* Pointer after last character output;
+static char *lastout; /* Pointer after last character output;
NULL if no character has been output
or if it's conceptually before bufbeg. */
static intmax_t outleft; /* Maximum number of lines to be output. */
@@ -913,10 +912,31 @@ print_offset (uintmax_t pos, int min_width, const char *color)
pr_sgr_end_if (color);
}
-/* Print a whole line head (filename, line, byte). */
-static void
-print_line_head (char const *beg, char const *lim, char sep)
+/* Print a whole line head (filename, line, byte). The output data
+ starts at BEG and contains LEN bytes; it is followed by at least
+ sizeof (uword) bytes, the first of which may be temporarily modified.
+ The output data comes from what is perhaps a larger input line that
+ goes until LIM, where LIM[-1] is an end-of-line byte. Use SEP as
+ the separator on output.
+
+ Return true unless the line was suppressed due to an encoding error. */
+
+static bool
+print_line_head (char *beg, size_t len, char const *lim, char sep)
{
+ bool encoding_errors = false;
+ if (binary_files != TEXT_BINARY_FILES)
+ {
+ char ch = beg[len];
+ encoding_errors = buf_has_encoding_errors (beg, len);
+ beg[len] = ch;
+ }
+ if (encoding_errors)
+ {
+ encoding_error_output = done_on_match = out_quiet = true;
+ return false;
+ }
+
bool pending_sep = false;
if (out_file)
@@ -963,22 +983,27 @@ print_line_head (char const *beg, char const *lim, char sep)
print_sep (sep);
}
+
+ return true;
}
-static const char *
-print_line_middle (const char *beg, const char *lim,
+static char *
+print_line_middle (char *beg, char *lim,
const char *line_color, const char *match_color)
{
size_t match_size;
size_t match_offset;
- const char *cur = beg;
- const char *mid = NULL;
-
- while (cur < lim
- && ((match_offset = execute (beg, lim - beg, &match_size,
- beg + (cur - beg))) != (size_t) -1))
+ char *cur = beg;
+ char *mid = NULL;
+ char *b;
+
+ for (cur = beg;
+ (cur < lim
+ && ((match_offset = execute (beg, lim - beg, &match_size, cur))
+ != (size_t) -1));
+ cur = b + match_size)
{
- char const *b = beg + match_offset;
+ b = beg + match_offset;
/* Avoid matching the empty line at the end of the buffer. */
if (b == lim)
@@ -998,8 +1023,11 @@ print_line_middle (const char *beg, const char *lim,
/* This function is called on a matching line only,
but is it selected or rejected/context? */
if (only_matching)
- print_line_head (b, lim, (out_invert ? SEP_CHAR_REJECTED
- : SEP_CHAR_SELECTED));
+ {
+ char sep = out_invert ? SEP_CHAR_REJECTED : SEP_CHAR_SELECTED;
+ if (! print_line_head (b, match_size, lim, sep))
+ return NULL;
+ }
else
{
pr_sgr_start (line_color);
@@ -1017,7 +1045,6 @@ print_line_middle (const char *beg, const char *lim,
if (only_matching)
fputs ("\n", stdout);
}
- cur = b + match_size;
}
if (only_matching)
@@ -1028,8 +1055,8 @@ print_line_middle (const char *beg, const char *lim,
return cur;
}
-static const char *
-print_line_tail (const char *beg, const char *lim, const char *line_color)
+static char *
+print_line_tail (char *beg, const char *lim, const char *line_color)
{
size_t eol_size;
size_t tail_size;
@@ -1050,14 +1077,15 @@ print_line_tail (const char *beg, const char *lim, const char *line_color)
}
static void
-prline (char const *beg, char const *lim, char sep)
+prline (char *beg, char *lim, char sep)
{
bool matching;
const char *line_color;
const char *match_color;
if (!only_matching)
- print_line_head (beg, lim, sep);
+ if (! print_line_head (beg, lim - beg - 1, lim, sep))
+ return;
matching = (sep == SEP_CHAR_SELECTED) ^ out_invert;
@@ -1077,7 +1105,11 @@ prline (char const *beg, char const *lim, char sep)
{
/* We already know that non-matching lines have no match (to colorize). */
if (matching && (only_matching || *match_color))
- beg = print_line_middle (beg, lim, line_color, match_color);
+ {
+ beg = print_line_middle (beg, lim, line_color, match_color);
+ if (! beg)
+ return;
+ }
if (!only_matching && *line_color)
{
@@ -1111,7 +1143,7 @@ prpending (char const *lim)
lastout = bufbeg;
while (pending > 0 && lastout < lim)
{
- char const *nl = memchr (lastout, eolbyte, lim - lastout);
+ char *nl = memchr (lastout, eolbyte, lim - lastout);
size_t match_size;
--pending;
if (outleft
@@ -1126,7 +1158,7 @@ prpending (char const *lim)
/* Output the lines between BEG and LIM. Deal with context. */
static void
-prtext (char const *beg, char const *lim)
+prtext (char *beg, char *lim)
{
static bool used; /* Avoid printing SEP_STR_GROUP before any output. */
char eol = eolbyte;
@@ -1134,7 +1166,7 @@ prtext (char const *beg, char const *lim)
if (!out_quiet && pending > 0)
prpending (beg);
- char const *p = beg;
+ char *p = beg;
if (!out_quiet)
{
@@ -1160,7 +1192,7 @@ prtext (char const *beg, char const *lim)
while (p < beg)
{
- char const *nl = memchr (p, eol, beg - p);
+ char *nl = memchr (p, eol, beg - p);
nl++;
prline (p, nl, SEP_CHAR_REJECTED);
p = nl;
@@ -1173,7 +1205,7 @@ prtext (char const *beg, char const *lim)
/* One or more lines are output. */
for (n = 0; p < lim && n < outleft; n++)
{
- char const *nl = memchr (p, eol, lim - p);
+ char *nl = memchr (p, eol, lim - p);
nl++;
if (!out_quiet)
prline (p, nl, SEP_CHAR_SELECTED);
@@ -1220,13 +1252,12 @@ zap_nuls (char *p, char *lim, char eol)
between matching lines if OUT_INVERT is true). Return a count of
lines printed. Replace all NUL bytes with NUL_ZAPPER as we go. */
static intmax_t
-grepbuf (char const *beg, char const *lim)
+grepbuf (char *beg, char const *lim)
{
intmax_t outleft0 = outleft;
- char const *p;
- char const *endp;
+ char *endp;
- for (p = beg; p < lim; p = endp)
+ for (char *p = beg; p < lim; p = endp)
{
size_t match_size;
size_t match_offset = execute (p, lim - p, &match_size, NULL);
@@ -1237,15 +1268,15 @@ grepbuf (char const *beg, char const *lim)
match_offset = lim - p;
match_size = 0;
}
- char const *b = p + match_offset;
+ char *b = p + match_offset;
endp = b + match_size;
/* Avoid matching the empty line at the end of the buffer. */
if (!out_invert && b == lim)
break;
if (!out_invert || p < b)
{
- char const *prbeg = out_invert ? p : b;
- char const *prend = out_invert ? b : endp;
+ char *prbeg = out_invert ? p : b;
+ char *prend = out_invert ? b : endp;
prtext (prbeg, prend);
if (!outleft || done_on_match)
{
@@ -1266,7 +1297,6 @@ static intmax_t
grep (int fd, struct stat const *st)
{
intmax_t nlines, i;
- enum textbin textbin;
size_t residue, save;
char oldc;
char *beg;
@@ -1275,6 +1305,7 @@ grep (int fd, struct stat const *st)
char nul_zapper = '\0';
bool done_on_match_0 = done_on_match;
bool out_quiet_0 = out_quiet;
+ bool has_nulls = false;
if (! reset (fd, st))
return 0;
@@ -1286,6 +1317,7 @@ grep (int fd, struct stat const *st)
after_last_match = 0;
pending = 0;
skip_nuls = skip_empty_lines && !eol;
+ encoding_error_output = false;
seek_data_failed = false;
nlines = 0;
@@ -1298,26 +1330,20 @@ grep (int fd, struct stat const *st)
return 0;
}
- if (binary_files == TEXT_BINARY_FILES)
- textbin = TEXTBIN_TEXT;
- else
+ for (bool firsttime = true; ; firsttime = false)
{
- textbin = file_textbin (bufbeg, buflim - bufbeg, fd, st);
- if (textbin_is_binary (textbin))
+ if (!has_nulls && eol && binary_files != TEXT_BINARY_FILES
+ && (buf_has_nulls (bufbeg, buflim - bufbeg)
+ || (firsttime && file_must_have_nulls (buflim - bufbeg, fd, st))))
{
+ has_nulls = true;
if (binary_files == WITHOUT_MATCH_BINARY_FILES)
return 0;
done_on_match = out_quiet = true;
nul_zapper = eol;
skip_nuls = skip_empty_lines;
}
- else if (execute != Pexecute)
- textbin = TEXTBIN_TEXT;
- }
- for (;;)
- {
- input_textbin = textbin;
lastnl = bufbeg;
if (lastout)
lastout = bufbeg;
@@ -1368,13 +1394,8 @@ grep (int fd, struct stat const *st)
}
/* Detect whether leading context is adjacent to previous output. */
- if (lastout)
- {
- if (textbin == TEXTBIN_UNKNOWN)
- textbin = TEXTBIN_TEXT;
- if (beg != lastout)
- lastout = 0;
- }
+ if (beg != lastout)
+ lastout = 0;
/* Handle some details and read more data to scan. */
save = residue + lim - beg;
@@ -1387,22 +1408,6 @@ grep (int fd, struct stat const *st)
suppressible_error (filename, errno);
goto finish_grep;
}
-
- /* If the file's textbin has not been determined yet, assume
- it's binary if the next input buffer suggests so. */
- if (textbin == TEXTBIN_UNKNOWN)
- {
- enum textbin tb = buffer_textbin (bufbeg, buflim - bufbeg);
- if (textbin_is_binary (tb))
- {
- if (binary_files == WITHOUT_MATCH_BINARY_FILES)
- return 0;
- textbin = tb;
- done_on_match = out_quiet = true;
- nul_zapper = eol;
- skip_nuls = skip_empty_lines;
- }
- }
}
if (residue)
{
@@ -1416,7 +1421,7 @@ grep (int fd, struct stat const *st)
finish_grep:
done_on_match = done_on_match_0;
out_quiet = out_quiet_0;
- if (textbin_is_binary (textbin) && !out_quiet && nlines != 0)
+ if ((has_nulls || encoding_error_output) && !out_quiet && nlines != 0)
printf (_("Binary file %s matches\n"), filename);
return nlines;
}
diff --git a/src/grep.h b/src/grep.h
index 02052b4..e70e28f 100644
--- a/src/grep.h
+++ b/src/grep.h
@@ -29,22 +29,4 @@ extern bool match_words; /* -w */
extern bool match_lines; /* -x */
extern char eolbyte; /* -z */
-/* An enum textbin describes the file's type, inferred from data read
- before the first line is selected for output. */
-enum textbin
- {
- /* Binary, as it contains null bytes and the -z option is not in effect,
- or it contains encoding errors. */
- TEXTBIN_BINARY = -1,
-
- /* Not known yet. Only text has been seen so far. */
- TEXTBIN_UNKNOWN = 0,
-
- /* Text. */
- TEXTBIN_TEXT = 1
- };
-
-/* Input file type. */
-extern enum textbin input_textbin;
-
#endif
diff --git a/src/pcresearch.c b/src/pcresearch.c
index 5451029..ef2f241 100644
--- a/src/pcresearch.c
+++ b/src/pcresearch.c
@@ -157,32 +157,13 @@ Pexecute (char const *buf, size_t size, size_t *match_size,
int e = PCRE_ERROR_NOMATCH;
char const *line_end;
- /* If the input type is unknown, the caller is still testing the
- input, which means the current buffer cannot contain encoding
- errors and a multiline search is typically more efficient.
- Otherwise, a single-line search is typically faster, so that
- pcre_exec doesn't waste time validating the entire input
- buffer. */
- bool multiline = input_textbin == TEXTBIN_UNKNOWN;
-
for (; p < buf + size; p = line_start = line_end + 1)
{
- bool too_big;
-
- if (multiline)
- {
- size_t pcre_size_max = MIN (INT_MAX, SIZE_MAX - 1);
- size_t scan_size = MIN (pcre_size_max + 1, buf + size - p);
- line_end = memrchr (p, eolbyte, scan_size);
- too_big = ! line_end;
- }
- else
- {
- line_end = memchr (p, eolbyte, buf + size - p);
- too_big = INT_MAX < line_end - p;
- }
-
- if (too_big)
+ /* A single-line search is typically faster, so that
+ pcre_exec doesn't waste time validating the entire input
+ buffer. */
+ line_end = memchr (p, eolbyte, buf + size - p);
+ if (INT_MAX < line_end - p)
error (EXIT_TROUBLE, 0, _("exceeded PCRE's line length limit"));
for (;;)
@@ -209,27 +190,11 @@ Pexecute (char const *buf, size_t size, size_t *match_size,
int options = 0;
if (!bol)
options |= PCRE_NOTBOL;
- if (multiline)
- options |= PCRE_NO_UTF8_CHECK;
e = pcre_exec (cre, extra, p, search_bytes, 0,
options, sub, NSUB);
if (e != PCRE_ERROR_BADUTF8)
- {
- if (0 < e && multiline && sub[1] - sub[0] != 0)
- {
- char const *nl = memchr (p + sub[0], eolbyte,
- sub[1] - sub[0]);
- if (nl)
- {
- /* This match crosses a line boundary; reject it. */
- p += sub[0];
- line_end = nl;
- continue;
- }
- }
- break;
- }
+ break;
int valid_bytes = sub[0];
/* Try to match the string before the encoding error.
@@ -291,15 +256,6 @@ Pexecute (char const *buf, size_t size, size_t *match_size,
beg = matchbeg;
end = matchend;
}
- else if (multiline)
- {
- char const *prev_nl = memrchr (line_start - 1, eolbyte,
- matchbeg - (line_start - 1));
- char const *next_nl = memchr (matchend, eolbyte,
- line_end + 1 - matchend);
- beg = prev_nl + 1;
- end = next_nl + 1;
- }
else
{
beg = line_start;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2f69835..47b9883 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -55,6 +55,7 @@ TESTS = \
dfaexec-multibyte \
empty \
empty-line \
+ encoding-error \
epipe \
equiv-classes \
ere \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 4e843bf..4aaebdf 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1359,6 +1359,7 @@ TESTS = \
dfaexec-multibyte \
empty \
empty-line \
+ encoding-error \
epipe \
equiv-classes \
ere \
@@ -1913,6 +1914,13 @@ empty-line.log: empty-line
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+encoding-error.log: encoding-error
+ @p='encoding-error'; \
+ b='encoding-error'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
epipe.log: epipe
@p='epipe'; \
b='epipe'; \
diff --git a/tests/encoding-error b/tests/encoding-error
new file mode 100755
index 0000000..fe52de2
--- a/dev/null
+++ b/tests/encoding-error
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Test grep's behavior on encoding errors.
+#
+# Copyright 2015 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+require_en_utf8_locale_
+
+LC_ALL=en_US.UTF-8
+export LC_ALL
+
+printf 'Alfred Jones\n' > a || framework_failure_
+printf 'John Smith\n' >j || framework_failure_
+printf 'Pedro P\xe9rez\n' >p || framework_failure_
+cat a p j >in || framework_failure_
+
+fail=0
+
+grep '^A' in >out || fail=1
+compare a out || fail=1
+
+grep '^P' in >out || fail=1
+printf 'Binary file in matches\n' >exp || framework_failure_
+compare exp out || fail=1
+
+grep '^J' in >out || fail=1
+compare j out || fail=1
+
+grep '^X' in >out
+test $? = 1 || fail=1
+compare /dev/null out || fail=1
+
+grep -a . in >out || fail=1
+compare in out
+
+Exit $fail

View file

@ -0,0 +1,146 @@
From 83a95bd8c8561875b948cadd417c653dbe7ef2e2 Mon Sep 17 00:00:00 2001
From: Yuliy Pisetsky <ypisetsky@fb.com>
Date: Thu, 01 Jan 2015 23:36:55 +0000
Subject: grep -F: fix a heap buffer (read) overrun
grep's read buffer is often filled to its full size, except when
reading the final buffer of a file. In that case, the number of
bytes read may be far less than the size of the buffer. However, for
certain unusual pattern/text combinations, grep -F would mistakenly
examine bytes in that uninitialized region of memory when searching
for a match. With carefully chosen inputs, one can cause grep -F to
read beyond the end of that buffer altogether. This problem arose via
commit v2.18-90-g73893ff with the introduction of a more efficient
heuristic using what is now the memchr_kwset function. The use of
that function in bmexec_trans could leave TP much larger than EP,
and the subsequent call to bm_delta2_search would mistakenly access
beyond end of the main input read buffer.
* src/kwset.c (bmexec_trans): When TP reaches or exceeds EP,
do not call bm_delta2_search.
* tests/kwset-abuse: New file.
* tests/Makefile.am (TESTS): Add it.
* THANKS.in: Update.
* NEWS (Bug fixes): Mention it.
Prior to this patch, this command would trigger a UMR:
printf %0360db 0 | valgrind src/grep -F $(printf %019dXb 0)
Use of uninitialised value of size 8
at 0x4142BE: bmexec_trans (kwset.c:657)
by 0x4143CA: bmexec (kwset.c:678)
by 0x414973: kwsexec (kwset.c:848)
by 0x414DC4: Fexecute (kwsearch.c:128)
by 0x404E2E: grepbuf (grep.c:1238)
by 0x4054BF: grep (grep.c:1417)
by 0x405CEB: grepdesc (grep.c:1645)
by 0x405EC1: grep_command_line_arg (grep.c:1692)
by 0x4077D4: main (grep.c:2570)
See the accompanying test for how to trigger the heap buffer overrun.
Thanks to Nima Aghdaii for testing and finding numerous
ways to break early iterations of this patch.
---
--- a/THANKS.in
+++ b/THANKS.in
@@ -62,6 +62,7 @@ Michael Aichlmayr mikla@nx.com
Miles Bader miles@ccs.mt.nec.co.jp
Mirraz Mirraz mirraz1@rambler.ru
Nelson H. F. Beebe beebe@math.utah.edu
+Nima Aghdaii naghdaii@fb.com
Olaf Kirch okir@ns.lst.de
Paul Kimoto kimoto@spacenet.tn.cornell.edu
Péter Radics mitchnull@gmail.com
diff --git a/src/kwset.c b/src/kwset.c
index 6d21893..998dbfe 100644
--- a/src/kwset.c
+++ b/src/kwset.c
@@ -643,6 +643,8 @@ bmexec_trans (kwset_t kwset, char const *text, size_t size)
if (! tp)
return -1;
tp++;
+ if (ep <= tp)
+ break;
}
}
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 217a731..2f69835 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -72,6 +72,7 @@ TESTS = \
inconsistent-range \
invalid-multibyte-infloop \
khadafy \
+ kwset-abuse \
long-line-vs-2GiB-read \
match-lines \
max-count-overread \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index e40a070..9ecafe7 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1376,6 +1376,7 @@ TESTS = \
inconsistent-range \
invalid-multibyte-infloop \
khadafy \
+ kwset-abuse \
long-line-vs-2GiB-read \
match-lines \
max-count-overread \
@@ -2030,6 +2031,13 @@
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+kwset-abuse.log: kwset-abuse
+ @p='kwset-abuse'; \
+ b='kwset-abuse'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
long-line-vs-2GiB-read.log: long-line-vs-2GiB-read
@p='long-line-vs-2GiB-read'; \
diff --git a/tests/kwset-abuse b/tests/kwset-abuse
new file mode 100755
index 0000000..6d8ec0c
--- a/dev/null
+++ b/tests/kwset-abuse
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Evoke a segfault in a hard-to-reach code path of kwset.c.
+# This bug affected grep versions 2.19 through 2.21.
+#
+# Copyright (C) 2015 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+fail=0
+
+# This test case chooses a haystack of size 260,000, since prodding
+# with gdb showed a reallocation slightly larger than that in fillbuf.
+# To reach the buggy code, the needle must have length < 1/11 that of
+# the haystack, and 10,000 is a nice round number that fits the bill.
+printf '%0260000dXy\n' 0 | grep -F $(printf %010000dy 0)
+
+test $? = 1 || fail=1
+
+Exit $fail
--
cgit v0.9.0.2

View file

@ -0,0 +1,30 @@
diff --git a/src/grep.c b/src/grep.c
index e3461a7..50a9868 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -1757,17 +1757,20 @@ Output control:\n\
-D, --devices=ACTION how to handle devices, FIFOs and sockets;\n\
ACTION is 'read' or 'skip'\n\
-r, --recursive like --directories=recurse\n\
- -R, --dereference-recursive likewise, but follow all symlinks\n\
+ -R, --dereference-recursive\n\
+ likewise, but follow all symlinks\n\
"));
printf (_("\
- --include=FILE_PATTERN search only files that match FILE_PATTERN\n\
- --exclude=FILE_PATTERN skip files and directories matching\
+ --include=FILE_PATTERN\n\
+ search only files that match FILE_PATTERN\n\
+ --exclude=FILE_PATTERN\n\
+ skip files and directories matching\
FILE_PATTERN\n\
--exclude-from=FILE skip files matching any file pattern from FILE\n\
- --exclude-dir=PATTERN directories that match PATTERN will be skipped.\n\
+ --exclude-dir=PATTERN directories that match PATTERN will be skipped.\n\
"));
printf (_("\
- -L, --files-without-match print only names of FILEs containing no match\n\
+ -L, --files-without-match print only names of FILEs containing no match\n\
-l, --files-with-matches print only names of FILEs containing matches\n\
-c, --count print only a count of matching lines per FILE\n\
-T, --initial-tab make tabs line up (if needed)\n\

View file

@ -0,0 +1,61 @@
diff --git a/doc/grep.in.1 b/doc/grep.in.1
index b6362ee..5a1e3ea 100644
--- a/doc/grep.in.1
+++ b/doc/grep.in.1
@@ -314,7 +314,7 @@ Print
.I NUM
lines of trailing context after matching lines.
Places a line containing a group separator
-.RB ( \-\^\- )
+.RB "(described under " \-\^\-group\-separator )
between contiguous groups of matches.
With the
.B \-o
@@ -327,7 +327,7 @@ Print
.I NUM
lines of leading context before matching lines.
Places a line containing a group separator
-.RB ( \-\^\- )
+.RB "(described under " \-\^\-group\-separator )
between contiguous groups of matches.
With the
.B \-o
@@ -340,13 +340,24 @@ Print
.I NUM
lines of output context.
Places a line containing a group separator
-.RB ( \-\^\- )
+.RB "(described under " \-\^\-group\-separator )
between contiguous groups of matches.
With the
.B \-o
or
.B \-\^\-only\-matching
option, this has no effect and a warning is given.
+.TP
+.BI \-\^\-group\-separator= SEP
+Use
+.I SEP
+as a group separator. By default
+.I SEP
+is double hyphen
+.RB ( \-\^\- ).
+.TP
+.B \-\^\-no\-group-separator
+Use empty string as a group separator.
.SS "File and Directory Selection"
.TP
.BR \-a ", " \-\^\-text
diff --git a/src/grep.c b/src/grep.c
index 8dbf86e..e3461a7 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -1781,6 +1781,8 @@ Context control:\n\
"));
printf (_("\
-NUM same as --context=NUM\n\
+ --group-separator=SEP use SEP as a group separator\n\
+ --no-group-separator use empty string as a group separator\n\
--color[=WHEN],\n\
--colour[=WHEN] use markers to highlight the matching strings;\n\
WHEN is 'always', 'never', or 'auto'\n\

View file

@ -0,0 +1,24 @@
diff --git a/doc/grep.in.1 b/doc/grep.in.1
index 5a1e3ea..3f633ea 100644
--- a/doc/grep.in.1
+++ b/doc/grep.in.1
@@ -478,6 +478,7 @@ Search only files whose base name matches
.BR \-r ", " \-\^\-recursive
Read all files under each directory, recursively,
following symbolic links only if they are on the command line.
+Note that if no file operand is given, grep searches the working directory.
This is equivalent to the
.B "\-d recurse"
option.
diff --git a/doc/grep.texi b/doc/grep.texi
index da9a1be..63016bd 100644
--- a/doc/grep.texi
+++ b/doc/grep.texi
@@ -698,6 +698,7 @@ For each directory operand,
read and process all files in that directory, recursively.
Follow symbolic links on the command line, but skip symlinks
that are encountered recursively.
+Note that if no file operand is given, grep searches the working directory.
This is the same as the @samp{--directories=recurse} option.
@item -R

View file

@ -0,0 +1,26 @@
diff --git a/tests/pcre-count b/tests/pcre-count
--- a/tests/pcre-count
+++ b/tests/pcre-count
@@ -13,11 +13,17 @@ require_pcre_
fail=0
-printf 'a\n%032768d\nb\x0\n%032768d\na\n' 0 0 > in
+printf 'a\n%032768d\nb\0\n%032768d\na\n' 0 0 > in || framework_failure_
-LC_ALL=C grep -P 'a' in | wc -l > exp
+# grep will discover that the input is a binary file sooner if the
+# page size is larger, so allow for either possible output.
+printf 'a\nBinary file in matches\n' >exp1a || framework_failure_
+printf 'Binary file in matches\n' >exp1b || framework_failure_
+LC_ALL=C grep -P 'a' in >out || fail=1
+compare exp1a out || compare exp1b out || fail=1
-LC_ALL=C grep -Pc 'a' in > out || fail=1
-compare exp out || fail=1
+printf '2\n' >exp2 || framework_failure_
+LC_ALL=C grep -Pc 'a' in >out || fail=1
+compare exp2 out || fail=1
Exit $fail

View file

@ -1,38 +0,0 @@
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 223088f..315ced7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -195,7 +195,6 @@ TESTS = \
word-delim-multibyte \
word-multi-file \
word-multibyte \
- write-error-msg \
y2038-vs-32-bit \
yesno \
z-anchor-newline
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 3270d30..33dcd8a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -2729,7 +2729,6 @@ TESTS = \
word-delim-multibyte \
word-multi-file \
word-multibyte \
- write-error-msg \
y2038-vs-32-bit \
yesno \
z-anchor-newline
@@ -3970,13 +3969,6 @@ word-multibyte.log: word-multibyte
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-write-error-msg.log: write-error-msg
- @p='write-error-msg'; \
- b='write-error-msg'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
y2038-vs-32-bit.log: y2038-vs-32-bit
@p='y2038-vs-32-bit'; \
b='y2038-vs-32-bit'; \

View file

@ -1,23 +0,0 @@
diff --git a/src/grep.c b/src/grep.c
index a530988..b6f6ee3 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -2023,7 +2023,8 @@ Output control:\n\
-D, --devices=ACTION how to handle devices, FIFOs and sockets;\n\
ACTION is 'read' or 'skip'\n\
-r, --recursive like --directories=recurse\n\
- -R, --dereference-recursive likewise, but follow all symlinks\n\
+ -R, --dereference-recursive\n\
+ likewise, but follow all symlinks\n\
"));
printf (_("\
--include=GLOB search only files that match GLOB (a file pattern)"
@@ -2033,7 +2034,7 @@ Output control:\n\
--exclude-dir=GLOB skip directories that match GLOB\n\
"));
printf (_("\
- -L, --files-without-match print only names of FILEs with no selected lines\n\
+ -L, --files-without-match print only names of FILEs with no selected lines\n\
-l, --files-with-matches print only names of FILEs with selected lines\n\
-c, --count print only a count of selected lines per FILE\n\
-T, --initial-tab make tabs line up (if needed)\n\

File diff suppressed because it is too large Load diff

342
grep.spec
View file

@ -1,43 +1,39 @@
%define _bindir /bin
Summary: Pattern matching utilities
Name: grep
Version: 3.12
Release: 2%{?dist}
License: GPL-3.0-or-later AND LGPL-3.0-or-later AND LGPL-2.1-or-later AND GPL-2.0-or-later AND LGPL-2.0-or-later AND GFDL-1.3-no-invariants-or-later
URL: https://www.gnu.org/software/grep/
Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz
Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig
Source2: https://savannah.gnu.org/project/release-gpgkeys.php?group=grep&download=1'#/grep-keyring.gpg
Source3: colorgrep.sh
Source4: colorgrep.csh
Source5: GREP_COLORS
Source6: grepconf.sh
Version: 2.21
Release: 9%{?dist}
License: GPLv3+
Group: Applications/Text
Source: ftp://ftp.gnu.org/pub/gnu/grep/grep-%{version}.tar.xz
Source1: colorgrep.sh
Source2: colorgrep.csh
Source3: GREP_COLORS
Source4: grepconf.sh
# upstream ticket 39444
Patch0: grep-2.21-man-fix-gs.patch
# upstream ticket 39445
Patch: grep-3.5-help-align.patch
# upstream ticket 77800
Patch: grep-3.12-test-write-error-msg-drop.patch
BuildRequires: gcc
BuildRequires: pcre2-devel
BuildRequires: texinfo
BuildRequires: gettext
BuildRequires: autoconf
BuildRequires: automake
# temporal for the gnulib patch
BuildRequires: gettext-devel
Buildrequires: glibc-all-langpacks
BuildRequires: perl(FileHandle)
BuildRequires: make
BuildRequires: gnupg2
Patch1: grep-2.21-help-align.patch
# fix buffer overrun for grep -F, rhbz#1183653
Patch2: grep-2.21-buf-overrun-fix.patch
# backported from upstream
# http://git.savannah.gnu.org/cgit/grep.git/commit/?id=c8b9364d5900a40809827aee6cc53705073278f6
Patch3: grep-2.21-recurse-behaviour-change-doc.patch
# backported from upstream
Patch4: grep-2.21-better-encoding-errors-handling.patch
# backported from upstream, upstream bug#22028
Patch5: grep-2.21-Pc-consistent-results.patch
# backported from upstream, upstream bug#22350
Patch6: grep-2.21-test-pcre-count-fix.patch
URL: http://www.gnu.org/software/grep/
Requires(post): /sbin/install-info
Requires(preun): /sbin/install-info
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: pcre-devel >= 3.9-10, texinfo, gettext
BuildRequires: autoconf automake
# https://fedorahosted.org/fpc/ticket/174
Provides: bundled(gnulib)
# for backward compatibility (rhbz#1540485)
Provides: /bin/grep
Provides: /bin/fgrep
Provides: /bin/egrep
%description
The GNU versions of commonly used grep utilities. Grep searches through
@ -47,8 +43,18 @@ prints the matching lines. GNU's grep utilities include grep, egrep and fgrep.
GNU grep is needed by many scripts, so it shall be installed on every system.
%prep
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -p1
%setup -q
%patch0 -p1 -b .man-fix-gs
%patch1 -p1 -b .help-align
%patch2 -p1 -b .buf-overrun-fix
%patch3 -p1 -b .recurse-behaviour-change-doc
%patch4 -p1 -b .better-encoding-errors-handling
%patch5 -p1 -b .Pc-consistent-results
%patch6 -p1 -b .test-pcre-count-fix
chmod 755 tests/kwset-abuse
chmod 755 tests/encoding-error
chmod 755 tests/pcre-count
%build
%global BUILD_FLAGS $RPM_OPT_FLAGS
@ -60,25 +66,40 @@ GNU grep is needed by many scripts, so it shall be installed on every system.
%global BUILD_FLAGS %{BUILD_FLAGS} -mlong-double-64
%endif
%configure --without-included-regex --disable-silent-rules CFLAGS="%{BUILD_FLAGS}"
%make_build
%configure --without-included-regex --disable-silent-rules \
CPPFLAGS="-I%{_includedir}/pcre" CFLAGS="%{BUILD_FLAGS}"
make %{?_smp_mflags}
%install
%make_install
rm -rf ${RPM_BUILD_ROOT}
make %{?_smp_mflags} DESTDIR=$RPM_BUILD_ROOT install
gzip $RPM_BUILD_ROOT%{_infodir}/grep*
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
install -pm 644 %{SOURCE3} %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
install -pm 644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}
install -Dpm 755 %{SOURCE6} $RPM_BUILD_ROOT%{_libexecdir}/grepconf.sh
install -pm 644 %{SOURCE1} %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
install -pm 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}
install -Dpm 755 %{SOURCE4} $RPM_BUILD_ROOT%{_libexecdir}/grepconf.sh
%find_lang %name
%check
make check
%clean
rm -rf ${RPM_BUILD_ROOT}
%post
/sbin/install-info --quiet --info-dir=%{_infodir} %{_infodir}/grep.info.gz || :
%preun
if [ $1 = 0 ]; then
/sbin/install-info --quiet --info-dir=%{_infodir} --delete %{_infodir}/grep.info.gz || :
fi
%files -f %{name}.lang
%doc AUTHORS THANKS TODO NEWS README
%defattr(-,root,root,-)
%doc ABOUT-NLS AUTHORS THANKS TODO NEWS README ChangeLog
%{!?_licensedir:%global license %%doc}
%license COPYING
%{_bindir}/*
@ -89,249 +110,24 @@ make check
%{_libexecdir}/grepconf.sh
%changelog
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.12-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Apr 14 2025 Jaroslav Škarvada <jskarvad@redhat.com> - 3.12-1
- New version
Resolves: rhbz#2358901
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.11-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.11-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Mon Apr 29 2024 Lukáš Zaoral <lzaoral@redhat.com> - 3.11-8
- remove redundant dependency on libsigsegv (RHEL-34664)
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.11-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.11-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Aug 10 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.11-5
- Updated SPDX license expression
* Wed Aug 9 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.11-4
- Converted license to SPDX
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.11-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jul 13 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.11-2
- Fixed egrep/fgrep aliases
Resolves: rhbz#2215713
* Tue Jun 6 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.11-1
- New version
Resolves: rhbz#2181063
* Thu Mar 23 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.10-1
- New version
Resolves: rhbz#2181063
* Tue Mar 7 2023 Jaroslav Škarvada <jskarvad@redhat.com> - 3.9-1
- New version
Resolves: rhbz#2175526
- Added sources verification
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.8-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Jan 3 2023 Florian Weimer <fweimer@redhat.com> - 3.8-2
- Fix C99 compatibility issue in the configure script
* Mon Sep 5 2022 Jaroslav Škarvada <jskarvad@redhat.com> - 3.8-1
- New version
Resolves: rhbz#2123935
- Switchd to pcre2
Resolves: rhbz#1755491
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Fri Apr 8 2022 Davide Cavalca <dcavalca@fedoraproject.org> - 3.7-3
- Gate perl-FileHandle dependency to f33 onwards
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Aug 16 2021 Jaroslav Škarvada <jskarvad@redhat.com> - 3.7-1
- New version
Resolves: rhbz#1993631
- Temporarily switch to the included regex until glibc bug (glibc#11053)
is fixed
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.6-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jun 23 2021 Jaroslav Škarvada <jskarvad@redhat.com> - 3.6-3
- Fixed stack overflow detection
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Nov 9 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 3.6-1
- New version
Resolves: rhbz#1895797
* Wed Sep 30 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 3.5-1
- New version
Resolves: rhbz#1883086
* Wed Aug 26 2020 Adam Williamson <awilliam@redhat.com> - 3.4-5
- Backport fix for upstream #28105 to fix zgrep
Resolves: rhbz#1872913
- Remove some non-portable tests that fail on armv7hl (Paul Eggert)
Resolves: rhbz#1863830
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.4-4
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 13 2020 Tom Stellard <tstellar@redhat.com> - 3.4-2
- Use make macros
- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
* Wed Apr 1 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 3.4-1
- New version
Resolves: rhbz#1818417
- Added all glibc langpacks to allow more locale sensitive tests to run
- Added perl-FileHandle requirement for the filename-lineno.pl test
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed Apr 24 2019 Björn Esser <besser82@fedoraproject.org> - 3.3-2
- Remove hardcoded gzip suffix from GNU info pages
* Wed Apr 10 2019 Jaroslav Škarvada <jskarvad@redhat.com> - 3.3-1
- New version
Resolves: rhbz#1698044
- Updated patches
- Dropped glibc-2.28-fix patch (not needed)
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Aug 9 2018 Jaroslav Škarvada <jskarvad@redhat.com> - 3.1-8
- Fixed FTBFS with glibc-2.28
Resolves: rhbz#1604263
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Jun 19 2018 Jaroslav Škarvada <jskarvad@redhat.com> - 3.1-6
- Dropped install-info
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Fri Feb 2 2018 Jaroslav Škarvada <jskarvad@redhat.com> - 3.1-4
- Moved binaries to /usr/bin
Resolves: rhbz#1540485
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Mon Jul 3 2017 Jaroslav Škarvada <jskarvad@redhat.com> - 3.1-1
- New version
Related: rhbz#1421129
- Updated patches
* Fri Feb 10 2017 Jaroslav Škarvada <jskarvad@redhat.com> - 3.0-1
- New version
Resolves: rhbz#1421129
* Wed Feb 8 2017 Jaroslav Škarvada <jskarvad@redhat.com> - 2.28-1
- New version
Resolves: rhbz#1419921
- De-fuzzified patches
* Wed Dec 7 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.27-1
- New version
Resolves: rhbz#1402379
- De-fuzzified patches
* Wed Oct 5 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.26-2
- Re-enabled 'make check', glibc seems fixed
* Mon Oct 3 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.26-1
- New version
Resolves: rhbz#1381203
- Disabled 'make check' due to glibc bug rhbz#1381582
* Fri Apr 22 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.25-1
- New version
Resolves: rhbz#1329627
- De-fuzzified patches
* Fri Mar 11 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.24-1
- New version
Resolves: rhbz#1316890
* Fri Feb 5 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.23-1
- New version
Resolves: rhbz#1305035
- Dropped disable-performance-related-tests, better-encoding-errors-handling,
Pc-consistent-results, and test-pcre-count-fix patches (all upstreamed)
- De-fuzzified man-fx-gs, and help-align patches
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.22-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Tue Jan 12 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-6
* Tue Jan 12 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-9
- Fixed pcre-count test on secondary architectures
(byt test-pcre-count-fix patch)
Resolves: rhbz#1296842
* Wed Jan 6 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-5
* Wed Jan 6 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-8
- Used latest upstream patch for bug 1269014 to fix regression,
fixed order of patches
Resolves: rhbz#1269014
* Tue Jan 5 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-4
* Tue Jan 5 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-7
- Improved encoding errors handling (by better-encoding-errors-handling patch)
Resolves: rhbz#1219141
- kwset-abuse test no longer needs to be explicitly set executable
* Tue Dec 1 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-3
* Wed Dec 2 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-6
- Fixed grep to be consistent in 'grep -Pc' and 'grep -P | wc -l'
Resolves: rhbz#1269014
* Thu Nov 5 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-2
- Disabled performance related tests
(by disable-performance-related-tests patch), patch backported from upstream
- Dropped disable-long-pattern-perf-test patch (not needed, covered by
previous patch)
Resolves: rhbz#1278428
* Mon Nov 2 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-1
- New version
Resolves: rhbz#1277113
- Dropped buf-overrun-fix, recurse-behaviour-change-doc, gnulib
patches (all upstreamed)
- Minor spec cleanup to be consistent with whitespaces
* Sun Aug 2 2015 Peter Robinson <pbrobinson@fedoraproject.org> 2.21-7
- Minor spec cleanups and modifications
- Drop Changelog, details in NEWS
- Add gnulib patch to fix FTBFS with perl 5.22
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.21-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Tue Apr 7 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-5
- Documented change in behaviour of recurse option
Resolves: rhbz#1178305

View file

@ -1,6 +0,0 @@
summary: Test plan with all Fedora tests
discover:
how: fmf
url: https://src.fedoraproject.org/tests/grep.git
execute:
how: tmt

View file

@ -1,2 +1 @@
SHA512 (grep-3.12.tar.xz) = c54b4db5a8b9afe098c088decd94977746305284d716666a60bac82b4edc0fae4acf828970b5b6fc7d58ecd549f638e17e6958f33a71fedcc7d7415b9228b161
SHA512 (grep-3.12.tar.xz.sig) = 333755fd9e5879436789a19e9593667d6fb96c2d1b876a1c391eb9cd75d10bb7fbc10215db9838280e6006790c818ef4583b1ae22318a833a5b69264ca15dbf1
43c48064d6409862b8a850db83c8038a grep-2.21.tar.xz