|  | @@ -1303,7 +1303,6 @@ static pid_t spawn_process(struct mg_connection *conn, const char *prog,
 | 
											
												
													
														|  |        (void) close(fd_stdin);
 |  |        (void) close(fd_stdin);
 | 
											
												
													
														|  |        (void) close(fd_stdout);
 |  |        (void) close(fd_stdout);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -      // Execute CGI program. No need to lock: new process
 |  | 
 | 
											
												
													
														|  |        interp = conn->ctx->config[CGI_INTERPRETER];
 |  |        interp = conn->ctx->config[CGI_INTERPRETER];
 | 
											
												
													
														|  |        if (interp == NULL) {
 |  |        if (interp == NULL) {
 | 
											
												
													
														|  |          (void) execle(prog, prog, NULL, envp);
 |  |          (void) execle(prog, prog, NULL, envp);
 | 
											
										
											
												
													
														|  | @@ -1728,6 +1727,7 @@ static const struct {
 | 
											
												
													
														|  |    {".m3u", 4, "audio/x-mpegurl"},
 |  |    {".m3u", 4, "audio/x-mpegurl"},
 | 
											
												
													
														|  |    {".ram", 4, "audio/x-pn-realaudio"},
 |  |    {".ram", 4, "audio/x-pn-realaudio"},
 | 
											
												
													
														|  |    {".xml", 4, "text/xml"},
 |  |    {".xml", 4, "text/xml"},
 | 
											
												
													
														|  | 
 |  | +  {".json",  5, "text/json"},
 | 
											
												
													
														|  |    {".xslt", 5, "application/xml"},
 |  |    {".xslt", 5, "application/xml"},
 | 
											
												
													
														|  |    {".ra",  3, "audio/x-pn-realaudio"},
 |  |    {".ra",  3, "audio/x-pn-realaudio"},
 | 
											
												
													
														|  |    {".doc", 4, "application/msword"},
 |  |    {".doc", 4, "application/msword"},
 | 
											
										
											
												
													
														|  | @@ -3003,6 +3003,9 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
 | 
											
												
													
														|  |        !forward_body_data(conn, in, INVALID_SOCKET, NULL)) {
 |  |        !forward_body_data(conn, in, INVALID_SOCKET, NULL)) {
 | 
											
												
													
														|  |      goto done;
 |  |      goto done;
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  | 
 |  | +  // Close so child gets an EOF.
 | 
											
												
													
														|  | 
 |  | +  fclose(in);
 | 
											
												
													
														|  | 
 |  | +  in = NULL;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    // Now read CGI reply into a buffer. We need to set correct
 |  |    // Now read CGI reply into a buffer. We need to set correct
 | 
											
												
													
														|  |    // status code, thus we need to see all HTTP headers first.
 |  |    // status code, thus we need to see all HTTP headers first.
 |