diff options
author | 2017-01-28 18:42:10 +0000 | |
---|---|---|
committer | 2017-01-28 18:42:10 +0000 | |
commit | b19679ce695be532006495b7904d002a986deee6 (patch) | |
tree | fc34905dc185f4cc3764f64219f900e081f7180f /usr.bin/mandoc/mdoc_html.c | |
parent | - -N got changed to -D (diff) | |
download | wireguard-openbsd-b19679ce695be532006495b7904d002a986deee6.tar.xz wireguard-openbsd-b19679ce695be532006495b7904d002a986deee6.zip |
.Bl -column with zero columns is legal, so don't segfalt on it.
Bug introduced in rev. 1.123 triggered for example in gssapi(3),
analyzed and reported by Michael <Stapelberg at debian dot org>.
Simplify the code a bit more while here.
Diffstat (limited to 'usr.bin/mandoc/mdoc_html.c')
-rw-r--r-- | usr.bin/mandoc/mdoc_html.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/usr.bin/mandoc/mdoc_html.c b/usr.bin/mandoc/mdoc_html.c index 5e0b986c3fd..ef86051b0c1 100644 --- a/usr.bin/mandoc/mdoc_html.c +++ b/usr.bin/mandoc/mdoc_html.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_html.c,v 1.136 2017/01/25 02:14:41 schwarze Exp $ */ +/* $OpenBSD: mdoc_html.c,v 1.137 2017/01/28 18:42:10 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org> @@ -815,18 +815,21 @@ mdoc_it_pre(MDOC_ARGS) static int mdoc_bl_pre(MDOC_ARGS) { + struct mdoc_bl *bl; const char *cattr; - int i; + size_t i; enum htmltag elemtype; + bl = &n->norm->Bl; + if (n->type == ROFFT_BODY) { - if (LIST_column == n->norm->Bl.type) + if (bl->type == LIST_column) print_otag(h, TAG_TBODY, ""); return 1; } if (n->type == ROFFT_HEAD) { - if (LIST_column != n->norm->Bl.type) + if (bl->type != LIST_column || bl->ncols == 0) return 0; /* @@ -836,14 +839,13 @@ mdoc_bl_pre(MDOC_ARGS) * screen and we want to preserve that behaviour. */ - for (i = 0; i < (int)n->norm->Bl.ncols - 1; i++) - print_otag(h, TAG_COL, "sww", n->norm->Bl.cols[i]); - print_otag(h, TAG_COL, "swW", n->norm->Bl.cols[i]); - + for (i = 0; i < bl->ncols - 1; i++) + print_otag(h, TAG_COL, "sww", bl->cols[i]); + print_otag(h, TAG_COL, "swW", bl->cols[i]); return 0; } - switch (n->norm->Bl.type) { + switch (bl->type) { case LIST_bullet: elemtype = TAG_UL; cattr = "Bl-bullet"; @@ -879,14 +881,12 @@ mdoc_bl_pre(MDOC_ARGS) break; case LIST_tag: cattr = "Bl-tag"; - if (n->norm->Bl.offs) - print_otag(h, TAG_DIV, "cswl", cattr, - n->norm->Bl.offs); - if (n->norm->Bl.width == NULL) + if (bl->offs) + print_otag(h, TAG_DIV, "cswl", cattr, bl->offs); + if (bl->width == NULL) print_otag(h, TAG_DL, "c", cattr); else - print_otag(h, TAG_DL, "cswl", cattr, - n->norm->Bl.width); + print_otag(h, TAG_DL, "cswl", cattr, bl->width); return 1; case LIST_column: elemtype = TAG_TABLE; @@ -896,8 +896,8 @@ mdoc_bl_pre(MDOC_ARGS) abort(); } - if (n->norm->Bl.offs) - print_otag(h, elemtype, "cswl", cattr, n->norm->Bl.offs); + if (bl->offs) + print_otag(h, elemtype, "cswl", cattr, bl->offs); else print_otag(h, elemtype, "c", cattr); |