diff options
| author | Mark Lodato <lodatom@gmail.com> | 2010-08-27 21:02:27 -0400 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2010-08-29 17:27:40 +0200 | 
| commit | 48434780ca62fde84337ea1e797f642de5ca50d5 (patch) | |
| tree | ad6a67137124a5ae70de10dd29e84bd6bf21c6ea | |
| parent | t0108-patch: add 'tests_done' to end (diff) | |
| download | cgit-48434780ca62fde84337ea1e797f642de5ca50d5.tar.gz cgit-48434780ca62fde84337ea1e797f642de5ca50d5.tar.bz2 cgit-48434780ca62fde84337ea1e797f642de5ca50d5.zip | |
html: fix strcpy bug in convert_query_hexchar
The source and destination strings in strcpy() may not overlap.
Instead, use memmove(), which allows overlap.  This fixes test t0104,
where 'url=foo%2bbar/tree' was being parsed improperly.
Signed-off-by: Mark Lodato <lodatom@gmail.com>
Diffstat (limited to '')
| -rw-r--r-- | html.c | 9 | 
1 files changed, 5 insertions, 4 deletions
| @@ -240,19 +240,20 @@ int hextoint(char c)  char *convert_query_hexchar(char *txt)  { -	int d1, d2; -	if (strlen(txt) < 3) { +	int d1, d2, n; +	n = strlen(txt); +	if (n < 3) {  		*txt = '\0';  		return txt-1;  	}  	d1 = hextoint(*(txt+1));  	d2 = hextoint(*(txt+2));  	if (d1<0 || d2<0) { -		strcpy(txt, txt+3); +		memmove(txt, txt+3, n-3);  		return txt-1;  	} else {  		*txt = d1 * 16 + d2; -		strcpy(txt+1, txt+3); +		memmove(txt+1, txt+3, n-2);  		return txt;  	}  } | 
