commit d4f7ecd334cb666d2b58d80b40fe95d9b89f6716
parent 515525997c634c1abd6ec3e661a02f5c11858c00
Author: Eivind Uggedal <eivind@uggedal.com>
Date: Fri, 11 Mar 2016 15:06:18 +0000
uniq: always store previous line length
A bug was introduced in the NUL support refactor leading to
the length of the previous line only being saved if the
previous line was shorter than the current line. If triggered
this lead to copying too much data into the previous line buffer.
Behavior before:
printf '1234\na\n' | ./uniq
1234
a
4
Behavior after:
printf '1234\na\n' | ./uniq
1234
a
Diffstat:
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/uniq.c b/uniq.c
@@ -62,9 +62,9 @@ uniqline(FILE *ofp, struct line *l)
if (l) {
if (!prevl.data || l->len >= prevl.len) {
- prevl.len = l->len;
- prevl.data = erealloc(prevl.data, prevl.len);
+ prevl.data = erealloc(prevl.data, l->len);
}
+ prevl.len = l->len;
memcpy(prevl.data, l->data, prevl.len);
prevoff = loff;
}