diff options
Diffstat (limited to 'system/mandoc')
-rw-r--r-- | system/mandoc/APKBUILD | 94 | ||||
-rw-r--r-- | system/mandoc/cgi-adelie.patch | 60 | ||||
-rw-r--r-- | system/mandoc/cgi-gz.patch | 77 | ||||
-rw-r--r-- | system/mandoc/cgi-search.patch | 48 | ||||
-rw-r--r-- | system/mandoc/configure.patch | 21 | ||||
-rw-r--r-- | system/mandoc/doc.patch | 132 | ||||
-rw-r--r-- | system/mandoc/empty-tbl-null-deref.patch | 62 | ||||
-rw-r--r-- | system/mandoc/less.patch | 58 | ||||
-rw-r--r-- | system/mandoc/mandoc.post-deinstall | 3 | ||||
-rw-r--r-- | system/mandoc/mandoc.trigger | 3 | ||||
-rw-r--r-- | system/mandoc/tbl-colwidth-oob.patch | 62 |
11 files changed, 620 insertions, 0 deletions
diff --git a/system/mandoc/APKBUILD b/system/mandoc/APKBUILD new file mode 100644 index 000000000..b3a4c018c --- /dev/null +++ b/system/mandoc/APKBUILD @@ -0,0 +1,94 @@ +# Maintainer: Max Rees <maxcrees@me.com> +pkgname=mandoc +pkgver=1.14.5 +pkgrel=0 +pkgdesc="Manual page database, compiler, and viewer" +url="https://mandoc.bsd.lv/" +arch="all" +license="ISC AND BSD-2-Clause AND BSD-3-Clause" +replaces="man-db" +depends="less" +makedepends="zlib-dev" +checkdepends="perl" +subpackages="$pkgname-doc $pkgname-cgi" +install="$pkgname.post-deinstall" +triggers="$pkgname.trigger=/usr/share/man" +source="https://mandoc.bsd.lv/snapshots/mandoc-$pkgver.tar.gz + configure.patch + empty-tbl-null-deref.patch + tbl-colwidth-oob.patch + less.patch + doc.patch + cgi-adelie.patch + cgi-gz.patch + cgi-search.patch + " + +prepare() { + default_prepare + cat >"configure.local" <<-EOF + PREFIX=/usr + MANDIR=/usr/share/man + WWWPREFIX=/var/lib/mandoc-cgi + # remove /usr/X11R6 from the following. + MANPATH_BASE=/usr/share/man + MANPATH_DEFAULT=/usr/share/man:/usr/local/share/man + # groff also provides a soelim. + BINM_SOELIM=mandoc-soelim + + CFLAGS="$CFLAGS" + LDFLAGS="$LDFLAGS" + LN="ln -sf" + OSNAME="Adelie Linux" + UTF8_LOCALE=C.UTF-8 + + BUILD_CATMAN=1 + BUILD_CGI=1 + EOF + + cat >"cgi.h" <<-EOF + #define SCRIPT_NAME "" + #define MAN_DIR "/var/lib/mandoc-cgi" + #define CSS_DIR "" + #define CUSTOMIZE_TITLE "Adelie Linux manual pages" + EOF +} + +build() { + ./configure + make +} + +check() { + make regress +} + +package() { + make DESTDIR="$pkgdir" install + install -Dm644 -t "$pkgdir"/usr/share/man/man8 man.cgi.8 + + mkdir -p "$pkgdir"/etc + cat >"$pkgdir"/etc/man.conf <<-EOF + # See man.conf(5). + #manpath /usr/share/man + #manpath /usr/local/share/man + EOF +} + +cgi() { + pkgdesc="$pkgdesc (web interface)" + depends="$pkgname=$pkgver-r$pkgrel" + mkdir -p "$subpkgdir"/var/lib + mv "$pkgdir"/var/lib/mandoc-cgi \ + "$subpkgdir"/var/lib +} + +sha512sums="848f290847f3095757f25647e6d73eb7044018b145bf6f9dc8b5db164b1421911efdc5b3b9022ec3a2c5af9687a84d5acedee810f2bd2f7caaa9242dadb2cc52 mandoc-1.14.5.tar.gz +074dc73b45c71b5c178750db6c7a4a45e97d97b5388fa5d6028faa90600358dd2b954781280ca41d17da3c577ad5a1a7a13ddc4dbea72ac5e86f1652e03ecde7 configure.patch +c4055371a92be958f0d385c83b4788dc4c18bc990b1f780137309c83e174b8d3e65cae077aba3c5286a97fcee1514d61f6b7507ca25bd5155b8d577a7e8acd3a empty-tbl-null-deref.patch +9a8953f17e2db75bf3667e1d51c7db21ccc5e3042c59035ed6178094963eac919b7367f96708c9bcc81450ffc13842d12c23edd9bca3330be730149625db88e7 tbl-colwidth-oob.patch +4b17b144b53ee30f9aae87c7824597151e16e6f5ad795e7b03e701f2d13ca47a62c696cb837689c75d5f34d3c190255c8f0583bc91a0f83f61afde7563a6fb2b less.patch +f35268ed507d5c6431f8cafe5a311d1ffe990083c6e1d22f5db479e19745d486cd45a699b64c4fb6757d1c0ab588c3e8d0778bfd75e98e751d1a786e89e8b925 doc.patch +0dfe9e39570a2b6764303708b98f29b2b57114e124a0f37e9c77d4d33f25d474a79d271df46babd700e4cc93e3385a02356f19caa44ebe4e9b056fa4be96b95b cgi-adelie.patch +957bbaef888fb2ea15f9b795b15952332e65aed70d2e70f3142305a4fb9313ade455eae6dfc923af3ef008834e771b1a85d71389b86cd0ff9a1c31e84fef861c cgi-gz.patch +37be119308814b060ed9d5517b54eb02b210d677ffb085385929b6aa0e8e8bef2c6c1ab2055713ed8c72f2bc85593bf8744d2d0f163dd1aff65ce439c474b640 cgi-search.patch" diff --git a/system/mandoc/cgi-adelie.patch b/system/mandoc/cgi-adelie.patch new file mode 100644 index 000000000..66ce6a9ba --- /dev/null +++ b/system/mandoc/cgi-adelie.patch @@ -0,0 +1,60 @@ +Adjustments for Adélie manual sections and architecture names. + +--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500 +@@ -101,36 +101,28 @@ static const char *scriptname = SCRIPT_ + + static const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9}; + static const char *const sec_numbers[] = { +- "0", "1", "2", "3", "3p", "4", "5", "6", "7", "8", "9" ++ "0", "0p", "1", "1p", "2", "3", "3p", "3pm", "4", "5", "6", "7", "8" + }; + static const char *const sec_names[] = { + "All Sections", ++ "0p - POSIX C Headers", + "1 - General Commands", ++ "1p - POSIX Commands", + "2 - System Calls", + "3 - Library Functions", +- "3p - Perl Library", ++ "3p - POSIX C Library Functions", ++ "3pm - Perl Library", + "4 - Device Drivers", +- "5 - File Formats", ++ "5 - File formats and configuration files", + "6 - Games", +- "7 - Miscellaneous Information", +- "8 - System Manager\'s Manual", +- "9 - Kernel Developer\'s Manual" ++ "7 - Overview, conventions, and miscellaneous", ++ "8 - System Administrator\'s Manual" + }; + static const int sec_MAX = sizeof(sec_names) / sizeof(char *); + + static const char *const arch_names[] = { +- "amd64", "alpha", "armv7", "arm64", +- "hppa", "i386", "landisk", +- "loongson", "luna88k", "macppc", "mips64", +- "octeon", "sgi", "socppc", "sparc64", +- "amiga", "arc", "armish", "arm32", +- "atari", "aviion", "beagle", "cats", +- "hppa64", "hp300", +- "ia64", "mac68k", "mvme68k", "mvme88k", +- "mvmeppc", "palm", "pc532", "pegasos", +- "pmax", "powerpc", "solbourne", "sparc", +- "sun3", "vax", "wgrisc", "x68k", +- "zaurus" ++ "aarch64", "armv7", "pmmx", ++ "ppc", "ppc64", "x86_64", + }; + static const int arch_MAX = sizeof(arch_names) / sizeof(char *); + +@@ -655,7 +661,7 @@ pg_searchres(const struct req *req, stru + == NULL) ? 3 : + ((archend = strchr(arch + 1, '/')) + == NULL) ? 0 : +- strncmp(arch, "amd64/", ++ strncmp(arch, "ppc64/", + archend - arch) ? 2 : 1; + if (archprio < archpriouse) { + archpriouse = archprio; diff --git a/system/mandoc/cgi-gz.patch b/system/mandoc/cgi-gz.patch new file mode 100644 index 000000000..ac506b797 --- /dev/null +++ b/system/mandoc/cgi-gz.patch @@ -0,0 +1,77 @@ +Handle the case where some of the entries in the manpath are gzipped by +removing the .gz extension and allowing mparse_open to add it back and +mark the page as gzipped. This is part of the documented contract for +mparse_open, see mandoc(3). + +--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500 +@@ -93,7 +93,7 @@ static void resp_searchform(const stru + static void resp_show(const struct req *, const char *); + static void set_query_attr(char **, char **); + static int validate_arch(const char *); +-static int validate_filename(const char *); ++static int validate_filename(char *); + static int validate_manpath(const struct req *, const char *); + static int validate_urifrag(const char *); + +@@ -517,8 +509,13 @@ validate_arch(const char *arch) + } + + static int +-validate_filename(const char *file) ++validate_filename(char *file) + { ++ char *cp; ++ ++ cp = strrchr(file, '.'); ++ if (cp != NULL && ! strcmp(cp + 1, "gz")) ++ *cp = '\0'; + + if ('.' == file[0] && '/' == file[1]) + file += 2; +@@ -854,14 +862,15 @@ resp_format(const struct req *req, const + int fd; + int usepath; + +- if (-1 == (fd = open(file, O_RDONLY, 0))) { +- puts("<p>You specified an invalid manual file.</p>"); +- return; +- } +- + mchars_alloc(); + mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 | + MPARSE_VALIDATE, MANDOC_OS_OTHER, req->q.manpath); ++ ++ if (-1 == (fd = mparse_open(mp, file))) { ++ puts("<p>You specified an invalid manual file.</p>"); ++ goto out; ++ } ++ + mparse_readfd(mp, fd, file); + close(fd); + meta = mparse_result(mp); +@@ -882,10 +891,11 @@ resp_format(const struct req *req, const + html_man(vp, meta); + + html_free(vp); +- mparse_free(mp); +- mchars_free(); + free(conf.man); + free(conf.style); ++out: ++ mparse_free(mp); ++ mchars_free(); + } + + static void +@@ -904,8 +914,8 @@ resp_show(const struct req *req, const c + static void + pg_show(struct req *req, const char *fullpath) + { +- char *manpath; +- const char *file; ++ char *manpath; ++ char *file; + + if ((file = strchr(fullpath, '/')) == NULL) { + pg_error_badrequest( diff --git a/system/mandoc/cgi-search.patch b/system/mandoc/cgi-search.patch new file mode 100644 index 000000000..dd74be9ef --- /dev/null +++ b/system/mandoc/cgi-search.patch @@ -0,0 +1,48 @@ +Don't exit immediately if mansearch returns some paths that man.cgi +considers invalid, in particular translated manpages (e.g. +./de/man1/chfn.1). Just mark them as invalid (section 10, see struct +manpage in mansearch.h) and skip them later. + +--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500 +@@ -605,13 +602,20 @@ pg_searchres(const struct req *req, stru + size_t i, iuse; + int archprio, archpriouse; + int prio, priouse; ++ int results = 0; + + for (i = 0; i < sz; i++) { +- if (validate_filename(r[i].file)) ++ if (validate_filename(r[i].file)) { ++ results = 1; + continue; ++ } + warnx("invalid filename %s in %s database", + r[i].file, req->q.manpath); +- pg_error_internal(); ++ r[i].sec = 10; ++ } ++ ++ if (! results) { ++ pg_noresult(req, "No results found."); + return; + } + +@@ -642,6 +646,8 @@ pg_searchres(const struct req *req, stru + priouse = 20; + archpriouse = 3; + for (i = 0; i < sz; i++) { ++ if (r[i].sec == 10) ++ continue; + sec = r[i].file; + sec += strcspn(sec, "123456789"); + if (sec[0] == '\0') +@@ -681,6 +687,8 @@ pg_searchres(const struct req *req, stru + if (sz > 1) { + puts("<table class=\"results\">"); + for (i = 0; i < sz; i++) { ++ if (r[i].sec == 10) ++ continue; + printf(" <tr>\n" + " <td>" + "<a class=\"Xr\" href=\"/"); diff --git a/system/mandoc/configure.patch b/system/mandoc/configure.patch new file mode 100644 index 000000000..2fda25409 --- /dev/null +++ b/system/mandoc/configure.patch @@ -0,0 +1,21 @@ +--- mandoc-1.14.5/test-recvmsg.c 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/test-recvmsg.c 2020-06-04 20:08:33.420299034 -0500 +@@ -4,5 +4,6 @@ + int + main(void) + { +- return recvmsg(-1, NULL, 0) != -1; ++ struct msghdr buf; ++ return recvmsg(-1, &buf, 0) != -1; + } +--- mandoc-1.14.5/configure 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/configure 2020-06-04 20:03:24.790295729 -0500 +@@ -41,7 +41,7 @@ OSENUM= + OSNAME= + UTF8_LOCALE= + +-CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -` ++CC=cc + CFLAGS= + LDADD= + LDFLAGS= diff --git a/system/mandoc/doc.patch b/system/mandoc/doc.patch new file mode 100644 index 000000000..955a5f205 --- /dev/null +++ b/system/mandoc/doc.patch @@ -0,0 +1,132 @@ +--- mandoc-1.14.5/mandoc.1 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/mandoc.1 2020-06-05 02:12:50.320533119 -0500 +@@ -897,7 +897,7 @@ An + macro references a manual page that is not found in the base system. + The path to look for base system manuals is configurable at compile + time and defaults to +-.Pa /usr/share/man : /usr/X11R6/man . ++.Pa /usr/share/man . + .El + .Ss Style suggestions + .Bl -ohang +--- mandoc-1.14.5/mandoc.db.5 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/mandoc.db.5 2020-06-05 02:14:48.380534383 -0500 +@@ -189,10 +189,6 @@ followed by the number 0. + .Bl -tag -width /usr/share/man/mandoc.db -compact + .It Pa /usr/share/man/mandoc.db + The manual page database for the base system. +-.It Pa /usr/X11R6/man/mandoc.db +-The same for the +-.Xr X 7 +-Window System. + .It Pa /usr/local/man/mandoc.db + The same for + .Xr packages 7 . +--- mandoc-1.14.5/man.conf.5 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/man.conf.5 2020-06-05 02:11:34.650532308 -0500 +@@ -117,7 +117,6 @@ installing it is equivalent to not havin + file at all. + .Bd -literal -offset indent + manpath /usr/share/man +-manpath /usr/X11R6/man + manpath /usr/local/man + .Ed + .Sh SEE ALSO + +--- mandoc-1.14.5/man.1 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/man.1 2020-06-05 02:51:15.910557811 -0500 +@@ -174,28 +174,32 @@ Only select manuals from the specified + The currently available sections are: + .Pp + .Bl -tag -width "localXXX" -offset indent -compact ++.It 0p ++POSIX C headers. + .It 1 + General commands + .Pq tools and utilities . ++.It 1p ++POSIX commands. + .It 2 + System calls and error numbers. + .It 3 + Library functions. + .It 3p ++POSIX C library functions. ++.It 3pm + .Xr perl 1 + programmer's reference guide. + .It 4 + Device drivers. + .It 5 +-File formats. ++File formats and configuration files. + .It 6 + Games. + .It 7 +-Miscellaneous information. ++Overview, conventions, and miscellaneous information. + .It 8 + System maintenance and operation commands. +-.It 9 +-Kernel internals. + .El + .Pp + If not specified and a match is found in more than one section, +--- mandoc-1.14.5/man.cgi.8 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/man.cgi.8 2020-06-05 16:26:12.541081488 -0500 +@@ -342,7 +342,7 @@ page to acquire the named parameters it + .El + .Sh FILES + .Bl -tag -width Ds +-.It Pa /var/www ++.It Pa /var/lib/mandoc-cgi + Default web server + .Xr chroot 2 + directory. +@@ -366,13 +366,7 @@ This is part of the web server configura + A style sheet for + .Xr mandoc 1 + HTML styling, referenced from each generated HTML page. +-.It Pa /man +-Default +-.Nm +-data directory containing all the manual trees. +-Can be overridden by +-.Dv MAN_DIR . +-.It Pa /man/manpath.conf ++.It Pa /manpath.conf + The list of available manpaths, one per line. + If any of the lines in this file contains a slash + .Pq Sq / +@@ -380,13 +374,13 @@ or any character not contained in the + .Sx Restricted character set , + .Nm + reports an internal server error and exits without doing anything. +-.It Pa /man/header.html ++.It Pa /header.html + An optional file containing static HTML code to be inserted right + after opening the <BODY> element. +-.It Pa /man/footer.html ++.It Pa /footer.html + An optional file containing static HTML code to be inserted right + before closing the <BODY> element. +-.It Pa /man/OpenBSD-current/man1/mandoc.1 ++.It Pa /OpenBSD-current/man1/mandoc.1 + An example + .Xr mdoc 7 + source file located below the +--- mandoc-1.14.5/soelim.1 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/soelim.1 2020-06-05 16:38:40.101089494 -0500 +@@ -25,10 +25,10 @@ + .\" SUCH DAMAGE. + .\" + .Dd $Mdocdate: July 4 2017 $ +-.Dt SOELIM 1 ++.Dt MANDOC-SOELIM 1 + .Os + .Sh NAME +-.Nm soelim ++.Nm mandoc-soelim + .Nd interpret .so requests in manpages + .Sh SYNOPSIS + .Nm diff --git a/system/mandoc/empty-tbl-null-deref.patch b/system/mandoc/empty-tbl-null-deref.patch new file mode 100644 index 000000000..3e14ce32b --- /dev/null +++ b/system/mandoc/empty-tbl-null-deref.patch @@ -0,0 +1,62 @@ +From mboxrd@z Thu Jan 1 00:00:00 1970 +Received: from localhost (fantadrom.bsd.lv [local]) + by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 25e99424 + for <source@mandoc.bsd.lv>; + Mon, 18 Mar 2019 03:01:04 -0500 (EST) +Date: Mon, 18 Mar 2019 03:01:04 -0500 (EST) +X-Mailinglist: mandoc-source +Reply-To: source@mandoc.bsd.lv +MIME-Version: 1.0 +From: schwarze@mandoc.bsd.lv +To: source@mandoc.bsd.lv +Subject: mandoc: fix a NULL pointer access on empty tbl(7) data cells that +X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ +Content-Type: text/plain; charset=utf-8 +Message-ID: <e3f22222366ad31d@fantadrom.bsd.lv> +Archived-At: <http://inbox.vuxu.org/mandoc-source/e3f22222366ad31d@fantadrom.bsd.lv/> +List-Archive: <http://inbox.vuxu.org/mandoc-source/> +List-Post: <mailto:source@mandoc.bsd.lv> + +Log Message: +----------- +fix a NULL pointer access on empty tbl(7) data cells +that bentley@ found in syncthing-bep(7) + +Modified Files: +-------------- + mandoc: + tbl_term.c + +Revision Data +------------- +Index: tbl_term.c +=================================================================== +RCS file: /home/cvs/mandoc/mandoc/tbl_term.c,v +retrieving revision 1.69 +retrieving revision 1.70 +diff -Ltbl_term.c -Ltbl_term.c -u -p -r1.69 -r1.70 +--- a/tbl_term.c ++++ b/tbl_term.c +@@ -629,7 +629,8 @@ tbl_hrule(struct termp *tp, const struct + + lw = cpp == NULL || cpn == NULL || + (cpn->pos != TBL_CELL_DOWN && +- (dpn == NULL || strcmp(dpn->string, "\\^") != 0)) ++ (dpn == NULL || dpn->string == NULL || ++ strcmp(dpn->string, "\\^") != 0)) + ? hw : 0; + tbl_direct_border(tp, BHORIZ * lw, + col->width + col->spacing / 2); +@@ -675,7 +676,8 @@ tbl_hrule(struct termp *tp, const struct + + rw = cpp == NULL || cpn == NULL || + (cpn->pos != TBL_CELL_DOWN && +- (dpn == NULL || strcmp(dpn->string, "\\^") != 0)) ++ (dpn == NULL || dpn->string == NULL || ++ strcmp(dpn->string, "\\^") != 0)) + ? hw : 0; + + /* The line crossing at the end of this column. */ +-- + To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv + diff --git a/system/mandoc/less.patch b/system/mandoc/less.patch new file mode 100644 index 000000000..19d567365 --- /dev/null +++ b/system/mandoc/less.patch @@ -0,0 +1,58 @@ +Default to using less(1) instead of more(1) if MANPAGER and PAGER are +unset, and also set a pretty prompt and smart case searching like man-db +does if less is used as a pager. + +The name of the manpage is not available in the scope of the patched +function - maybe add it at some point. + +--- mandoc-1.14.5/main.c 2019-03-10 04:56:43.000000000 -0500 ++++ mandoc-1.14.5/main.c 2020-06-05 01:59:10.640524340 -0500 +@@ -1170,8 +1170,9 @@ spawn_pager(struct tag_files *tag_files) + pager = getenv("MANPAGER"); + if (pager == NULL || *pager == '\0') + pager = getenv("PAGER"); +- if (pager == NULL || *pager == '\0') +- pager = "more -s"; ++ if (pager == NULL || *pager == '\0') { ++ pager = "less"; ++ } + cp = mandoc_strdup(pager); + + /* +@@ -1195,10 +1196,24 @@ spawn_pager(struct tag_files *tag_files) + /* For less(1), use the tag file. */ + + use_ofn = 1; +-#if HAVE_LESS_T + if ((cmdlen = strlen(argv[0])) >= 4) { + cp = argv[0] + cmdlen - 4; + if (strcmp(cp, "less") == 0) { ++ /* ++ * Set a few options like man-db does. ++ * -i: smart case search ++ * -mPm: set prompt to following string terminated by $ ++ */ ++ argv[argc++] = "-imPm" \ ++ " Manual page" \ ++ /* ++ * print " (END)" if EOF, else % in file followed by % sign. ++ * ?X if X:else not X. ++ */ ++ "?e (END):?pB %pB\\%.. " \ ++ "(press h for help or q to quit)" \ ++ "$"; ++#if HAVE_LESS_T + argv[argc++] = mandoc_strdup("-T"); + argv[argc++] = tag_files->tfn; + if (tag_files->tagname != NULL) { +@@ -1206,9 +1221,9 @@ spawn_pager(struct tag_files *tag_files) + argv[argc++] = tag_files->tagname; + use_ofn = 0; + } ++#endif + } + } +-#endif + if (use_ofn) + argv[argc++] = tag_files->ofn; + argv[argc] = NULL; diff --git a/system/mandoc/mandoc.post-deinstall b/system/mandoc/mandoc.post-deinstall new file mode 100644 index 000000000..0a8d5b9df --- /dev/null +++ b/system/mandoc/mandoc.post-deinstall @@ -0,0 +1,3 @@ +#!/bin/sh + +exec rm -f /usr/share/man/mandoc.db 2>/dev/null diff --git a/system/mandoc/mandoc.trigger b/system/mandoc/mandoc.trigger new file mode 100644 index 000000000..34fc1decc --- /dev/null +++ b/system/mandoc/mandoc.trigger @@ -0,0 +1,3 @@ +#!/bin/sh + +exec makewhatis -a -T utf8 "$@" diff --git a/system/mandoc/tbl-colwidth-oob.patch b/system/mandoc/tbl-colwidth-oob.patch new file mode 100644 index 000000000..0b7b0acad --- /dev/null +++ b/system/mandoc/tbl-colwidth-oob.patch @@ -0,0 +1,62 @@ +From mboxrd@z Thu Jan 1 00:00:00 1970 +Received: from localhost (fantadrom.bsd.lv [local]) + by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 0ff00a97 + for <source@mandoc.bsd.lv>; + Fri, 29 Mar 2019 16:27:36 -0500 (EST) +Date: Fri, 29 Mar 2019 16:27:36 -0500 (EST) +X-Mailinglist: mandoc-source +Reply-To: source@mandoc.bsd.lv +MIME-Version: 1.0 +From: schwarze@mandoc.bsd.lv +To: source@mandoc.bsd.lv +Subject: mandoc: Set the maximum column index in a tbl(7) to the maximum *right* +X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ +Content-Type: text/plain; charset=utf-8 +Message-ID: <e3fceff42218668d@fantadrom.bsd.lv> +Archived-At: <http://inbox.vuxu.org/mandoc-source/e3fceff42218668d@fantadrom.bsd.lv/> +List-Archive: <http://inbox.vuxu.org/mandoc-source/> +List-Post: <mailto:source@mandoc.bsd.lv> + +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 +--- a/out.c ++++ b/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 + |