From 3b06b39d5403496cd920aa2fba4c39edebb4652c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Fri, 21 Nov 2008 19:14:47 +0000 Subject: [PATCH] - Fixed bug #46578 (strip_tags() does not honor end-of-comment when it encounters a single quote) --- ext/standard/string.c | 10 ++++++++-- ext/standard/tests/strings/bug46578.phpt | 25 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 ext/standard/tests/strings/bug46578.phpt diff --git a/ext/standard/string.c b/ext/standard/string.c index 30eb52e601..693cff0cc6 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -6538,7 +6538,10 @@ PHPAPI int php_u_strip_tags(UChar *rbuf, int len, int *stateptr, UChar *allow, i case 0x22: /* '"' */ case 0x27: /* '\'' */ - if (state == 2 && prev1 != 0x5C) { /* '\\' */ + if (state == 4){ + /* Inside */ + break; + } else if (state == 2 && prev1 != 0x5C) { /* '\\' */ if (last == ch) { last = 0x00; } else if (last != 0x5C) { @@ -6779,7 +6782,10 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, case '"': case '\'': - if (state == 2 && *(p-1) != '\\') { + if (state == 4) { + /* Inside */ + break; + } else if (state == 2 && *(p-1) != '\\') { if (lc == c) { lc = '\0'; } else if (lc != '\\') { diff --git a/ext/standard/tests/strings/bug46578.phpt b/ext/standard/tests/strings/bug46578.phpt new file mode 100644 index 0000000000..ba9fbbe460 --- /dev/null +++ b/ext/standard/tests/strings/bug46578.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #46578 (strip_tags() does not honor end-of-comment when it encounters a single quote) +--FILE-- +foobar')); + +var_dump(strip_tags('foobar')); + +var_dump(strip_tags('foo */ ?>bar')); + +var_dump(strip_tags('< ax')); + +var_dump(strip_tags('')); + +var_dump(strip_tags(' +--EXPECTF-- +%string|unicode%(6) "foobar" +%string|unicode%(6) "foobar" +%string|unicode%(6) "foobar" +%string|unicode%(4) "< ax" +%string|unicode%(0) "" +%string|unicode%(0) "" -- 2.40.0