summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/html.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/ext/standard/html.c b/ext/standard/html.c
index 0b5d7c2235..e1ac9188bc 100644
--- a/ext/standard/html.c
+++ b/ext/standard/html.c
@@ -940,9 +940,11 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
return 0;
}
- replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, replacement_len, &retlen);
- efree(ret);
- ret = replaced;
+ if (php_memnstr(ret, entity, entity_length, ret+retlen)) {
+ replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, replacement_len, &retlen);
+ efree(ret);
+ ret = replaced;
+ }
}
}
}
@@ -954,10 +956,12 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new
replacement[0] = (unsigned char)basic_entities[j].charcode;
replacement[1] = '\0';
-
- replaced = php_str_to_str(ret, retlen, basic_entities[j].entity, basic_entities[j].entitylen, replacement, 1, &retlen);
- efree(ret);
- ret = replaced;
+
+ if (php_memnstr(ret, basic_entities[j].entity, basic_entities[j].entitylen, ret+retlen)) {
+ replaced = php_str_to_str(ret, retlen, basic_entities[j].entity, basic_entities[j].entitylen, replacement, 1, &retlen);
+ efree(ret);
+ ret = replaced;
+ }
}
/* replace numeric entities & "&" */