summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-02 10:19:32 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-02 10:19:32 +0100
commit7a61984a2bf42f2632a8c62245a8496a3e2009cd (patch)
tree760467261b9cbe848c8d4d72b7ec07ff8dd24e54
parent5aaffc8095eeb69407855b33d1939dd5ebd619ca (diff)
downloadphp-git-7a61984a2bf42f2632a8c62245a8496a3e2009cd.tar.gz
Fixed bug #80462
-rw-r--r--NEWS4
-rw-r--r--Zend/zend_language_scanner.l2
-rw-r--r--ext/tokenizer/tests/bug80462.phpt22
3 files changed, 27 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 979924f72e..b1a0c50776 100644
--- a/NEWS
+++ b/NEWS
@@ -47,6 +47,10 @@ PHP NEWS
- Tidy:
. Fixed bug #77594 (ob_tidyhandler is never reset). (cmb)
+- Tokenizer:
+ . Fixed bug #80462 (Nullsafe operator tokenize with TOKEN_PARSE flag fails).
+ (Nikita)
+
- XML:
. XmlParser opaque object renamed to XMLParser for consistency with other XML objects. (girgias)
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index d1c5b85cf2..b9e6127059 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1564,7 +1564,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
<ST_IN_SCRIPTING>"?->" {
yy_push_state(ST_LOOKING_FOR_PROPERTY);
- return T_NULLSAFE_OBJECT_OPERATOR;
+ RETURN_TOKEN(T_NULLSAFE_OBJECT_OPERATOR);
}
<ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY>{WHITESPACE}+ {
diff --git a/ext/tokenizer/tests/bug80462.phpt b/ext/tokenizer/tests/bug80462.phpt
new file mode 100644
index 0000000000..068cea0833
--- /dev/null
+++ b/ext/tokenizer/tests/bug80462.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #80462: Nullsafe operator tokenize with TOKEN_PARSE flag fails
+--FILE--
+<?php
+
+foreach (PhpToken::tokenize('<?php $foo = $a?->b();', TOKEN_PARSE) as $token) {
+ echo $token->getTokenName(), "\n";
+}
+
+?>
+--EXPECT--
+T_OPEN_TAG
+T_VARIABLE
+T_WHITESPACE
+=
+T_WHITESPACE
+T_VARIABLE
+T_NULLSAFE_OBJECT_OPERATOR
+T_STRING
+(
+)
+;