diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-09 23:14:41 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-09 23:14:41 +0000 |
commit | a326bb4f858cffe2ea68cbdb67f4314abf5f2f27 (patch) | |
tree | a0bf533204c2e15e2c8faa10ae35606a72b77517 /tbl_data.c | |
parent | 47106c4d3d072a0a7fa1a2835c35021ba567a991 (diff) | |
download | mandoc-a326bb4f858cffe2ea68cbdb67f4314abf5f2f27.tar.gz |
When a row of data is being parsed and it's a line or double-line
(instead of data), re-use the last "layout" pointer instead of advancing
to the next one.
This fixes a segfault report by joerg@.
Diffstat (limited to 'tbl_data.c')
-rw-r--r-- | tbl_data.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -167,13 +167,19 @@ tbl_data(struct tbl_node *tbl, int ln, const char *p) /* * Choose a layout row: take the one following the last parsed * span's. If that doesn't exist, use the last parsed span's. - * If there's no last parsed span, use the first row. This can - * be NULL! + * If there's no last parsed span, use the first row. Lastly, + * if the last span was a horizontal line, use the same layout + * (it doesn't "consume" the layout). + * + * In the end, this can be NULL! */ if (tbl->last_span) { assert(tbl->last_span->layout); - rp = tbl->last_span->layout->next; + if (tbl->last_span->pos == TBL_SPAN_DATA) + rp = tbl->last_span->layout->next; + else + rp = tbl->last_span->layout; if (NULL == rp) rp = tbl->last_span->layout; } else |