summaryrefslogtreecommitdiff
path: root/ext/tokenizer/tokenizer.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2018-06-18 11:33:48 +0800
committerXinchen Hui <laruence@gmail.com>2018-06-18 11:33:48 +0800
commit4d69bbeee79c6a94348935ad071b6c7c05dd8eae (patch)
tree24ee53ae11960e297dafea4666dfaf30fd30f350 /ext/tokenizer/tokenizer.c
parent24f70961546503fcd22101c476a76cb745583787 (diff)
downloadphp-git-4d69bbeee79c6a94348935ad071b6c7c05dd8eae.tar.gz
Fixed bug #76437 (token_get_all with TOKEN_PARSE flag fails to recognise close tag)
Diffstat (limited to 'ext/tokenizer/tokenizer.c')
-rw-r--r--ext/tokenizer/tokenizer.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index ef9d1362b7..cb68fd4087 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -191,8 +191,16 @@ void on_event(zend_php_scanner_event event, int token, int line, void *context)
switch (event) {
case ON_TOKEN:
- if (token == END) break;
- add_token(token_stream, token, LANG_SCNG(yy_text), LANG_SCNG(yy_leng), line);
+ {
+ if (token == END) break;
+ /* Specical cases */
+ if (token == ';' && LANG_SCNG(yy_leng) == sizeof("?>") - 1) {
+ token = T_CLOSE_TAG;
+ } else if (token == T_ECHO && LANG_SCNG(yy_leng) == sizeof("<?=") - 1) {
+ token = T_OPEN_TAG_WITH_ECHO;
+ }
+ add_token(token_stream, token, LANG_SCNG(yy_text), LANG_SCNG(yy_leng), line);
+ }
break;
case ON_FEEDBACK:
tokens_ht = Z_ARRVAL_P(token_stream);