X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgi.c;h=1307b87e48bfe566c59aba85c7592a25059d8251;hp=9e1e8e41c0ce6966930361d690722126151f0200;hb=dc80a8219d68d1e25821219e0b3b5bcda5bae21e;hpb=8264f40fd3bc5a641872ad20ff76d4a8dab67b62 diff --git a/cgi.c b/cgi.c index 9e1e8e41..1307b87e 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.155 2012/09/18 18:29:55 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.159 2014/10/18 11:31:25 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -495,9 +495,12 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, if (*query_args_start == '/') { *query_args_start++ = '\0'; - if ((param_list = new_map())) - { - map(param_list, "file", 1, url_decode(query_args_start), 0); + param_list = new_map(); + err = map(param_list, "file", 1, url_decode(query_args_start), 0); + if (JB_ERR_OK != err) { + free(param_list); + free(path_copy); + return cgi_error_memory(); } } else @@ -631,11 +634,7 @@ static struct map *parse_cgi_parameters(char *argstring) } vector = malloc_or_die(max_segments * sizeof(char *)); - if (NULL == (cgi_params = new_map())) - { - freez(vector); - return NULL; - } + cgi_params = new_map(); /* * IE 5 does, of course, violate RFC 2316 Sect 4.1 and sends @@ -978,6 +977,9 @@ struct http_response *error_response(struct client_state *csp, case SOCKS_5: socks_type = "socks5-"; break; + case SOCKS_5T: + socks_type = "socks5t-"; + break; default: log_error(LOG_LEVEL_FATAL, "Unknown socks type: %d.", fwd->type); } @@ -1570,7 +1572,7 @@ char *compress_buffer(char *buffer, size_t *buffer_length, int compression_level * On error, free()s rsp and returns cgi_error_memory() * *********************************************************************/ -struct http_response *finish_http_response(const struct client_state *csp, struct http_response *rsp) +struct http_response *finish_http_response(struct client_state *csp, struct http_response *rsp) { char buf[BUFFER_SIZE]; jb_err err; @@ -1620,6 +1622,11 @@ struct http_response *finish_http_response(const struct client_state *csp, struc if (!err) { snprintf(buf, sizeof(buf), "Content-Length: %d", (int)rsp->content_length); + /* + * Signal serve() that the client will be able to figure out + * the end of the response without having to close the connection. + */ + csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET; err = enlist(rsp->headers, buf); } @@ -2154,10 +2161,6 @@ struct map *default_exports(const struct client_state *csp, const char *caller) assert(csp); exports = new_map(); - if (exports == NULL) - { - return NULL; - } if (csp->config->hostname) {