summaryrefslogtreecommitdiffstats
path: root/read.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-03-19 16:26:08 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-03-19 16:26:08 +0000
commit4af7601e56b07fe1eb2c110fd7633ef66197ae30 (patch)
treebf3230e3e37427be36fec1ec8146a89cd0158a6d /read.c
parent034fc65e0973095b716d53e0292987e393d4bfa3 (diff)
downloadmandoc-4af7601e56b07fe1eb2c110fd7633ef66197ae30.tar.gz
When the last line of the input is empty and the previous line reduced
the line input buffer to a length of one byte, do not write one byte past the end of the line input buffer. Minimal code to show the bug: printf ".ds X\n.X\n\n" | MALLOC_OPTIONS=C mandoc Bug found by bentley@ in the sysutils/rancid par(1) manual page.
Diffstat (limited to 'read.c')
-rw-r--r--read.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/read.c b/read.c
index 14f9a74e..76c4308e 100644
--- a/read.c
+++ b/read.c
@@ -255,6 +255,8 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
/* XXX Ugly hack to mark the end of the input. */
if (i == blk.sz || blk.buf[i] == '\0') {
+ if (pos + 2 > ln.sz)
+ resize_buf(&ln, 256);
ln.buf[pos++] = '\n';
ln.buf[pos] = '\0';
}