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, 404, "Not Found", "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(""); for (i = 0; i < sz; i++) { + if (r[i].sec == 10) + continue; printf(" \n" "
" "