diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2019-06-11 16:04:36 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2019-06-11 16:04:36 +0000 |
commit | 818668a067fce10e78f5f5098bed05373f3338cf (patch) | |
tree | dbe3dba509cdc25ea9410027a003f6c37a44abb5 /tbl_term.c | |
parent | ef195046e60def3f6de6b879bec45de18894e56a (diff) | |
download | mandoc-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.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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. */ |