summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2016-11-24 15:56:01 +0000
committerPádraig Brady <P@draigBrady.com>2016-11-24 16:21:59 +0000
commitca99c524e828cc1a1cfeff3cdfc5349f87143829 (patch)
tree0b674cd209096b522ec385692397c720a6e29cef
parent19157e87fd2a846a91dda5a4008b02cb6ba63593 (diff)
downloadcoreutils-ca99c524e828cc1a1cfeff3cdfc5349f87143829.tar.xz
ptx: fix an invalid heap reference with short --width
* src/ptx.c (fix_output_parameters): Ensure line_width doesn't go negative, which can happen when the --width is less than the --gap-size. * tests/misc/ptx-overrun.sh: Add a test case that triggers with ASAN. (Note the longer filename is needed to trigger). Fixes http://bugs.gnu.org/25011
-rw-r--r--src/ptx.c2
-rwxr-xr-xtests/misc/ptx-overrun.sh5
2 files changed, 7 insertions, 0 deletions
diff --git a/src/ptx.c b/src/ptx.c
index c3b60dfa5..d1896789b 100644
--- a/src/ptx.c
+++ b/src/ptx.c
@@ -1235,6 +1235,8 @@ fix_output_parameters (void)
if ((auto_reference || input_reference) && !right_reference)
line_width -= reference_max_width + gap_size;
+ if (line_width < 0)
+ line_width = 0;
/* The output lines, minimally, will contain from left to right a left
context, a gap, and a keyword followed by the right context with no
diff --git a/tests/misc/ptx-overrun.sh b/tests/misc/ptx-overrun.sh
index a4f2e382e..3b4681264 100755
--- a/tests/misc/ptx-overrun.sh
+++ b/tests/misc/ptx-overrun.sh
@@ -41,4 +41,9 @@ ptx ws.in ws.in | sort | uniq -u > out
compare /dev/null out || fail=1
+# Trigger an invalid heap reference noticed by gcc -fsanitize=address
+# from coreutils-8.25 and earlier.
+echo a > a
+ptx -w1 -A $PWD/a >/dev/null || fail=1
+
Exit $fail