From: Gustavo André dos Santos Lopes Date: Fri, 8 Oct 2010 16:19:58 +0000 (+0000) Subject: - Fixed bug #53021 (In html_entity_decode, failure to convert numeric entities with... X-Git-Tag: php-5.4.0alpha1~191^2~805 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=df42830468062375c73edb7cc16e7919f555837e;p=php - Fixed bug #53021 (In html_entity_decode, failure to convert numeric entities with ENT_NOQUOTES and ISO-8859-1). --- diff --git a/ext/standard/html.c b/ext/standard/html.c index f937e1dd3b..900cb3910f 100644 --- a/ext/standard/html.c +++ b/ext/standard/html.c @@ -1020,7 +1020,12 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new code = strtol(p + 2, &next, 10); } - if (next != NULL && *next == ';') { + if (code == 39 && !(quote_style & ENT_HTML_QUOTE_SINGLE) || + code == 24 && !(quote_style & ENT_HTML_QUOTE_DOUBLE)) { + invalid_code = 1; + } + + if (next != NULL && *next == ';' && !invalid_code) { switch (charset) { case cs_utf_8: q += php_utf32_utf8(q, code); @@ -1032,11 +1037,7 @@ PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *new if ((code >= 0x80 && code < 0xa0) || code > 0xff) { invalid_code = 1; } else { - if (code == 39 || !quote_style) { - invalid_code = 1; - } else { - *(q++) = code; - } + *(q++) = code; } break; diff --git a/ext/standard/tests/strings/bug53021.phpt b/ext/standard/tests/strings/bug53021.phpt new file mode 100644 index 0000000000..6f290096e4 --- /dev/null +++ b/ext/standard/tests/strings/bug53021.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #53021 (Failure to convert numeric entities with ENT_NOQUOTES and ISO-8859-1) +--FILE-- + + string(2) "e9" +}