diff options
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.patch | 91 |
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 + |