diff options
author | Jim Meyering <meyering@redhat.com> | 2012-08-15 12:30:44 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2012-08-17 09:52:19 +0200 |
commit | eb3f5b3b3de8c6ca005a701f09bff43d778aece7 (patch) | |
tree | 49f8c3d7206fda8a2bd2979a73ba07ad69b2065e /NEWS | |
parent | 0c98bfa3596c4a9f87b3c07976c47246a8ad8684 (diff) | |
download | coreutils-eb3f5b3b3de8c6ca005a701f09bff43d778aece7.tar.xz |
sort: sort --unique (-u) could cause data loss
sort -u could omit one or more lines of expected output.
This bug arose because sort recorded the most recently printed line via
reference, and if you were unlucky, the storage for that line would be
reused (overwritten) as additional input was read into memory. If you
were doubly unlucky, the new value of the "saved" line would not only
match the very next line, but if that next line were also the first in
a series of identical, not-yet-printed lines, then the corrupted "saved"
line value would result in the omission of all matching lines.
* src/sort.c (saved_line): New static/global, renamed and moved from...
(write_unique): ...here. Old name was "saved", which was too generic
for its new role as file-scoped global.
(fillbuf): With --unique, when we're about to read into a buffer that
overlaps the saved "preceding" line (saved_line), copy the line's .text
member to a realloc'd-as-needed temporary buffer and adjust the line's
key-defining members if they're set.
(overlap): New function.
* tests/misc/sort: New tests.
* NEWS (Bug fixes): Mention it.
* THANKS.in: Update.
Bug introduced via commit v8.5-89-g9face83.
Reported by Rasmus Borup Hansen in
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/23173/focus=24647
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -9,6 +9,11 @@ GNU coreutils NEWS -*- outline -*- certain options like -a, -l, -t and -x. [This bug was present in "the beginning".] + sort -u could fail to output one or more result lines. + For example, this command would fail to print "1": + (yes 7 | head -11; echo 1) | sort --p=1 -S32b -u + [bug introduced in coreutils-8.6] + ** New features rm now accepts the --dir (-d) option which makes it remove empty directories. |