From e769e1b49eb4d0c3e531cdc6d9364b7e11220640 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Sat, 3 Mar 2007 15:46:29 +0000 Subject: [PATCH] Fixed bug #40704 (strip_tags() does not handle single quotes correctly) --- ext/standard/string.c | 10 +++++----- ext/standard/tests/strings/bug40704.phpt | 13 +++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 ext/standard/tests/strings/bug40704.phpt diff --git a/ext/standard/string.c b/ext/standard/string.c index 854c3ec1743..ffd47155206 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -4211,7 +4211,7 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, switch (state) { case 1: /* HTML/XML */ lc = '>'; - state = 0; + in_q = state = 0; if (allow) { tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp); *(tp++) = '>'; @@ -4226,19 +4226,19 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, case 2: /* PHP */ if (!br && lc != '\"' && *(p-1) == '?') { - state = 0; + in_q = state = 0; tp = tbuf; } break; case 3: - state = 0; + in_q = state = 0; tp = tbuf; break; case 4: /* JavaScript/CSS/etc... */ if (p >= buf + 2 && *(p-1) == '-' && *(p-2) == '-') { - state = 0; + in_q = state = 0; tp = tbuf; } break; @@ -4263,7 +4263,7 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp); *(tp++) = c; } - if (p != buf && *(p-1) != '\\' && (!in_q || *p == in_q)) { + if (state && p != buf && *(p-1) != '\\' && (!in_q || *p == in_q)) { if (in_q) { in_q = 0; } else { diff --git a/ext/standard/tests/strings/bug40704.phpt b/ext/standard/tests/strings/bug40704.phpt new file mode 100644 index 00000000000..82e91b5c872 --- /dev/null +++ b/ext/standard/tests/strings/bug40704.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #40704 (strip_tags() does not handle single quotes correctly) +--FILE-- +Bug ' Trigger Missing Text"; +var_dump(strip_tags($html)); + +echo "Done\n"; +?> +--EXPECT-- +string(26) "Bug ' Trigger Missing Text" +Done