X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgisimple.c;h=8f1be727f36d3ddf308afe3987b992ed328607c9;hp=fcc49a641db41e3cac621e9c45f77073aa227d38;hb=7c7592fae8bbc71e2b255289e5a1eebd752e4dfc;hpb=082ac61585ecfa331e771fd44cfec96f276d2e59 diff --git a/cgisimple.c b/cgisimple.c index fcc49a64..8f1be727 100644 --- a/cgisimple.c +++ b/cgisimple.c @@ -1,4 +1,4 @@ -const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.74 2008/04/26 15:50:56 fabiankeil Exp $"; +const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.80 2008/05/04 16:18:32 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgisimple.c,v $ @@ -36,6 +36,29 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.74 2008/04/26 15:50:56 fabian * * Revisions : * $Log: cgisimple.c,v $ + * Revision 1.80 2008/05/04 16:18:32 fabiankeil + * Provide parse_http_url() with a third parameter to specify + * whether or not URLs without protocol are acceptable. + * + * Revision 1.79 2008/05/04 13:30:56 fabiankeil + * Streamline parse_http_url()'s prototype. + * + * Revision 1.78 2008/05/03 16:50:11 fabiankeil + * Leverage content_filters_enabled() in cgi_show_url_info(). + * + * Revision 1.77 2008/05/02 09:47:48 fabiankeil + * In cgi_show_url_info, pass an initialized http structure + * to parse_http_url() as that will be required soonish and + * assert that https URLs are recognized correctly. + * + * Revision 1.76 2008/04/28 09:13:30 fabiankeil + * In load_file(), remember the error reason and fclose() + * and return later on instead of right away. + * + * Revision 1.75 2008/04/27 13:52:52 fabiankeil + * Move CGI file loading code into load_file() and + * add checks for unexpected errors. + * * Revision 1.74 2008/04/26 15:50:56 fabiankeil * Fix macro name in cgi_show_file() error path. * @@ -1382,22 +1405,16 @@ jb_err cgi_show_url_info(struct client_state *csp, url_param[0] = '\0'; } } - else if (url_param[0] != '\0') + else if (NULL == strstr(url_param, "://")) { - /* - * Unknown prefix - assume http:// - */ - const size_t url_param_prefixed_size = 7 + 1 + strlen(url_param); - char * url_param_prefixed = malloc(url_param_prefixed_size); - if (NULL == url_param_prefixed) + /* No prefix - assume http:// */ + char *url_param_prefixed = strdup("http://"); + + if (JB_ERR_OK != string_join(&url_param_prefixed, url_param)) { - free(url_param); free_map(exports); return JB_ERR_MEMORY; } - strlcpy(url_param_prefixed, "http://", url_param_prefixed_size); - strlcat(url_param_prefixed, url_param, url_param_prefixed_size); - free(url_param); url_param = url_param_prefixed; } @@ -1456,7 +1473,9 @@ jb_err cgi_show_url_info(struct client_state *csp, return JB_ERR_MEMORY; } - err = parse_http_url(url_param, url_to_query, csp); + memset(url_to_query, '\0', sizeof(url_to_query)); + err = parse_http_url(url_param, url_to_query, REQUIRE_PROTOCOL); + assert(url_to_query->ssl == !strncmp(url_param, "https://", 8)); free(url_param); @@ -1679,14 +1698,10 @@ jb_err cgi_show_url_info(struct client_state *csp, * If zlib support is available, if no content filters * are enabled or if the prevent-compression action is enabled, * suppress the "compression could prevent filtering" warning. - * - * XXX: Change content_filters_enabled()'s prototype so we can - * use it here. */ #ifndef FEATURE_ZLIB - if ((list_is_empty(action->multi[ACTION_MULTI_FILTER]) - && !(action->flags & ACTION_DEANIMATE)) - || (action->flags & ACTION_NO_COMPRESSION)) + if (!content_filters_enabled(action) || + (action->flags & ACTION_NO_COMPRESSION)) #endif { if (!err) err = map_block_killer(exports, "filters-might-be-ineffective"); @@ -2115,6 +2130,7 @@ static jb_err load_file(const char *filename, char **buffer, size_t *length) { FILE *fp; int ret; + jb_err err = JB_ERR_OK; fp = fopen(filename, "rb"); if (NULL == fp) @@ -2149,11 +2165,9 @@ static jb_err load_file(const char *filename, char **buffer, size_t *length) *buffer = (char *)zalloc(*length + 1); if (NULL == *buffer) { - fclose(fp); - return JB_ERR_MEMORY; + err = JB_ERR_MEMORY; } - - if (!fread(*buffer, *length, 1, fp)) + else if (!fread(*buffer, *length, 1, fp)) { /* * May happen if the file size changes between fseek() and @@ -2161,13 +2175,12 @@ static jb_err load_file(const char *filename, char **buffer, size_t *length) */ log_error(LOG_LEVEL_ERROR, "Couldn't completely read file %s.", filename); - fclose(fp); - return JB_ERR_FILE; + err = JB_ERR_FILE; } fclose(fp); - return JB_ERR_OK; + return err; }