aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cgi.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-07-18 14:46:25 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-07-18 14:46:25 +0000
commit0065e1541bdf9d7132fd54e83dfeab0ed1f86f25 (patch)
tree63ba531074b7bebe73d3c08cde47dc52e28c3b44 /cgi.c
parentf105330f8c9e23c94a433da24c01ff78b5e06613 (diff)
downloadmandoc-0065e1541bdf9d7132fd54e83dfeab0ed1f86f25.tar.gz
mandoc-0065e1541bdf9d7132fd54e83dfeab0ed1f86f25.tar.zst
mandoc-0065e1541bdf9d7132fd54e83dfeab0ed1f86f25.zip
When the MAN_DIR/manpath.conf configuration file does not exist or is empty,
log the problem, hand the pg_error_internal() error page to the client, and exit(3) in a controlled way instead of stumbling on and segfaulting later. Patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>, messages tweaked by me.
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/cgi.c b/cgi.c
index e246e7fd..8f539b46 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.73 2014/07/13 15:38:36 schwarze Exp $ */
+/* $Id: cgi.c,v 1.74 2014/07/18 14:46:25 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -970,8 +970,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, "%s/manpath.conf: %s\n",
+ MAN_DIR, strerror(errno));
+ pg_error_internal();
+ exit(EXIT_FAILURE);
+ }
while (NULL != (dp = fgetln(fp, &dpsz))) {
if ('\n' == dp[dpsz - 1])
@@ -980,4 +984,10 @@ pathgen(struct req *req)
(req->psz + 1) * sizeof(char *));
req->p[req->psz++] = mandoc_strndup(dp, dpsz);
}
+
+ if ( req->p == NULL ) {
+ fprintf(stderr, "%s/manpath.conf is empty\n", MAN_DIR);
+ pg_error_internal();
+ exit(EXIT_FAILURE);
+ }
}