From 2c03938bbe99a87b167b69a52de5a82964c79832 Mon Sep 17 00:00:00 2001 From: Funda Wang Date: Thu, 25 Sep 2025 21:26:48 +0800 Subject: [PATCH] tail: fix tailing larger number of lines in regular files --- ...ger-number-of-lines-in-regular-files.patch | 77 +++++++++++++++++++ coreutils.spec | 6 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 backport-tail-fix-tailing-larger-number-of-lines-in-regular-files.patch diff --git a/backport-tail-fix-tailing-larger-number-of-lines-in-regular-files.patch b/backport-tail-fix-tailing-larger-number-of-lines-in-regular-files.patch new file mode 100644 index 0000000..84b92ec --- /dev/null +++ b/backport-tail-fix-tailing-larger-number-of-lines-in-regular-files.patch @@ -0,0 +1,77 @@ +From 914972e80dbf82aac9ffe3ff1f67f1028e1a788b Mon Sep 17 00:00:00 2001 +From: Hannes Braun +Date: Wed, 24 Sep 2025 21:20:49 +0200 +Subject: [PATCH] tail: fix tailing larger number of lines in regular files + +* src/tail.c (file_lines): Seek to the previous block instead of the +beginning (or a little before) of the block that was just scanned. +Otherwise, the same block is read and scanned (at least partially) +again. This bug was introduced by commit v9.7-219-g976f8abc1. +* tests/tail/basic-seek.sh: Add a new test. +* tests/local.mk: Reference the new test. +--- + src/tail.c | 2 +- + tests/local.mk | 1 + + tests/tail/basic-seek.sh | 28 ++++++++++++++++++++++++++++ + 3 files changed, 34 insertions(+), 1 deletion(-) + create mode 100755 tests/tail/basic-seek.sh + +diff --git a/src/tail.c b/src/tail.c +index b8bef1d91c..c7779c77df 100644 +--- a/src/tail.c ++++ b/src/tail.c +@@ -596,7 +596,7 @@ file_lines (char const *prettyname, int fd, struct stat const *sb, + goto free_buffer; + } + +- pos = xlseek (fd, -bufsize, SEEK_CUR, prettyname); ++ pos = xlseek (fd, -(bufsize + bytes_read), SEEK_CUR, prettyname); + bytes_read = read (fd, buffer, bufsize); + if (bytes_read < 0) + { +diff --git a/tests/local.mk b/tests/local.mk +index ff5727f745..9663ee2da1 100644 +--- a/tests/local.mk ++++ b/tests/local.mk +@@ -179,6 +179,7 @@ all_tests = \ + tests/tty/tty-eof.pl \ + tests/misc/read-errors.sh \ + tests/misc/write-errors.sh \ ++ tests/tail/basic-seek.sh \ + tests/tail/inotify-hash-abuse.sh \ + tests/tail/inotify-hash-abuse2.sh \ + tests/tail/F-vs-missing.sh \ +diff --git a/tests/tail/basic-seek.sh b/tests/tail/basic-seek.sh +new file mode 100755 +index 0000000000..307ed667ea +--- /dev/null ++++ b/tests/tail/basic-seek.sh +@@ -0,0 +1,28 @@ ++#!/bin/sh ++# Verify that tail works when seeking within a file ++ ++# Copyright (C) 2025 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 . ++ ++. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src ++print_ver_ tail ++ ++yes '=================================' | ++ head -n1K > file.in || framework_failure_ ++ ++# This returned 139 in coreutils v9.8 ++test $(tail -n200 file.in | wc -l) = 200 || fail=1 ++ ++Exit $fail diff --git a/coreutils.spec b/coreutils.spec index 3d5ef23..790495c 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,6 +1,6 @@ Name: coreutils Version: 9.8 -Release: 1 +Release: 2 License: GPL-3.0-or-later Summary: A set of basic GNU tools commonly used in shell scripts Url: https://www.gnu.org/software/coreutils/ @@ -21,6 +21,7 @@ Patch7: coreutils-i18n.patch Patch8: test-skip-overlay-filesystem-because-of-no-inotify_add_watch.patch # Upstream patches +Patch6001: backport-tail-fix-tailing-larger-number-of-lines-in-regular-files.patch Patch9001: coreutils-9.7-sw.patch @@ -151,6 +152,9 @@ popd %{_mandir}/man*/* %changelog +* Thu Sep 25 2025 Funda Wang - 9.8-2 +- tail: fix tailing larger number of lines in regular files + * Tue Sep 23 2025 Funda Wang - 9.8-1 - update to 9.8 -- Gitee