summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-01-05 12:24:23 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-01-05 12:25:19 +0100
commit0067c3ced17ff69516854865e607887a9702cd0c (patch)
treef8892bab7f950c07c898abf8038fb5a6761cf2d7
parented4f18b4635d7a873705eeaa128a33eb0c8deaa5 (diff)
downloadphp-git-0067c3ced17ff69516854865e607887a9702cd0c.tar.gz
Fix lexing of zero octal followed by whitespace
We'd call strtol starting at the whitespace, and strtol strips whitespace... Fixes oss-fuzz #29272.
-rw-r--r--Zend/tests/oct_whitespace.phpt8
-rw-r--r--Zend/zend_language_scanner.l5
2 files changed, 13 insertions, 0 deletions
diff --git a/Zend/tests/oct_whitespace.phpt b/Zend/tests/oct_whitespace.phpt
new file mode 100644
index 0000000000..cb0bf4ad7a
--- /dev/null
+++ b/Zend/tests/oct_whitespace.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Octal literal followed by whitespace and another number
+--FILE--
+<?php
+var_dump(0o0 2);
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected integer "2", expecting ")" in %s on line %d
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index d82f67d0c7..96f36736d3 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1963,6 +1963,11 @@ NEWLINE ("\r"|"\n"|"\r\n")
--len;
}
+ if (len == 0) {
+ ZVAL_LONG(zendlval, 0);
+ RETURN_TOKEN_WITH_VAL(T_LNUMBER);
+ }
+
if (contains_underscores) {
octal = estrndup(octal, len);
strip_underscores(octal, &len);