X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=parsers.c;h=cfe9307fd30a43e653c88b51102d925e2618e394;hb=b0504683766bba406e9cbc2edcf3998559141a54;hp=85137fe8c4b9fed72fb058ac116f8a5188929f7c;hpb=4be442c71bb5a72c4fc9816a627fdc04f1f73c0c;p=privoxy.git diff --git a/parsers.c b/parsers.c index 85137fe8..cfe9307f 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.151 2009/02/15 14:46:35 fabiankeil Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.153 2009/03/07 13:09:17 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -44,6 +44,16 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.151 2009/02/15 14:46:35 fabiankei * * Revisions : * $Log: parsers.c,v $ + * Revision 1.153 2009/03/07 13:09:17 fabiankeil + * Change csp->expected_content and_csp->expected_content_length from + * size_t to unsigned long long to reduce the likelihood of integer + * overflows that would let us close the connection prematurely. + * Bug found while investigating #2669131, reported by cyberpatrol. + * + * Revision 1.152 2009/03/01 18:43:48 fabiankeil + * Help clang understand that we aren't dereferencing + * NULL pointers here. + * * Revision 1.151 2009/02/15 14:46:35 fabiankeil * Don't let hide-referrer{conditional-*}} pass * Referer headers without http URLs. @@ -1079,9 +1089,9 @@ static const add_header_func_ptr add_server_headers[] = { * file, the results are not portable. * *********************************************************************/ -int flush_socket(jb_socket fd, struct iob *iob) +long flush_socket(jb_socket fd, struct iob *iob) { - int len = iob->eod - iob->cur; + long len = iob->eod - iob->cur; if (len <= 0) { @@ -1114,7 +1124,7 @@ int flush_socket(jb_socket fd, struct iob *iob) * or buffer limit reached. * *********************************************************************/ -jb_err add_to_iob(struct client_state *csp, char *buf, int n) +jb_err add_to_iob(struct client_state *csp, char *buf, long n) { struct iob *iob = csp->iob; size_t used, offset, need, want; @@ -2826,11 +2836,11 @@ static jb_err server_adjust_content_length(struct client_state *csp, char **head *********************************************************************/ static jb_err server_save_content_length(struct client_state *csp, char **header) { - unsigned int content_length = 0; + unsigned long long content_length = 0; assert(*(*header+14) == ':'); - if (1 != sscanf(*header+14, ": %u", &content_length)) + if (1 != sscanf(*header+14, ": %llu", &content_length)) { log_error(LOG_LEVEL_ERROR, "Crunching invalid header: %s", *header); freez(*header);