summaryrefslogtreecommitdiffstats
path: root/tbl_data.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-01-09 23:14:41 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-01-09 23:14:41 +0000
commita326bb4f858cffe2ea68cbdb67f4314abf5f2f27 (patch)
treea0bf533204c2e15e2c8faa10ae35606a72b77517 /tbl_data.c
parent47106c4d3d072a0a7fa1a2835c35021ba567a991 (diff)
downloadmandoc-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.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/tbl_data.c b/tbl_data.c
index c036572f..7c316aad 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -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