aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-01-28 18:43:00 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-01-28 18:43:00 +0000
commit5cab0d72611186b14f669c6caf33b6c30bb30745 (patch)
tree000901faa028c2ee5752462a8ca2ab308ab327f1 /mdoc_html.c
parenta691b01d3c341059f53c726943f9381943abe885 (diff)
downloadmandoc-5cab0d72611186b14f669c6caf33b6c30bb30745.tar.gz
mandoc-5cab0d72611186b14f669c6caf33b6c30bb30745.tar.zst
mandoc-5cab0d72611186b14f669c6caf33b6c30bb30745.zip
.Bl -column with zero columns is legal, so don't segfalt on it.
Bug introduced in rev. 1.248 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 'mdoc_html.c')
-rw-r--r--mdoc_html.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index ea9c0550..8bb15a25 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.261 2017/01/25 02:14:43 schwarze Exp $ */
+/* $Id: mdoc_html.c,v 1.262 2017/01/28 18:43:00 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -817,18 +817,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;
/*
@@ -838,14 +841,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";
@@ -881,14 +883,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;
@@ -898,8 +898,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);