aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-08-21 09:36:27 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2021-08-22 00:08:18 +0200
commit4357569fdc7bc482dea0ef0bff57a70e7f06523c (patch)
tree472856f5ad9a28b1459566d39ec50bb7b84f6e36
parent62d5a1e56f4022002c5c55e02d7d29e1e68bc236 (diff)
downloadbusybox-w32-4357569fdc7bc482dea0ef0bff57a70e7f06523c.tar.gz
busybox-w32-4357569fdc7bc482dea0ef0bff57a70e7f06523c.tar.bz2
busybox-w32-4357569fdc7bc482dea0ef0bff57a70e7f06523c.zip
rev: correct output for long input lines
The input buffer is initialised to a reasonable size and extended if necessary. When this happened the offset into the buffer wasn't reset to zero so subsequent lines were appended to the long line. Fix this and add some tests. function old new delta rev_main 377 368 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-9) Total: -9 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rwxr-xr-xtestsuite/rev.tests46
-rw-r--r--util-linux/rev.c1
2 files changed, 47 insertions, 0 deletions
diff --git a/testsuite/rev.tests b/testsuite/rev.tests
new file mode 100755
index 000000000..dd65dcd3b
--- /dev/null
+++ b/testsuite/rev.tests
@@ -0,0 +1,46 @@
1#!/bin/sh
2# Copyright 2021 by Ron Yorston
3# Licensed under GPLv2, see file LICENSE in this source tree.
4
5. ./testing.sh
6
7# testing "test name" "commands" "expected result" "file input" "stdin"
8
9testing "rev works" \
10 "rev input" \
11"\
121 enil
13
143 enil
15" \
16 "line 1\n\nline 3\n" \
17 ""
18
19testing "rev file with missing newline" \
20 "rev input" \
21"\
221 enil
23
243 enil" \
25 "line 1\n\nline 3" \
26 ""
27
28testing "rev file with NUL character" \
29 "rev input" \
30"\
31nil
323 enil
33" \
34 "lin\000e 1\n\nline 3\n" \
35 ""
36
37testing "rev file with long line" \
38 "rev input" \
39"\
40+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
41cba
42" \
43 "---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--------------+\nabc\n" \
44 ""
45
46exit $FAILCOUNT
diff --git a/util-linux/rev.c b/util-linux/rev.c
index d439b4da8..63b005c67 100644
--- a/util-linux/rev.c
+++ b/util-linux/rev.c
@@ -109,6 +109,7 @@ int rev_main(int argc UNUSED_PARAM, char **argv)
109 strrev(buf, strlen(buf)); 109 strrev(buf, strlen(buf));
110#endif 110#endif
111 fputs_stdout(buf); 111 fputs_stdout(buf);
112 pos = 0;
112 } 113 }
113 fclose(fp); 114 fclose(fp);
114 } while (*argv); 115 } while (*argv);