summaryrefslogtreecommitdiff
path: root/aports/busybox/0001-rev-correct-output-for-long-input-lines.patch
diff options
context:
space:
mode:
Diffstat (limited to 'aports/busybox/0001-rev-correct-output-for-long-input-lines.patch')
-rw-r--r--aports/busybox/0001-rev-correct-output-for-long-input-lines.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/aports/busybox/0001-rev-correct-output-for-long-input-lines.patch b/aports/busybox/0001-rev-correct-output-for-long-input-lines.patch
new file mode 100644
index 0000000..ba40a2f
--- /dev/null
+++ b/aports/busybox/0001-rev-correct-output-for-long-input-lines.patch
@@ -0,0 +1,91 @@
+From 4357569fdc7bc482dea0ef0bff57a70e7f06523c Mon Sep 17 00:00:00 2001
+From: Ron Yorston <rmy@pobox.com>
+Date: Sat, 21 Aug 2021 09:36:27 +0100
+Subject: 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>
+---
+ testsuite/rev.tests | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ util-linux/rev.c | 1 +
+ 2 files changed, 47 insertions(+)
+ create mode 100755 testsuite/rev.tests
+
+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 @@
++#!/bin/sh
++# Copyright 2021 by Ron Yorston
++# Licensed under GPLv2, see file LICENSE in this source tree.
++
++. ./testing.sh
++
++# testing "test name" "commands" "expected result" "file input" "stdin"
++
++testing "rev works" \
++ "rev input" \
++"\
++1 enil
++
++3 enil
++" \
++ "line 1\n\nline 3\n" \
++ ""
++
++testing "rev file with missing newline" \
++ "rev input" \
++"\
++1 enil
++
++3 enil" \
++ "line 1\n\nline 3" \
++ ""
++
++testing "rev file with NUL character" \
++ "rev input" \
++"\
++nil
++3 enil
++" \
++ "lin\000e 1\n\nline 3\n" \
++ ""
++
++testing "rev file with long line" \
++ "rev input" \
++"\
+++--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
++cba
++" \
++ "---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--------------+\nabc\n" \
++ ""
++
++exit $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)
+ strrev(buf, strlen(buf));
+ #endif
+ fputs_stdout(buf);
++ pos = 0;
+ }
+ fclose(fp);
+ } while (*argv);
+--
+cgit v1.2.3
+