GNU bug report logs - #49925
cat -E interprets sentinel newline at the end of buffer as an actual newline after a \r

Previous Next

Package: coreutils;

Reported by: Michael Debertol <michael.debertol <at> gmail.com>

Date: Sat, 7 Aug 2021 13:08:01 UTC

Severity: normal

Done: Pádraig Brady <P <at> draigBrady.com>

Bug is archived. No further changes may be made.

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Michael Debertol <michael.debertol <at> gmail.com>
To: bug-coreutils <at> gnu.org
Subject: cat -E interprets sentinel newline at the end of buffer as an actual
 newline after a \r
Date: Sat, 7 Aug 2021 15:07:32 +0200
Hi,

after https://lists.gnu.org/archive/html/coreutils/2021-02/msg00003.html 
(unreleased), the behavior of cat -E was changed so that it prints "^M$" 
for "\r\n" line endings.

Whenever it sees a \r "cat -E" checks if the byte after is a \n, however 
that \n might be the sentinel value that is inserted at the end of a buffer.

This is a problem in two cases:

- When a \r is at the end of the input. `printf "\r" | cat -E` will 
print "^M", even though there is no "\n" after the "\r". FWIW, 
tests/misc/cat-E.sh expects a "^M" for a trailing "\r", but I think 
that's wrong.

- When the file is too big to fit into one buffer. If you try to "cat 
-E" a big file (mutliple megabytes) that consists of only "\r", cat will 
print a few "^M" whenever it hits the end of a buffer in the middle of 
the file and at the end.

Michael





This bug report was last modified 3 years and 292 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.