From 5c8af5ece2aafc1587e95137e2338c00c4adb9d9 Mon Sep 17 00:00:00 2001 From: classabbyamp Date: Thu, 8 Jun 2023 15:38:38 -0400 Subject: [PATCH] mdocml: fix hang when rendering stress-ng(1) see https://inbox.vuxu.org/mandoc-discuss/ZIIbRuk+yJtoAJhv@asta-kit.de/ --- srcpkgs/mdocml/patches/stress-ng-hang.patch | 75 +++++++++++++++++++++ srcpkgs/mdocml/template | 2 +- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/mdocml/patches/stress-ng-hang.patch diff --git a/srcpkgs/mdocml/patches/stress-ng-hang.patch b/srcpkgs/mdocml/patches/stress-ng-hang.patch new file mode 100644 index 00000000000..fd6a3a7c003 --- /dev/null +++ b/srcpkgs/mdocml/patches/stress-ng-hang.patch @@ -0,0 +1,75 @@ +fixes hang from rendering stress-ng(1) + +from https://inbox.vuxu.org/mandoc-discuss/ZIIbRuk+yJtoAJhv@asta-kit.de/ + +=================================================================== +RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/out.c,v +retrieving revision 1.54 +retrieving revision 1.55 +diff -u -r1.54 -r1.55 +--- a/out.c 2021/09/07 17:05:30 1.54 ++++ b/out.c 2021/09/28 17:06:17 1.55 +@@ -121,6 +121,7 @@ + const struct tbl_dat *dp; + struct roffcol *col; + struct tbl_colgroup *first_group, **gp, *g; ++ size_t *colwidth; + size_t ewidth, min1, min2, wanted, width, xwidth; + int done, icol, maxcol, necol, nxcol, quirkcol; + +@@ -254,16 +255,28 @@ + gp = &(*gp)->next; + } + ++ colwidth = mandoc_reallocarray(NULL, maxcol + 1, sizeof(*colwidth)); + while (first_group != NULL) { + + /* ++ * Rebuild the array of the widths of all columns ++ * participating in spans that require expansion. ++ */ ++ ++ for (icol = 0; icol <= maxcol; icol++) ++ colwidth[icol] = SIZE_MAX; ++ for (g = first_group; g != NULL; g = g->next) ++ for (icol = g->startcol; icol <= g->endcol; icol++) ++ colwidth[icol] = tbl->cols[icol].width; ++ ++ /* + * Find the smallest and second smallest column width + * among the columns which may need expamsion. + */ + + min1 = min2 = SIZE_MAX; + for (icol = 0; icol <= maxcol; icol++) { +- width = tbl->cols[icol].width; ++ width = colwidth[icol]; + if (min1 > width) { + min2 = min1; + min1 = width; +@@ -281,7 +294,7 @@ + for (g = first_group; g != NULL; g = g->next) { + necol = 0; + for (icol = g->startcol; icol <= g->endcol; icol++) +- if (tbl->cols[icol].width == min1) ++ if (colwidth[icol] == min1) + necol++; + if (necol == 0) + continue; +@@ -298,7 +311,7 @@ + while ((g = *gp) != NULL) { + done = 0; + for (icol = g->startcol; icol <= g->endcol; icol++) { +- if (tbl->cols[icol].width != min1) ++ if (colwidth[icol] != min1) + continue; + if (g->wanted <= wanted - min1) { + tbl->cols[icol].width += g->wanted; +@@ -315,6 +328,7 @@ + gp = &(*gp)->next; + } + } ++ free(colwidth); + + /* + * Align numbers with text. diff --git a/srcpkgs/mdocml/template b/srcpkgs/mdocml/template index 4dda1338fc9..9b9d5394a29 100644 --- a/srcpkgs/mdocml/template +++ b/srcpkgs/mdocml/template @@ -1,7 +1,7 @@ # Template file for 'mdocml' pkgname=mdocml version=1.14.6 -revision=6 +revision=7 build_style=configure make_build_args="all man.cgi" make_check_target="regress"