diff --git a/mongoose.c b/mongoose.c index bae28948..dae62e19 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2974,8 +2974,13 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) { parse_http_headers(&pbuf, &ri); // Make up and send the status line - status = get_header(&ri, "Status"); - conn->request_info.status_code = status == NULL ? 200 : atoi(status); + if ((status = get_header(&ri, "Status")) != NULL) { + conn->request_info.status_code = atoi(status); + } else if (get_header(&ri, "Location") != NULL) { + conn->request_info.status_code = 302; + } else { + conn->request_info.status_code = 200; + } (void) mg_printf(conn, "HTTP/1.1 %d OK\r\n", conn->request_info.status_code); // Send headers diff --git a/test/test.pl b/test/test.pl index 33c54dd2..4ea2b913 100644 --- a/test/test.pl +++ b/test/test.pl @@ -322,6 +322,7 @@ unless (scalar(@ARGV) > 0 and $ARGV[0] eq "basic_tests") { unlink "$root/.htpasswd"; o("GET /env.cgi HTTP/1.0\n\r\n", 'HTTP/1.1 200 OK', 'GET CGI file'); + o("GET /redirect.cgi HTTP/1.0\n\n", 'HTTP/1.1 302', 'Redirect'); o("GET /sh.cgi HTTP/1.0\n\r\n", 'shell script CGI', 'GET sh CGI file') unless on_windows(); o("GET /env.cgi?var=HELLO HTTP/1.0\n\n", 'QUERY_STRING=var=HELLO',