From 0067c3ced17ff69516854865e607887a9702cd0c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 5 Jan 2021 12:24:23 +0100 Subject: [PATCH] Fix lexing of zero octal followed by whitespace We'd call strtol starting at the whitespace, and strtol strips whitespace... Fixes oss-fuzz #29272. --- Zend/tests/oct_whitespace.phpt | 8 ++++++++ Zend/zend_language_scanner.l | 5 +++++ 2 files changed, 13 insertions(+) create mode 100644 Zend/tests/oct_whitespace.phpt diff --git a/Zend/tests/oct_whitespace.phpt b/Zend/tests/oct_whitespace.phpt new file mode 100644 index 00000000000..cb0bf4ad7a3 --- /dev/null +++ b/Zend/tests/oct_whitespace.phpt @@ -0,0 +1,8 @@ +--TEST-- +Octal literal followed by whitespace and another number +--FILE-- + +--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 d82f67d0c7a..96f36736d35 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);