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>
This commit is contained in:
Mark Lodato 2010-08-27 21:02:27 -04:00 committed by Lars Hjemli
parent c94414a4c8
commit 48434780ca

9
html.c
View File

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