From: Pádraig Brady
Date: Mon, 31 Jul 2023 11:41:26 +0000 (+0100)
Subject: tac: handle short reads on input
X-Git-Tag: v9.4~61
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=779f34e180fdcabddb24acc2829410ce8ed50fd1;p=thirdparty%2Fcoreutils.git
tac: handle short reads on input
This can be reproduced by getting the read() above 2G,
which induces a short read, thus triggering the erroneous failure.
$ truncate -s 5G 5G
$ cat 5G | TMPDIR=$PWD tac | wc -c
tac: /tmp/tacFt7txA: read error: Illegal seek
0
With the fix in place we now get:
$ cat 5G | TMPDIR=$PWD src/tac | wc -c
5368709120
* src/tac.c (tac_seekable): Use full_read() to handle short reads.
* NEWS: Mention the bug fix.
Reported at https://bugs.debian.org/1042546
---
diff --git a/NEWS b/NEWS
index 41205fa885..2b8f984ba8 100644
--- a/NEWS
+++ b/NEWS
@@ -46,6 +46,10 @@ GNU coreutils NEWS -*- outline -*-
'pr --length=1 --double-space' no longer enters an infinite loop.
[This bug was present in "the beginning".]
+ tac now handles short reads on its input. Previously it may have exited
+ erroneously, especially with large input files with no separators.
+ [This bug was present in "the beginning".]
+
'uptime' no longer incorrectly prints "0 users" on OpenBSD.
[bug introduced in coreutils-9.2]
diff --git a/src/tac.c b/src/tac.c
index 285f99a746..4c36558956 100644
--- a/src/tac.c
+++ b/src/tac.c
@@ -44,6 +44,7 @@ tac -r -s '.\|
#include