diff options
author | Jeff King <peff@peff.net> | 2011-07-18 03:48:51 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-07-20 11:38:34 -0700 |
commit | 66c8448543432308e8fce5e3e04076e875410f67 (patch) | |
tree | ac99babf4737c855c36576a69254a17f5b5f6b2b /http.c | |
parent | d79bcd68056250d7c03bf9b12728ee2fd85a0ab3 (diff) | |
download | git-66c8448543432308e8fce5e3e04076e875410f67.tar.gz |
url: decode buffers that are not NUL-terminated
The url_decode function needs only minor tweaks to handle
arbitrary buffers. Let's do those tweaks, which cleans up an
unreadable mess of temporary strings in http.c.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http.c')
-rw-r--r-- | http.c | 27 |
1 files changed, 4 insertions, 23 deletions
@@ -307,8 +307,7 @@ static CURL *get_curl_handle(void) static void http_auth_init(const char *url) { - char *at, *colon, *cp, *slash, *decoded; - int len; + char *at, *colon, *cp, *slash; cp = strstr(url, "://"); if (!cp) @@ -328,29 +327,11 @@ static void http_auth_init(const char *url) return; /* No credentials */ if (!colon || at <= colon) { /* Only username */ - len = at - cp; - user_name = xmalloc(len + 1); - memcpy(user_name, cp, len); - user_name[len] = '\0'; - decoded = url_decode(user_name); - free(user_name); - user_name = decoded; + user_name = url_decode_mem(cp, at - cp); user_pass = NULL; } else { - len = colon - cp; - user_name = xmalloc(len + 1); - memcpy(user_name, cp, len); - user_name[len] = '\0'; - decoded = url_decode(user_name); - free(user_name); - user_name = decoded; - len = at - (colon + 1); - user_pass = xmalloc(len + 1); - memcpy(user_pass, colon + 1, len); - user_pass[len] = '\0'; - decoded = url_decode(user_pass); - free(user_pass); - user_pass = decoded; + user_name = url_decode_mem(cp, colon - cp); + user_pass = url_decode_mem(colon + 1, at - (colon + 1)); } } |