grep-commit
[Top][All Lists]
Advanced

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

grep branch, master, updated. v3.11-25-gb9a8047


From: Paul Eggert
Subject: grep branch, master, updated. v3.11-25-gb9a8047
Date: Fri, 9 Feb 2024 04:07:26 -0500 (EST)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "grep".

The branch, master has been updated
       via  b9a8047099d2388c15e6ad39e7b8c91c6633096c (commit)
      from  443961a929a952dd653255ca6c0947d416d9c1a3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/grep.git/commit/?id=b9a8047099d2388c15e6ad39e7b8c91c6633096c


commit b9a8047099d2388c15e6ad39e7b8c91c6633096c
Author: Paul Eggert <eggert@cs.ucla.edu>
Date:   Fri Feb 9 01:06:49 2024 -0800

    grep: fix ‘grep -m2 pattern <file >/dev/null’
    
    Problem reported by Grisha Levit <https://bugs.gnu.org/68989>.
    * src/grep.c (grep, main): Don’t set done_on_match if -m is used.
    * tests/max-count-overread: Add a test case.

diff --git a/NEWS b/NEWS
index bc487ce..4294fc6 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,9 @@ GNU grep NEWS                                    -*- outline 
-*-
     1
   [bug introduced in grep 3.11]
 
+  -mN where 1 < N no longer mistakenly lseeks to end of input merely
+  because standard output is /dev/null.
+
 ** Changes in behavior
 
   On Windows platforms and on AIX in 32-bit mode, grep now supports
diff --git a/src/grep.c b/src/grep.c
index dab3be7..1256dfd 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -1558,7 +1558,11 @@ grep (int fd, struct stat const *st, bool *ineof)
           if (binary_files == WITHOUT_MATCH_BINARY_FILES)
             return 0;
           if (!count_matches)
-            done_on_match = out_quiet = true;
+            {
+              out_quiet = true;
+              if (max_count == INTMAX_MAX)
+                done_on_match = true;
+            }
           nlines_first_null = nlines;
           nul_zapper = eol;
           skip_nuls = skip_empty_lines;
@@ -2897,7 +2901,8 @@ main (int argc, char **argv)
   if ((exit_on_match | dev_null_output) || list_files != LISTFILES_NONE)
     {
       count_matches = false;
-      done_on_match = true;
+      if (max_count == INTMAX_MAX)
+        done_on_match = true;
     }
   out_quiet = count_matches | done_on_match;
 
diff --git a/tests/max-count-overread b/tests/max-count-overread
index 23c45cb..f829cc5 100755
--- a/tests/max-count-overread
+++ b/tests/max-count-overread
@@ -12,4 +12,10 @@ echo x > exp || framework_failure_
 yes x | timeout 10 grep -m1 x > out || fail=1
 compare exp out || fail=1
 
+# Make sure -m2 stops reading even when output is /dev/null.
+# In grep 3.11, it would continue reading.
+printf 'x\nx\nx\n' >in || framework_failure
+(grep -m2 x >/dev/null && head -n1) <in >out || fail=1
+compare exp out || fail=1
+
 Exit $fail

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

Summary of changes:
 NEWS                     | 3 +++
 src/grep.c               | 9 +++++++--
 tests/max-count-overread | 6 ++++++
 3 files changed, 16 insertions(+), 2 deletions(-)


hooks/post-receive
-- 
grep



reply via email to

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