summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicolas.dufresne@gmail.com <nicolas.dufresne@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56>2012-10-15 20:06:05 +0000
committernicolas.dufresne@gmail.com <nicolas.dufresne@gmail.com@c587cffe-e639-0410-9787-d7902ae8ed56>2012-10-15 20:06:05 +0000
commit1c6fd962974c65b3849d37dfb4c8975935e8480f (patch)
treef2309fada3f4cbdbe0c5b69a238336072b1df9af
parent1d28bb123d80f045e49f580979f34400cb5c4509 (diff)
downloadlibproxy-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.cpp9
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;