--- libproxy/url.cpp~ 2011-06-06 17:44:37.216019447 -0400 +++ libproxy/url.cpp 2012-10-23 11:00:30.517614575 -0400 @@ -457,7 +457,7 @@ // 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; @@ -471,15 +471,18 @@ // Add this chunk to our content length, // ensuring that we aren't over our max size content_length += chunk_length; - if (content_length >= PAC_MAX_SIZE) break; } + if (content_length >= PAC_MAX_SIZE) break; + while (recvd != content_length) { int r = recv(sock, buffer + recvd, content_length - recvd, 0); - if (r < 0) break; + if (r <= 0) { + chunked = false; + break; + } recvd += r; } - buffer[content_length] = '\0'; } while (chunked); if (string(buffer).size() != content_length) {