X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=filters.c;h=a384e1b2c92a117627c6c36c0ec8761043cca701;hb=db1fb0ac271ade83ddcae260f5d5806e678f2b7f;hp=290940d141e6d0e8e94775207d3f24fee8c7ede7;hpb=7759e9a72652fe7e10f8596212865d8b2cd22ad4;p=privoxy.git diff --git a/filters.c b/filters.c index 290940d1..a384e1b2 100644 --- a/filters.c +++ b/filters.c @@ -1,11 +1,11 @@ -const char filters_rcs[] = "$Id: filters.c,v 1.180 2013/12/24 13:33:13 fabiankeil Exp $"; +const char filters_rcs[] = "$Id: filters.c,v 1.185 2014/06/12 13:08:25 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/filters.c,v $ * * Purpose : Declares functions to parse/crunch headers and pages. * - * Copyright : Written by and Copyright (C) 2001-2011 the + * Copyright : Written by and Copyright (C) 2001-2014 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -1238,11 +1238,14 @@ struct http_response *redirect_url(struct client_state *csp) * properly formatted URL and use it for the redirection * directly. * - * According to RFC 2616 section 14.30 the URL - * has to be absolute and if the user tries: - * +redirect{shit/this/will/be/parsed/as/pcrs_command.html} + * According to (the now obsolete) RFC 2616 section 14.30 + * the URL has to be absolute and if the user tries: + * +redirect{sadly/this/will/be/parsed/as/pcrs_command.html} * she would get undefined results anyway. * + * RFC 7231 7.1.2 actually allows relative references, + * but those start with a leading slash (RFC 3986 4.2) and + * thus can't be mistaken for pcrs commands either. */ if (*redirection_string == 's') @@ -2046,7 +2049,7 @@ static filter_function_ptr get_filter_function(const struct client_state *csp) { filter_function = pcrs_filter_response; } - else if ((csp->content_type & CT_GIF) && + else if ((csp->content_type & CT_GIF) && (csp->action->flags & ACTION_DEANIMATE)) { filter_function = gif_deanimate_response; @@ -2061,7 +2064,8 @@ static filter_function_ptr get_filter_function(const struct client_state *csp) * Function : remove_chunked_transfer_coding * * Description : In-situ remove the "chunked" transfer coding as defined - * in rfc2616 from a buffer. + * in RFC 7230 4.1 from a buffer. XXX: The implementation + * is neither complete nor compliant (TODO #129). * * Parameters : * 1 : buffer = Pointer to the text buffer @@ -2252,7 +2256,9 @@ char *execute_content_filters(struct client_state *csp) content = (content_filter != NULL) ? (*content_filter)(csp) : NULL; #ifdef FEATURE_EXTERNAL_FILTERS - if (!list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER])) + if ((csp->content_type & CT_TEXT) && + (csp->rlist != NULL) && + !list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER])) { struct list_entry *filtername; size_t size = (size_t)csp->content_length; @@ -2654,7 +2660,8 @@ int content_requires_filtering(struct client_state *csp) */ if ((csp->content_type & CT_TEXT) && (csp->rlist != NULL) && - (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]))) + (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]) || + !list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]))) { return TRUE; } @@ -2664,7 +2671,7 @@ int content_requires_filtering(struct client_state *csp) return TRUE; } - return (!list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER])); + return FALSE; }