Hi, Starting to play with man.cgi (src/usr.bin/mandoc/cgi.c), it seems that man.cgi will segfault if configuration file is absent or empty.
Here a patch that display error message and 505, like when MAN_DIR is invalid. Note: the segfault occurs in cgi.c:224 (http_parse), that assume req->p is not NULL (req->q.manpath = req->p[0]). The diff use the same style that when MAN_DIR is invalid (cgi.c:917), but that could be improved using err(3) ? Thanks. -- Sébastien Marie Index: cgi.c =================================================================== RCS file: /cvs/src/usr.bin/mandoc/cgi.c,v retrieving revision 1.13 diff -u -p -r1.13 cgi.c --- cgi.c 13 Jul 2014 15:38:06 -0000 1.13 +++ cgi.c 18 Jul 2014 06:43:14 -0000 @@ -966,8 +968,12 @@ pathgen(struct req *req) char *dp; size_t dpsz; - if (NULL == (fp = fopen("manpath.conf", "r"))) - return; + if (NULL == (fp = fopen("manpath.conf", "r"))) { + fprintf(stderr, "manpath.conf not found in MAN_DIR (%s)\n", + MAN_DIR); + pg_error_internal(); + exit(EXIT_FAILURE); + } while (NULL != (dp = fgetln(fp, &dpsz))) { if ('\n' == dp[dpsz - 1]) @@ -975,5 +981,11 @@ pathgen(struct req *req) req->p = mandoc_realloc(req->p, (req->psz + 1) * sizeof(char *)); req->p[req->psz++] = mandoc_strndup(dp, dpsz); + } + + if ( req->p == NULL ) { + fprintf(stderr, "empty manpath.conf\n"); + pg_error_internal(); + exit(EXIT_FAILURE); } }