aboutsummaryrefslogtreecommitdiffstatshomepage
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
commit79203b6f23c30a1e56eeb19c73f2dc08be416e0c (patch)
tree8e2746c887cf6277d6588d81fe17762a6f757c95 /tbl_data.c
parent7d0d84f8238953ad621e925975bdf5dbcc6532b8 (diff)
downloadmandoc-79203b6f23c30a1e56eeb19c73f2dc08be416e0c.tar.gz
mandoc-79203b6f23c30a1e56eeb19c73f2dc08be416e0c.tar.zst
mandoc-79203b6f23c30a1e56eeb19c73f2dc08be416e0c.zip
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.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/tbl_data.c b/tbl_data.c
index f53e1099..67e7485c 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_data.c,v 1.14 2011/01/07 14:59:52 kristaps Exp $ */
+/* $Id: tbl_data.c,v 1.15 2011/01/09 23:14:41 kristaps Exp $ */
/*
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -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