Compare commits
78 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2b244d3c0 | ||
|
|
011251225e | ||
|
|
1954ef093a | ||
|
|
cde76d400c | ||
|
|
ac5028cd3a |
||
|
|
f8e0174a60 | ||
|
|
22c850bbbc | ||
|
|
37218d9a1c | ||
|
|
1a6403d1ac | ||
|
|
0499c5d10b | ||
|
|
d31abab5f7 | ||
|
|
799f88f953 | ||
|
|
366db98e1c | ||
|
|
29a85be178 | ||
|
|
d59a190ef2 | ||
|
|
1d8b4cd378 | ||
|
|
090a9ef808 | ||
|
|
e9c80f0c51 | ||
|
|
d45159f404 | ||
|
|
627ec9a8a0 | ||
|
|
862175cb6e | ||
|
|
6b4e0363ea | ||
|
|
8ea095f9f4 | ||
|
|
6340b1ed95 | ||
|
|
817c2146f6 | ||
|
|
993a74637b | ||
|
|
75261469b1 | ||
|
|
cbb1010aa0 | ||
|
|
261a1f8c57 | ||
|
|
69bf7800ad | ||
|
|
9b15985878 | ||
|
|
15ff98af0f | ||
|
|
509816512b | ||
|
|
28284b81d5 | ||
|
|
e2669b9096 | ||
|
|
6d293fcd02 | ||
|
|
d8e43283bf | ||
|
|
02c652ed71 | ||
|
|
a1aae7177d | ||
|
|
25e281cfda | ||
|
|
04da6a4ea9 |
||
|
|
8cacf1c7ad | ||
|
|
c7109643eb | ||
|
|
78e9cd1f16 | ||
|
|
3ada89752b | ||
|
|
5e51d319e6 | ||
|
|
f46bfb5048 | ||
|
|
67e410dbfb | ||
|
|
d21284058e | ||
|
|
40e1f55e50 | ||
|
|
eccebfff98 | ||
|
|
7001f43fc9 | ||
|
|
501f9e6d87 | ||
|
|
c232695f40 | ||
|
|
f347452d64 | ||
|
|
ef9d479716 | ||
|
|
98c2bb4a4e | ||
|
|
580b49d7de | ||
|
|
94556aeb63 | ||
|
|
35d524dfdb | ||
|
|
57d1bb00e2 | ||
|
|
7f4c49be53 | ||
|
|
b6f43d343c | ||
|
|
08a2c56622 | ||
|
|
9cc608b66b | ||
|
|
f1be6b4c72 | ||
|
|
c8514cce19 | ||
|
|
97a081551e | ||
|
|
40d7c13ce2 | ||
|
|
a403fe66ef | ||
|
|
ba174f15d5 | ||
|
|
58a4acffa4 | ||
|
|
3c2c3376fe | ||
|
|
763196b31f | ||
|
|
382fd79bc2 | ||
|
|
498ee4a5ac | ||
|
|
1386273667 | ||
|
|
3ee72574b5 |
18 changed files with 4002 additions and 1114 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
|||
1
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
|||
grep-*.tar.xz
|
||||
/grep-*.tar.xz
|
||||
/grep-*.tar.xz.sig
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@ if ( $status == 1 ) then
|
|||
endif
|
||||
|
||||
alias grep 'grep --color=auto'
|
||||
alias egrep 'egrep --color=auto'
|
||||
alias fgrep 'fgrep --color=auto'
|
||||
alias egrep 'grep -E --color=auto'
|
||||
alias fgrep 'grep -F --color=auto'
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@
|
|||
/usr/libexec/grepconf.sh -c || return
|
||||
|
||||
alias grep='grep --color=auto' 2>/dev/null
|
||||
alias egrep='egrep --color=auto' 2>/dev/null
|
||||
alias fgrep='fgrep --color=auto' 2>/dev/null
|
||||
alias egrep='grep -E --color=auto' 2>/dev/null
|
||||
alias fgrep='grep -F --color=auto' 2>/dev/null
|
||||
|
|
|
|||
16
gating.yaml
Normal file
16
gating.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
--- !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}
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,671 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,146 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
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\
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
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\
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
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
|
||||
|
||||
38
grep-3.12-test-write-error-msg-drop.patch
Normal file
38
grep-3.12-test-write-error-msg-drop.patch
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
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'; \
|
||||
23
grep-3.5-help-align.patch
Normal file
23
grep-3.5-help-align.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
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\
|
||||
3637
grep-keyring.gpg
Normal file
3637
grep-keyring.gpg
Normal file
File diff suppressed because it is too large
Load diff
342
grep.spec
342
grep.spec
|
|
@ -1,39 +1,43 @@
|
|||
%define _bindir /bin
|
||||
|
||||
Summary: Pattern matching utilities
|
||||
Name: grep
|
||||
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
|
||||
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
|
||||
|
||||
# upstream ticket 39445
|
||||
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
|
||||
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
|
||||
# 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
|
||||
|
|
@ -43,18 +47,8 @@ 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
|
||||
%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
|
||||
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
|
||||
%autosetup -p1
|
||||
|
||||
%build
|
||||
%global BUILD_FLAGS $RPM_OPT_FLAGS
|
||||
|
|
@ -66,40 +60,25 @@ chmod 755 tests/pcre-count
|
|||
%global BUILD_FLAGS %{BUILD_FLAGS} -mlong-double-64
|
||||
%endif
|
||||
|
||||
%configure --without-included-regex --disable-silent-rules \
|
||||
CPPFLAGS="-I%{_includedir}/pcre" CFLAGS="%{BUILD_FLAGS}"
|
||||
make %{?_smp_mflags}
|
||||
%configure --without-included-regex --disable-silent-rules CFLAGS="%{BUILD_FLAGS}"
|
||||
%make_build
|
||||
|
||||
%install
|
||||
rm -rf ${RPM_BUILD_ROOT}
|
||||
make %{?_smp_mflags} DESTDIR=$RPM_BUILD_ROOT install
|
||||
%make_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 %{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
|
||||
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
|
||||
|
||||
%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
|
||||
%defattr(-,root,root,-)
|
||||
%doc ABOUT-NLS AUTHORS THANKS TODO NEWS README ChangeLog
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%doc AUTHORS THANKS TODO NEWS README
|
||||
%license COPYING
|
||||
|
||||
%{_bindir}/*
|
||||
|
|
@ -110,24 +89,249 @@ fi
|
|||
%{_libexecdir}/grepconf.sh
|
||||
|
||||
%changelog
|
||||
* Tue Jan 12 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-9
|
||||
* 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
|
||||
- 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.21-8
|
||||
* Wed Jan 6 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-5
|
||||
- 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.21-7
|
||||
* Tue Jan 5 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-4
|
||||
- Improved encoding errors handling (by better-encoding-errors-handling patch)
|
||||
Resolves: rhbz#1219141
|
||||
- kwset-abuse test no longer needs to be explicitly set executable
|
||||
|
||||
* Wed Dec 2 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.21-6
|
||||
* Tue Dec 1 2015 Jaroslav Škarvada <jskarvad@redhat.com> - 2.22-3
|
||||
- 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
|
||||
|
|
|
|||
6
plans/all.fmf
Normal file
6
plans/all.fmf
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
summary: Test plan with all Fedora tests
|
||||
discover:
|
||||
how: fmf
|
||||
url: https://src.fedoraproject.org/tests/grep.git
|
||||
execute:
|
||||
how: tmt
|
||||
3
sources
3
sources
|
|
@ -1 +1,2 @@
|
|||
43c48064d6409862b8a850db83c8038a grep-2.21.tar.xz
|
||||
SHA512 (grep-3.12.tar.xz) = c54b4db5a8b9afe098c088decd94977746305284d716666a60bac82b4edc0fae4acf828970b5b6fc7d58ecd549f638e17e6958f33a71fedcc7d7415b9228b161
|
||||
SHA512 (grep-3.12.tar.xz.sig) = 333755fd9e5879436789a19e9593667d6fb96c2d1b876a1c391eb9cd75d10bb7fbc10215db9838280e6006790c818ef4583b1ae22318a833a5b69264ca15dbf1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue