From a326bb4f858cffe2ea68cbdb67f4314abf5f2f27 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Sun, 9 Jan 2011 23:14:41 +0000 Subject: 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@. --- tbl_data.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'tbl_data.c') 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 -- cgit