summaryrefslogtreecommitdiff
path: root/libproxy/url.cpp
diff options
context:
space:
mode:
authornpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-02-22 10:47:47 +0000
committernpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-02-22 10:47:47 +0000
commitba2fa09088ea4410730479a1aa3cf5182e27c8a2 (patch)
tree8f9d2e8cbfe034bb328cac18225c521b680798d5 /libproxy/url.cpp
parent9137a17a21ae3110db26db788deffc260e57f4a9 (diff)
downloadlibproxy-ba2fa09088ea4410730479a1aa3cf5182e27c8a2.tar.gz
fixed a url crasher
git-svn-id: http://libproxy.googlecode.com/svn/trunk@560 c587cffe-e639-0410-9787-d7902ae8ed56
Diffstat (limited to 'libproxy/url.cpp')
-rw-r--r--libproxy/url.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/libproxy/url.cpp b/libproxy/url.cpp
index 02cf521..e56eabe 100644
--- a/libproxy/url.cpp
+++ b/libproxy/url.cpp
@@ -127,6 +127,8 @@ url::url(const string url) throw(parse_error, logic_error) {
// Parse host further. Basically, we're looking for a port.
if (*host) {
this->port = _get_default_port(this->scheme);
+ if (this->scheme.find('+') != this->scheme.npos)
+ this->port = _get_default_port(this->scheme.substr(this->scheme.find('+')+1));
int hostlen = strlen(host);
for (int i=hostlen-1 ; i >= 0 ; i--) {
@@ -245,13 +247,12 @@ sockaddr const* const* url::get_ips(bool usedns) {
i++;
// Return NULL if no IPs found
- if (i == 0) {
- this->ips = NULL;
- return NULL;
- }
+ if (i == 0)
+ return this->ips = NULL;
// Create our array since we actually have a result
- this->ips = new sockaddr*[i];
+ this->ips = new sockaddr*[++i];
+ memset(this->ips, NULL, sizeof(sockaddr*)*i);
// Copy the sockaddr's into this->ips
for (i = 0, info = first ; info ; info = info->ai_next) {
@@ -260,7 +261,6 @@ sockaddr const* const* url::get_ips(bool usedns) {
if (!this->ips[i]) break;
((sockaddr_in **) this->ips)[i++]->sin_port = htons(this->port);
}
- this->ips[i] = NULL;
}
freeaddrinfo(first);
@@ -306,7 +306,7 @@ static inline string _readline(int fd) {
char* url::get_pac() {
int sock = -1;
- bool correct_mime_type, chunked;
+ bool correct_mime_type = false, chunked = false;
unsigned long int content_length = 0, status = 0;
char* buffer = NULL;
string request;