diff options
author | nicolas.dufresne@gmail.com <nicolas.dufresne@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56> | 2012-10-15 20:06:05 +0000 |
---|---|---|
committer | nicolas.dufresne@gmail.com <nicolas.dufresne@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56> | 2012-10-15 20:06:05 +0000 |
commit | 1c6fd962974c65b3849d37dfb4c8975935e8480f (patch) | |
tree | f2309fada3f4cbdbe0c5b69a238336072b1df9af | |
parent | 1d28bb123d80f045e49f580979f34400cb5c4509 (diff) | |
download | libproxy-1c6fd962974c65b3849d37dfb4c8975935e8480f.tar.gz |
Fix http chunk encoded PAC
This has been broken in previous patch that tried fix an infinit loop that
occured uppon truncated content.
git-svn-id: http://libproxy.googlecode.com/svn/trunk@859 c587cffe-e639-0410-9787-d7902ae8ed56
-rw-r--r-- | libproxy/url.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/libproxy/url.cpp b/libproxy/url.cpp index 8d9de0c..a4895d4 100644 --- a/libproxy/url.cpp +++ b/libproxy/url.cpp @@ -460,7 +460,7 @@ char* url::get_pac() { // Get content unsigned int recvd = 0; buffer = new char[PAC_MAX_SIZE]; - *buffer = '\0'; + memset(buffer, 0, PAC_MAX_SIZE); do { unsigned int chunk_length; @@ -480,14 +480,13 @@ char* url::get_pac() { while (recvd != content_length) { int r = recv(sock, buffer + recvd, content_length - recvd, 0); - if (r < 0) { - recvd = content_length; + if (r <= 0) { + chunked = false; break; } recvd += r; } - buffer[content_length] = '\0'; - } while (recvd != content_length); + } while (chunked); if (string(buffer).size() != content_length) { delete[] buffer; |