source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Set the maximum column index in a tbl(7) to the maximum *right*
@ 2019-03-29 21:27 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-03-29 21:27 UTC (permalink / raw)
  To: source

Log Message:
-----------
Set the maximum column index in a tbl(7) to the maximum *right* edge 
of any cell span, not to the maximum *left* edge, which may be smaller 
if the last column of the table is only reached by horizontal spans,
but not by any regular cell in any row of the table.
Otherwise, the algorithm calculating column widths accessed memomy
after the end of the colwidth[] array, while it was trying to handle 
the rightmost column(s).

Crash reported by Jason Thorpe <thorpej at NetBSD>
via https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54069
and via Thomas Klausner (wiz@).
Christos@ Zoulas sent a (correct, but slightly confusing) patch.
The patch i'm committing here is easier to understand.

Modified Files:
--------------
    mandoc:
        out.c

Revision Data
-------------
Index: out.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/out.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -Lout.c -Lout.c -u -p -r1.77 -r1.78
--- out.c
+++ out.c
@@ -149,7 +149,7 @@ tblcalc(struct rofftbl *tbl, const struc
 		gp = &first_group;
 		for (dp = sp->first; dp != NULL; dp = dp->next) {
 			icol = dp->layout->col;
-			while (icol > maxcol)
+			while (maxcol < icol + dp->hspans)
 				tbl->cols[++maxcol].spacing = SIZE_MAX;
 			col = tbl->cols + icol;
 			col->flags |= dp->layout->flags;
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-03-29 21:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-29 21:27 mandoc: Set the maximum column index in a tbl(7) to the maximum *right* schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).