fixed a potential error by 'strcpy', which depends on libc implementation.

This commit is contained in:
Ryu Sawada 2007-05-22 08:42:20 +00:00
parent 7947f08b0e
commit 2ea15334a1

7
mxml.c
View File

@ -284,23 +284,27 @@ void mxml_decode(char *str)
while ((p = strchr(p, '&')) != NULL) { while ((p = strchr(p, '&')) != NULL) {
if (strncmp(p, "<", 4) == 0) { if (strncmp(p, "<", 4) == 0) {
*(p++) = '<'; *(p++) = '<';
strcpy(p, p+3); memmove(p, p+3, strlen(p+3) + 1);
} }
else if (strncmp(p, "&gt;", 4) == 0) { else if (strncmp(p, "&gt;", 4) == 0) {
*(p++) = '>'; *(p++) = '>';
strcpy(p, p+3); strcpy(p, p+3);
memmove(p, p+3, strlen(p+3) + 1);
} }
else if (strncmp(p, "&amp;", 5) == 0) { else if (strncmp(p, "&amp;", 5) == 0) {
*(p++) = '&'; *(p++) = '&';
strcpy(p, p+4); strcpy(p, p+4);
memmove(p, p+4, strlen(p+4) + 1);
} }
else if (strncmp(p, "&quot;", 6) == 0) { else if (strncmp(p, "&quot;", 6) == 0) {
*(p++) = '\"'; *(p++) = '\"';
strcpy(p, p+5); strcpy(p, p+5);
memmove(p, p+5, strlen(p+5) + 1);
} }
else if (strncmp(p, "&apos;", 6) == 0) { else if (strncmp(p, "&apos;", 6) == 0) {
*(p++) = '\''; *(p++) = '\'';
strcpy(p, p+5); strcpy(p, p+5);
memmove(p, p+5, strlen(p+5) + 1);
} }
else { else {
p++; // skip unknown entity p++; // skip unknown entity
@ -308,6 +312,7 @@ void mxml_decode(char *str)
} }
/* if (str[0] == '\"' && str[strlen(str)-1] == '\"') { /* if (str[0] == '\"' && str[strlen(str)-1] == '\"') {
strcpy(str, str+1); strcpy(str, str+1);
memmove(str, str+1, strlen(str+1) + 1);
str[strlen(str)-1] = 0; str[strlen(str)-1] = 0;
}*/ }*/
} }