Commit 4fcb64fe authored by Sergey Lyubka's avatar Sergey Lyubka

Fix exception in win32 code path when CGI exec fails

parent 8966f47c
...@@ -3198,19 +3198,22 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) { ...@@ -3198,19 +3198,22 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
send_http_error(conn, 500, http_500_error, send_http_error(conn, 500, http_500_error,
"Cannot create CGI pipe: %s", strerror(ERRNO)); "Cannot create CGI pipe: %s", strerror(ERRNO));
goto done; goto done;
} else if ((pid = spawn_process(conn, p, blk.buf, blk.vars,
fd_stdin[0], fd_stdout[1], dir)) == (pid_t) -1) {
send_http_error(conn, 500, http_500_error,
"Cannot spawn CGI process [%s]: %s", prog, strerror(ERRNO));
goto done;
} }
pid = spawn_process(conn, p, blk.buf, blk.vars, fd_stdin[0], fd_stdout[1],
dir);
// spawn_process() must close those! // spawn_process() must close those!
// If we don't mark them as closed, close() attempt before // If we don't mark them as closed, close() attempt before
// return from this function throws an exception on Windows. // return from this function throws an exception on Windows.
// Windows does not like when closed descriptor is closed again. // Windows does not like when closed descriptor is closed again.
fd_stdin[0] = fd_stdout[1] = -1; fd_stdin[0] = fd_stdout[1] = -1;
if (pid == (pid_t) -1) {
send_http_error(conn, 500, http_500_error,
"Cannot spawn CGI process [%s]: %s", prog, strerror(ERRNO));
goto done;
}
if ((in = fdopen(fd_stdin[1], "wb")) == NULL || if ((in = fdopen(fd_stdin[1], "wb")) == NULL ||
(out = fdopen(fd_stdout[0], "rb")) == NULL) { (out = fdopen(fd_stdout[0], "rb")) == NULL) {
send_http_error(conn, 500, http_500_error, send_http_error(conn, 500, http_500_error,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment