summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-06-29 23:32:53 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-06-29 23:32:53 +0000
commita5dc6b9e6637c85d18510ac6446ee4a8a7955e7b (patch)
treebe1bd0060a655cf61ec42b6a2ee932201f83464e
parent8577895dc1257d2e488390378f6cff9e9b9ced01 (diff)
downloadnetsurf-a5dc6b9e6637c85d18510ac6446ee4a8a7955e7b.tar.gz
netsurf-a5dc6b9e6637c85d18510ac6446ee4a8a7955e7b.tar.bz2
Less broken WWW-Authenticate header parser
svn path=/trunk/netsurf/; revision=12542
-rw-r--r--content/fetchers/curl.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c
index 869c25f0c..6fedda539 100644
--- a/content/fetchers/curl.c
+++ b/content/fetchers/curl.c
@@ -1083,18 +1083,18 @@ size_t fetch_curl_header(char *data, size_t size, size_t nmemb,
i++;
if (i < (int) size) {
- free(f->realm);
- f->realm = malloc(size - i + 1);
- if (f->realm != NULL) {
- strncpy(f->realm, data + i, size - i);
- f->realm[size - i] = '\0';
- for (i = size - i - 1; i >= 0 &&
- (f->realm[i] == ' ' ||
- f->realm[i] == '"' ||
- f->realm[i] == '\t' ||
- f->realm[i] == '\r' ||
- f->realm[i] == '\n'); --i)
- f->realm[i] = '\0';
+ size_t end = i;
+
+ while (end < size && data[end] != '"')
+ ++end;
+
+ if (end < size) {
+ free(f->realm);
+ f->realm = malloc(end - i + 1);
+ if (f->realm != NULL) {
+ strncpy(f->realm, data + i, end - i);
+ f->realm[end - i] = '\0';
+ }
}
}
} else if (11 < size && strncasecmp(data, "Set-Cookie:", 11) == 0) {