summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
+(
+)
+;