com php-src: Implement #72918: negative offset inside a quoted string leads to parse error: Zend/tests/bug72918.phpt Zend/zend_language _parser.y
Zend/zend_language_scanner.l
| From: | Christoph Michael Becker | Date: | Fri, 14 Oct 2016 11:59:46 +0000 |
| Subject: | com php-src: Implement #72918: negative offset inside a quoted string leads to parse error: Zend/tests/bug72918.phpt Zend/zend_language _parser.y Zend/zend_language_scanner.l |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-95092@lists.php.net to get a copy of this message | ||
Commit: fe4b8e373c99ee9ca57b0c369508f2b8b9f6bcc5
Author: Christoph M. Becker <cmbecker69@gmx.de> Tue, 27 Sep 2016 20:26:16 +0200
Parents: 2083007813e20c4be1d9e4e30e5fd47018f24142
Branches: pull-request/2144
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=fe4b8e373c99ee9ca57b0c369508f2b8b9f6bcc5
Log:
Implement #72918: negative offset inside a quoted string leads to parse error
We allow negative numeric offsets for the simple syntax inside
double-quoted and heredoc strings.
Bugs:
https://bugs.php.net/72918
Changed paths:
A Zend/tests/bug72918.phpt
M Zend/zend_language_parser.y
M Zend/zend_language_scanner.l
Diff:
diff --git a/Zend/tests/bug72918.phpt b/Zend/tests/bug72918.phpt
new file mode 100644
index 0000000..f3dc1d2
--- /dev/null
+++ b/Zend/tests/bug72918.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #72918 (negative offset inside a quoted string leads to parse error)
+--FILE--
+<?php
+$array = [-3 => 'foo'];
+$string = 'abcde';
+
+echo "$array[-3]\n";
+echo "$string[-3]\n";
+echo <<<EOT
+$array[-3]
+$string[-3]
+
+EOT;
+?>
+===DONE===
+--EXPECT--
+foo
+c
+foo
+c
+===DONE===
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 957d657..3c71179 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -1249,6 +1249,7 @@ encaps_var:
encaps_var_offset:
T_STRING { $$ = $1; }
| T_NUM_STRING { $$ = $1; }
+ | '-' T_NUM_STRING { $$ = zend_ast_create(ZEND_AST_UNARY_MINUS, $2); }
| T_VARIABLE { $$ = zend_ast_create(ZEND_AST_VAR, $1); }
;
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index fbe9ef7..e2d2a51 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1875,7 +1875,7 @@ inline_char_handler:
}
<ST_VAR_OFFSET>{TOKENS}|[{}"`] {
- /* Only '[' can be valid, but returning other tokens will allow a more explicit parse
error */
+ /* Only '[' or '-' can be valid, but returning other tokens will allow a more
explicit parse error */
RETURN_TOKEN(yytext[0]);
}