projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix comment typo
[privoxy.git]
/
filters.c
diff --git
a/filters.c
b/filters.c
index
31f528e
..
1fc1c47
100644
(file)
--- a/
filters.c
+++ b/
filters.c
@@
-1,4
+1,4
@@
-const char filters_rcs[] = "$Id: filters.c,v 1.1
83 2014/06/03 10:29:40
fabiankeil Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.1
91 2014/10/18 11:28:36
fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
@@
-347,12
+347,7
@@
int acl_addr(const char *aspec, struct access_control_addr *aca)
* Use a temporary acl spec copy so we can log
* the unmodified original in case of parse errors.
*/
* Use a temporary acl spec copy so we can log
* the unmodified original in case of parse errors.
*/
- acl_spec = strdup(aspec);
- if (acl_spec == NULL)
- {
- /* XXX: This will be logged as parse error. */
- return(-1);
- }
+ acl_spec = strdup_or_die(aspec);
if ((p = strchr(acl_spec, '/')) != NULL)
{
if ((p = strchr(acl_spec, '/')) != NULL)
{
@@
-582,12
+577,7
@@
struct http_response *block_url(struct client_state *csp)
/* and handle accordingly: */
if ((p == NULL) || (0 == strcmpic(p, "pattern")))
{
/* and handle accordingly: */
if ((p == NULL) || (0 == strcmpic(p, "pattern")))
{
- rsp->status = strdup("403 Request blocked by Privoxy");
- if (rsp->status == NULL)
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
+ rsp->status = strdup_or_die("403 Request blocked by Privoxy");
rsp->body = bindup(image_pattern_data, image_pattern_length);
if (rsp->body == NULL)
{
rsp->body = bindup(image_pattern_data, image_pattern_length);
if (rsp->body == NULL)
{
@@
-604,12
+594,7
@@
struct http_response *block_url(struct client_state *csp)
}
else if (0 == strcmpic(p, "blank"))
{
}
else if (0 == strcmpic(p, "blank"))
{
- rsp->status = strdup("403 Request blocked by Privoxy");
- if (rsp->status == NULL)
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
+ rsp->status = strdup_or_die("403 Request blocked by Privoxy");
rsp->body = bindup(image_blank_data, image_blank_length);
if (rsp->body == NULL)
{
rsp->body = bindup(image_blank_data, image_blank_length);
if (rsp->body == NULL)
{
@@
-626,12
+611,7
@@
struct http_response *block_url(struct client_state *csp)
}
else
{
}
else
{
- rsp->status = strdup("302 Local Redirect from Privoxy");
- if (rsp->status == NULL)
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
+ rsp->status = strdup_or_die("302 Local Redirect from Privoxy");
if (enlist_unique_header(rsp->headers, "Location", p))
{
if (enlist_unique_header(rsp->headers, "Location", p))
{
@@
-651,7
+631,7
@@
struct http_response *block_url(struct client_state *csp)
new_content_type = csp->action->string[ACTION_STRING_CONTENT_TYPE];
freez(rsp->body);
new_content_type = csp->action->string[ACTION_STRING_CONTENT_TYPE];
freez(rsp->body);
- rsp->body = strdup(" ");
+ rsp->body = strdup
_or_die
(" ");
rsp->content_length = 1;
if (csp->config->feature_flags & RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK)
rsp->content_length = 1;
if (csp->config->feature_flags & RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK)
@@
-662,18
+642,13
@@
struct http_response *block_url(struct client_state *csp)
* Return a 200 OK status for pages blocked with +handle-as-empty-document
* if the "handle-as-empty-doc-returns-ok" runtime config option is set.
*/
* Return a 200 OK status for pages blocked with +handle-as-empty-document
* if the "handle-as-empty-doc-returns-ok" runtime config option is set.
*/
- rsp->status = strdup("200 Request blocked by Privoxy");
+ rsp->status = strdup
_or_die
("200 Request blocked by Privoxy");
}
else
{
}
else
{
- rsp->status = strdup("403 Request blocked by Privoxy");
+ rsp->status = strdup
_or_die
("403 Request blocked by Privoxy");
}
}
- if (rsp->status == NULL)
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
if (new_content_type != 0)
{
log_error(LOG_LEVEL_HEADER, "Overwriting Content-Type with %s", new_content_type);
if (new_content_type != 0)
{
log_error(LOG_LEVEL_HEADER, "Overwriting Content-Type with %s", new_content_type);
@@
-693,12
+668,7
@@
struct http_response *block_url(struct client_state *csp)
jb_err err;
struct map * exports;
jb_err err;
struct map * exports;
- rsp->status = strdup("403 Request blocked by Privoxy");
- if (rsp->status == NULL)
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
+ rsp->status = strdup_or_die("403 Request blocked by Privoxy");
exports = default_exports(csp, NULL);
if (exports == NULL)
exports = default_exports(csp, NULL);
if (exports == NULL)
@@
-802,9
+772,9
@@
struct http_response *trust_url(struct client_state *csp)
return cgi_error_memory();
}
return cgi_error_memory();
}
- rsp->status = strdup("403 Request blocked by Privoxy");
+ rsp->status = strdup
_or_die
("403 Request blocked by Privoxy");
exports = default_exports(csp, NULL);
exports = default_exports(csp, NULL);
- if (exports == NULL
|| rsp->status == NULL
)
+ if (exports == NULL)
{
free_http_response(rsp);
return cgi_error_memory();
{
free_http_response(rsp);
return cgi_error_memory();
@@
-836,7
+806,7
@@
struct http_response *trust_url(struct client_state *csp)
/*
* Export the trust list
*/
/*
* Export the trust list
*/
- p = strdup("");
+ p = strdup
_or_die
("");
for (tl = csp->config->trust_list; (t = *tl) != NULL ; tl++)
{
snprintf(buf, sizeof(buf), "<li>%s</li>\n", t->spec);
for (tl = csp->config->trust_list; (t = *tl) != NULL ; tl++)
{
snprintf(buf, sizeof(buf), "<li>%s</li>\n", t->spec);
@@
-858,7
+828,7
@@
struct http_response *trust_url(struct client_state *csp)
{
struct list_entry *l;
{
struct list_entry *l;
- p = strdup("");
+ p = strdup
_or_die
("");
for (l = csp->config->trust_info->first; l ; l = l->next)
{
snprintf(buf, sizeof(buf), "<li> <a href=\"%s\">%s</a><br>\n", l->str, l->str);
for (l = csp->config->trust_info->first; l ; l = l->next)
{
snprintf(buf, sizeof(buf), "<li> <a href=\"%s\">%s</a><br>\n", l->str, l->str);
@@
-1131,14
+1101,8
@@
char *get_last_url(char *subject, const char *redirect_mode)
}
if (NULL != url_segment)
{
}
if (NULL != url_segment)
{
- url_segment = strdup(url_segment);
+ url_segment = strdup
_or_die
(url_segment);
freez(dtoken);
freez(dtoken);
- if (url_segment == NULL)
- {
- log_error(LOG_LEVEL_ERROR,
- "Out of memory while searching for redirects.");
- return NULL;
- }
break;
}
freez(dtoken);
break;
}
freez(dtoken);
@@
-1238,11
+1202,14
@@
struct http_response *redirect_url(struct client_state *csp)
* properly formatted URL and use it for the redirection
* directly.
*
* 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{s
hit
/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{s
adly
/this/will/be/parsed/as/pcrs_command.html}
* she would get undefined results anyway.
*
* 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')
*/
if (*redirection_string == 's')
@@
-1321,8
+1288,8
@@
struct http_response *redirect_url(struct client_state *csp)
return cgi_error_memory();
}
return cgi_error_memory();
}
- if (enlist_unique_header(rsp->headers, "Location", new_url)
-
|| (NULL == (rsp->status = strdup("302 Local Redirect from Privoxy"))
))
+ rsp->status = strdup_or_die("302 Local Redirect from Privoxy");
+
if (enlist_unique_header(rsp->headers, "Location", new_url
))
{
freez(new_url);
free_http_response(rsp);
{
freez(new_url);
free_http_response(rsp);
@@
-1467,7
+1434,7
@@
int is_untrusted_url(const struct client_state *csp)
{
char * path;
char * path_end;
{
char * path;
char * path_end;
- char * new_entry = strdup("~");
+ char * new_entry = strdup
_or_die
("~");
string_append(&new_entry, csp->http->hostport);
string_append(&new_entry, csp->http->hostport);
@@
-1873,6
+1840,7
@@
static char *execute_external_filter(const struct client_state *csp,
{
log_error(LOG_LEVEL_ERROR, "fwrite(..., %d, 1, ..) failed: %E", *size);
unlink(file_name);
{
log_error(LOG_LEVEL_ERROR, "fwrite(..., %d, 1, ..) failed: %E", *size);
unlink(file_name);
+ fclose(fp);
return NULL;
}
fclose(fp);
return NULL;
}
fclose(fp);
@@
-2041,7
+2009,6
@@
static filter_function_ptr get_filter_function(const struct client_state *csp)
* the content type and action settings.
*/
if ((csp->content_type & CT_TEXT) &&
* the content type and action settings.
*/
if ((csp->content_type & CT_TEXT) &&
- (csp->rlist != NULL) &&
(!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER])))
{
filter_function = pcrs_filter_response;
(!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER])))
{
filter_function = pcrs_filter_response;
@@
-2061,7
+2028,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
* 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
*
* Parameters :
* 1 : buffer = Pointer to the text buffer
@@
-2253,7
+2221,6
@@
char *execute_content_filters(struct client_state *csp)
#ifdef FEATURE_EXTERNAL_FILTERS
if ((csp->content_type & CT_TEXT) &&
#ifdef FEATURE_EXTERNAL_FILTERS
if ((csp->content_type & CT_TEXT) &&
- (csp->rlist != NULL) &&
!list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]))
{
struct list_entry *filtername;
!list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]))
{
struct list_entry *filtername;
@@
-2268,7
+2235,15
@@
char *execute_content_filters(struct client_state *csp)
for (filtername = csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]->first;
filtername ; filtername = filtername->next)
{
for (filtername = csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]->first;
filtername ; filtername = filtername->next)
{
- content = execute_external_filter(csp, filtername->str, content, &size);
+ char *result = execute_external_filter(csp, filtername->str, content, &size);
+ if (result != NULL)
+ {
+ if (content != csp->iob->cur)
+ {
+ free(content);
+ }
+ content = result;
+ }
}
csp->flags |= CSP_FLAG_MODIFIED;
csp->content_length = size;
}
csp->flags |= CSP_FLAG_MODIFIED;
csp->content_length = size;
@@
-2375,7
+2350,7
@@
void apply_url_actions(struct current_action_spec *action,
* Invalid syntax is fatal.
*
*********************************************************************/
* Invalid syntax is fatal.
*
*********************************************************************/
-
const static
struct forward_spec *get_forward_override_settings(struct client_state *csp)
+
static const
struct forward_spec *get_forward_override_settings(struct client_state *csp)
{
const char *forward_override_line = csp->action->string[ACTION_STRING_FORWARD_OVERRIDE];
char forward_settings[BUFFER_SIZE];
{
const char *forward_override_line = csp->action->string[ACTION_STRING_FORWARD_OVERRIDE];
char forward_settings[BUFFER_SIZE];
@@
-2578,12
+2553,7
@@
struct http_response *direct_response(struct client_state *csp)
return cgi_error_memory();
}
return cgi_error_memory();
}
- if (NULL == (rsp->status = strdup("501 Not Implemented")))
- {
- free_http_response(rsp);
- return cgi_error_memory();
- }
-
+ rsp->status = strdup_or_die("501 Not Implemented");
rsp->is_static = 1;
rsp->crunch_reason = UNSUPPORTED;
rsp->is_static = 1;
rsp->crunch_reason = UNSUPPORTED;
@@
-2655,7
+2625,6
@@
int content_requires_filtering(struct client_state *csp)
* the content type and action settings.
*/
if ((csp->content_type & CT_TEXT) &&
* the content type and action settings.
*/
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_EXTERNAL_FILTER])))
{
(!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]) ||
!list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER])))
{