X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgi.c;h=86553664a57d2769c6151b3dc1856647d73ae985;hp=0583f88a345c17daab459877f2e6f051d7f913fe;hb=7ae12b2afe7124cc23216f76aec2acdd5c085595;hpb=291f91036dabb40b2323a118dd34c368ae2c6848 diff --git a/cgi.c b/cgi.c index 0583f88a..86553664 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.130 2011/04/19 13:00:47 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.136 2011/07/03 17:54:29 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -271,6 +271,13 @@ const char image_blank_data[] = const size_t image_pattern_length = sizeof(image_pattern_data) - 1; const size_t image_blank_length = sizeof(image_blank_data) - 1; +#ifdef FEATURE_COMPRESSION +/* + * Minimum length which a buffer has to reach before + * we bother to (re-)compress it. Completely arbitrary. + */ +const size_t LOWER_LENGTH_LIMIT_FOR_COMPRESSION = 1024U; +#endif static struct http_response cgi_error_memory_response[1]; @@ -551,7 +558,9 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp, if (err && (err != JB_ERR_MEMORY)) { /* Unexpected error! Shouldn't get here */ - log_error(LOG_LEVEL_ERROR, "Unexpected CGI error %d in top-level handler. Please file a bug report!", err); + log_error(LOG_LEVEL_ERROR, + "Unexpected CGI error %d in top-level handler. " + "Please file a bug report!", err); err = cgi_error_unknown(csp, rsp, err); } if (!err) @@ -1041,17 +1050,17 @@ void cgi_init_error_messages(void) "Content-Type: text/html\r\n" "\r\n"; cgi_error_memory_response->body = - "\r\n" - "\r\n" - " 500 Internal Privoxy Error\r\n" + "\n" + "\n" + " 500 Internal Privoxy Error\n" " " - "\r\n" - "\r\n" - "

500 Internal Privoxy Error

\r\n" - "

Privoxy ran out of memory while processing your request.

\r\n" - "

Please contact your proxy administrator, or try again later

\r\n" - "\r\n" - "\r\n"; + "\n" + "\n" + "

500 Internal Privoxy Error

\n" + "

Privoxy ran out of memory while processing your request.

\n" + "

Please contact your proxy administrator, or try again later

\n" + "\n" + "\n"; cgi_error_memory_response->head_length = strlen(cgi_error_memory_response->head); @@ -1109,18 +1118,18 @@ jb_err cgi_error_no_template(const struct client_state *csp, static const char status[] = "500 Internal Privoxy Error"; static const char body_prefix[] = - "\r\n" - "\r\n" - " 500 Internal Privoxy Error\r\n" + "\n" + "\n" + " 500 Internal Privoxy Error\n" " " - "\r\n" - "\r\n" - "

500 Internal Privoxy Error

\r\n" - "

Privoxy encountered an error while processing your request:

\r\n" + "\n" + "\n" + "

500 Internal Privoxy Error

\n" + "

Privoxy encountered an error while processing your request:

\n" "

Could not load template file "; static const char body_suffix[] = - " or one of its included components.

\r\n" - "

Please contact your proxy administrator.

\r\n" + " or one of its included components.

\n" + "

Please contact your proxy administrator.

\n" "

If you are the proxy administrator, please put the required file(s)" "in the (confdir)/templates directory. The " "location of the (confdir) directory " @@ -1129,9 +1138,9 @@ jb_err cgi_error_no_template(const struct client_state *csp, #ifndef _WIN32 ", or /etc/privoxy/" #endif /* ndef _WIN32 */ - ").

\r\n" - "\r\n" - "\r\n"; + ").

\n" + "\n" + "\n"; const size_t body_size = strlen(body_prefix) + strlen(template_name) + strlen(body_suffix) + 1; assert(csp); @@ -1196,28 +1205,24 @@ jb_err cgi_error_unknown(const struct client_state *csp, static const char status[] = "500 Internal Privoxy Error"; static const char body_prefix[] = - "\r\n" - "\r\n" - " 500 Internal Privoxy Error\r\n" + "\n" + "\n" + " 500 Internal Privoxy Error\n" " " - "\r\n" - "\r\n" - "

500 Internal Privoxy Error

\r\n" - "

Privoxy encountered an error while processing your request:

\r\n" + "\n" + "\n" + "

500 Internal Privoxy Error

\n" + "

Privoxy encountered an error while processing your request:

\n" "

Unexpected internal error: "; static const char body_suffix[] = - "

\r\n" + "

\n" "

Please " "" - "file a bug report.

\r\n" - "\r\n" - "\r\n"; - char errnumbuf[30]; - /* - * Due to sizeof(errnumbuf), body_size will be slightly - * bigger than necessary but it doesn't really matter. - */ - const size_t body_size = strlen(body_prefix) + sizeof(errnumbuf) + strlen(body_suffix) + 1; + "file a bug report.

\n" + "\n" + "\n"; + /* Includes room for larger error numbers in the future. */ + const size_t body_size = sizeof(body_prefix) + sizeof(body_suffix) + 5; assert(csp); assert(rsp); @@ -1230,16 +1235,13 @@ jb_err cgi_error_unknown(const struct client_state *csp, rsp->is_static = 0; rsp->crunch_reason = INTERNAL_ERROR; - snprintf(errnumbuf, sizeof(errnumbuf), "%d", error_to_report); - rsp->body = malloc(body_size); if (rsp->body == NULL) { return JB_ERR_MEMORY; } - strlcpy(rsp->body, body_prefix, body_size); - strlcat(rsp->body, errnumbuf, body_size); - strlcat(rsp->body, body_suffix, body_size); + + snprintf(rsp->body, body_size, "%s%d%s", body_prefix, error_to_report, body_suffix); rsp->status = strdup(status); if (rsp->status == NULL) @@ -1584,7 +1586,7 @@ struct http_response *finish_http_response(const struct client_state *csp, struc #ifdef FEATURE_COMPRESSION if (!err && (csp->flags & CSP_FLAG_CLIENT_SUPPORTS_DEFLATE) - && (rsp->content_length > LOWER_LENGTH_LIMIT_FOR_COMRPESSION)) + && (rsp->content_length > LOWER_LENGTH_LIMIT_FOR_COMPRESSION)) { char *compressed_content; @@ -1593,8 +1595,8 @@ struct http_response *finish_http_response(const struct client_state *csp, struc { freez(rsp->body); rsp->body = compressed_content; + err = enlist_unique_header(rsp->headers, "Content-Encoding", "deflate"); } - err = enlist_unique_header(rsp->headers, "Content-Encoding", "deflate"); } #endif