tac: fix mem corruption when failing to read non seekable inputs
commita39641cbb8f37c5a19dd4820c6f6719c82d3e633
authorPádraig Brady <P@draigBrady.com>
Sun, 27 Nov 2016 15:09:53 +0000 (27 15:09 +0000)
committerPádraig Brady <P@draigBrady.com>
Mon, 28 Nov 2016 13:19:24 +0000 (28 13:19 +0000)
treeee662cfc8add8265c1de488a9d281eba21c9d8a4
parent6f30a99fa537adb029283cf2ef03cb4419350e6c
tac: fix mem corruption when failing to read non seekable inputs

This was detected with ASAN, but can also be seen without ASAN with:
  $ tac - - <&-
  tac: standard input: read error: Bad file descriptor
  *** Error in `tac': malloc(): memory corruption: 0x...

* src/tac.c (copy_to_temp): Don't close our output stream on
(possibly transient) output error, or on input error.
(temp_stream): clearerr() on the stream about to be reused,
to ensure future stream use is not impacted by transient errors.
* tests/misc/tac-2-nonseekable.sh: Add a test case.
* NEWS: Mention the bug fix.
Fixes http://bugs.gnu.org/25041
NEWS
src/tac.c
tests/misc/tac-2-nonseekable.sh