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));  	}  }  | 
