summaryrefslogtreecommitdiffstats
path: root/tbl_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-06-11 16:04:36 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-06-11 16:04:36 +0000
commit818668a067fce10e78f5f5098bed05373f3338cf (patch)
treedbe3dba509cdc25ea9410027a003f6c37a44abb5 /tbl_term.c
parentef195046e60def3f6de6b879bec45de18894e56a (diff)
downloadmandoc-818668a067fce10e78f5f5098bed05373f3338cf.tar.gz
Do not access a NULL pointer if a table contains a horizontal line
next to a table line having fewer columns than the table as a whole. Bug found by Stephen Gregoratto <dev at sgregoratto dot me> with aerc-config(5).
Diffstat (limited to 'tbl_term.c')
-rw-r--r--tbl_term.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/tbl_term.c b/tbl_term.c
index 50c9d537..ff482e4a 100644
--- a/tbl_term.c
+++ b/tbl_term.c
@@ -622,8 +622,12 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
(spp == NULL || cpn == NULL ||
cpn->pos != TBL_CELL_DOWN ? BRIGHT * hw : 0), 1);
+ col = tp->tbl.cols;
for (;;) {
- col = tp->tbl.cols + cp->col;
+ if (cp == NULL)
+ col++;
+ else
+ col = tp->tbl.cols + cp->col;
/* Print the horizontal line inside this column. */
@@ -649,7 +653,8 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
uw = 1;
}
cpp = cpp->next;
- }
+ } else if (spp != NULL && opts & TBL_OPT_ALLBOX)
+ uw = 1;
if (cp != NULL)
cp = cp->next;
if (cpn != NULL) {
@@ -661,8 +666,9 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
cpn = cpn->next;
while (dpn != NULL && dpn->layout != cpn)
dpn = dpn->next;
- }
- if (cpp == NULL && cp == NULL && cpn == NULL)
+ } else if (spn != NULL && opts & TBL_OPT_ALLBOX)
+ dw = 1;
+ if (col + 1 == tp->tbl.cols + sp->opts->cols)
break;
/* Vertical lines do not cross spanned cells. */