bug #10605 [ExpressionLanguage] Strict in_array check in Parser.php (parnas)

This PR was submitted for the master branch but it was merged into the 2.4 branch instead (closes #10605).

Discussion
----------

[ExpressionLanguage] Strict in_array check in Parser.php

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |
| License       | MIT
| Doc PR        |

Otherwise it doesn't throw an exception for the cases when passed parameters array includes zero key (and that will result in the PHP Notice down the road).

Commits
-------

154c4a5 [ExpressionLanguage] Test for the non-strict in_array check in parsePrimaryExpression in Parser.php
e465135 Strict in_array check in Parser.php
This commit is contained in:
Fabien Potencier 2014-04-28 11:05:24 +02:00
commit e210082b2c
2 changed files with 12 additions and 1 deletions

View File

@ -190,7 +190,7 @@ class Parser
$node = new Node\FunctionNode($token->value, $this->parseArguments());
} else {
if (!in_array($token->value, $this->names)) {
if (!in_array($token->value, $this->names, true)) {
throw new SyntaxError(sprintf('Variable "%s" is not valid', $token->value), $token->cursor);
}

View File

@ -28,6 +28,17 @@ class ParserTest extends \PHPUnit_Framework_TestCase
$parser->parse($lexer->tokenize('foo'));
}
/**
* @expectedException \Symfony\Component\ExpressionLanguage\SyntaxError
* @expectedExceptionMessage Variable "foo" is not valid around position 1.
*/
public function testParseWithZeroInNames()
{
$lexer = new Lexer();
$parser = new Parser(array());
$parser->parse($lexer->tokenize('foo'), array(0));
}
/**
* @dataProvider getParseData
*/