summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2015-04-19 20:34:56 +0000
committerschwarze <schwarze@openbsd.org>2015-04-19 20:34:56 +0000
commit3569c652953cc3f9398ed89d4d34873aba09d94c (patch)
treead8bbccea85b20fe992b50df45d06c5fa54f91e1
parentIncorrect logic in smtpd(8) can lead to unexpected client disconnect, invalid (diff)
downloadwireguard-openbsd-3569c652953cc3f9398ed89d4d34873aba09d94c.tar.xz
wireguard-openbsd-3569c652953cc3f9398ed89d4d34873aba09d94c.zip
More than one data field may follow T} on the same input line.
Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the socket(2) manual on Linux. Also fixes major rendering bugs (including partial loss of content) in XkbChangeControls(3), XkbFreeClientMap(3), XkbGetMap(3), XkbKeyNumGroups(3), and XkbSetMap(3).
-rw-r--r--regress/usr.bin/mandoc/tbl/data/block_unclosed.in5
-rw-r--r--regress/usr.bin/mandoc/tbl/data/block_unclosed.out_ascii1
-rw-r--r--usr.bin/mandoc/tbl_data.c5
3 files changed, 9 insertions, 2 deletions
diff --git a/regress/usr.bin/mandoc/tbl/data/block_unclosed.in b/regress/usr.bin/mandoc/tbl/data/block_unclosed.in
index c7c97286c47..5e3526c4d7a 100644
--- a/regress/usr.bin/mandoc/tbl/data/block_unclosed.in
+++ b/regress/usr.bin/mandoc/tbl/data/block_unclosed.in
@@ -9,6 +9,11 @@ lll.
begin:T{
middle
T}:end
+T{
+begin
+T}:middle:T{
+end
+T}
incomplete:T{
block
.TE
diff --git a/regress/usr.bin/mandoc/tbl/data/block_unclosed.out_ascii b/regress/usr.bin/mandoc/tbl/data/block_unclosed.out_ascii
index d69d972f7cd..bf0338ce982 100644
--- a/regress/usr.bin/mandoc/tbl/data/block_unclosed.out_ascii
+++ b/regress/usr.bin/mandoc/tbl/data/block_unclosed.out_ascii
@@ -10,6 +10,7 @@ DDEESSCCRRIIPPTTIIOONN
+--------------------------+
|begin middle end |
+ |begin middle end |
|incomplete block |
+--------------------------+
normal text
diff --git a/usr.bin/mandoc/tbl_data.c b/usr.bin/mandoc/tbl_data.c
index 972868ff189..417199169a2 100644
--- a/usr.bin/mandoc/tbl_data.c
+++ b/usr.bin/mandoc/tbl_data.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tbl_data.c,v 1.26 2015/01/30 17:31:20 schwarze Exp $ */
+/* $OpenBSD: tbl_data.c,v 1.27 2015/04/19 20:34:56 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -130,7 +130,8 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
if (p[pos] == tbl->opts.tab) {
tbl->part = TBL_PART_DATA;
pos++;
- getdata(tbl, tbl->last_span, ln, p, &pos);
+ while (p[pos] != '\0')
+ getdata(tbl, tbl->last_span, ln, p, &pos);
return(1);
} else if (p[pos] == '\0') {
tbl->part = TBL_PART_DATA;