diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-07-18 14:46:25 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-07-18 14:46:25 +0000 |
commit | 0065e1541bdf9d7132fd54e83dfeab0ed1f86f25 (patch) | |
tree | 63ba531074b7bebe73d3c08cde47dc52e28c3b44 | |
parent | f105330f8c9e23c94a433da24c01ff78b5e06613 (diff) | |
download | mandoc-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.
-rw-r--r-- | cgi.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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); + } } |