Skip to content

Commit 15ec120

Browse files
committed
Adding several additional test cases
1 parent 4f0f044 commit 15ec120

File tree

1 file changed

+83
-4
lines changed

1 file changed

+83
-4
lines changed

Tests/test-cases.php

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,18 +176,69 @@ function &test(stdClass $foo = invalid)
176176
"1\1111"
177177
"1\x111"
178178
"$foo"
179-
"$foo[bar]"
179+
"$foo[bar]" // 'bar' is treated as a string automatically by PHP
180+
"{$foo[bar]}" // 'bar' is treated as a *constant*
180181
"$foo[0]"
181182
"$foo[$bar]"
182183
"$foo->bar"
183-
"$foo->$foo"
184+
"$foo->bar(" // Should show as access to property ->bar, not as a call to ->bar()
185+
"$foo->$bar" // Should not show as an object property access, but as two separate variables
184186
"{$foo->$bar}"
187+
"{$foo->{$bar}}"
188+
"{$foo->${bar}}"
189+
"{$foo->{$bar . $baz}}"
185190
"{$foo->bar}"
186191
"{$foo->bar[0]->baz}"
187192
"{$foo->bar(12, $foo)}"
188193
"{$foo(12, $foo)}"
189194
190195
$foo = $foo->{'foo' . 'bar'};
196+
$foo = $foo->{"foo{$bar}"};
197+
198+
$beer = 'Heineken';
199+
echo "$beer's taste is great"; // works; "'" is an invalid character for variable names
200+
echo "He drank some $beers"; // won't work; 's' is a valid character for variable names but the variable is "$beer"
201+
echo "He drank some ${beer}s"; // works
202+
echo "He drank some {$beer}s"; // works
203+
204+
// The text "($str[1" should *not* be highlighted as a syntax error.
205+
$str = array("Foo", "Bar");
206+
echo 'Name: ' . $str[($str[1]) ? 1 : 0]; // Should echo "Name: Bar"
207+
echo "Name: {$str[($str[1]) ? 1 : 0]}"; // Should echo "Name: Bar"
208+
209+
echo "{\$";
210+
echo "$foo";
211+
echo "{$foo}";
212+
echo "${foo}"; // 'foo' should be variable.other.php
213+
echo "$foo->${bar}"; // '->' should not be keyword.operator.class.php
214+
echo "This works: " . $arr['foo'][3];
215+
echo "This works too: {$obj->values[3]->name}";
216+
echo "This is the value of the var named $name: {${$name}}";
217+
echo "This is the value of the var named by the return value of getName(): {${getName()}}";
218+
echo "Blah: {${Foo::bar()}}";
219+
220+
$blah = $foo[123];
221+
$blah = $foo[$bar];
222+
$blah = $foo[bar()];
223+
$blah = $foo->bar(123);
224+
$blah = ${'foo'};
225+
226+
$blah = $foo[123];
227+
$blah = $_POST['blah'];
228+
$blah = new $_POST['blah'];
229+
$blah = new $foo;
230+
$blah = new $foo->{$bar};
231+
$blah = new $foo->{$bar . '123'};
232+
$blah = new $foo->{${bar()}};
233+
234+
$bar = array(
235+
'123' => '321',
236+
);
237+
$x = 2;
238+
239+
echo 'foo ' . $bar['1' . $x . '3'];
240+
echo 'foo ' . $bar["1{$x}3"];
241+
echo "foo {$bar["1{$x}3"]}";
191242

192243
// Heredoc
193244
$foo = <<<BLAH
@@ -268,16 +319,32 @@ function &test(stdClass $foo = invalid)
268319
// =======
269320
// = SQL =
270321
// =======
271-
'SELECT * from foo WHERE bar = \'foo \\ ' . $foo . 'sadas';
322+
'SELECT * from foo WHERE bar = \'foo \\ ' . $foo . ' AND blah';
323+
'SELECT * from foo WHERE bar = \'foo \\ ' . $foo . " AND blah";
272324
'SELECT * from foo WHERE bar = "foo" asdas' . $foo . '" asdasd';
273325

274326

275327
"SELECT * from foo WHERE bar = 'asd $foo $foo->bar {$foo->bar[12]} asda' 'unclosed string";
276-
"SELECT * from foo WHERE bar = \"dsa$foo\" \"unclosed string"
328+
"SELECT * from foo WHERE bar = \"dsa$foo\" \"unclosed string";
277329
'SELECT * from foo WHERE bar = "unclosed string';
278330

331+
'SELECT * from foo WHERE bar = ' . $foo . ' bar" AND foo = 1';
332+
'SELECT * from foo WHERE bar = ' . ' bar" AND foo = 1';
333+
279334
'SELECT * from foo WHERE bar = "foo \" ' . $foo . ' bar" AND foo = 1';
280335

336+
'SELECT * FROM `foo' . $bar . '` WHERE foo = 1' . fasdf('asdf') . ' AND other = "blah"';
337+
"SELECT * FROM `foo" . $bar . "` WHERE foo = 1";
338+
"SELECT * FROM `foo` WHERE foo = 'blah" . $x . "' AND other = 'stuff'";
339+
"SELECT * FROM `foo` WHERE foo = '{$xblah}" . "' AND other = 'stuff'";
340+
// Something
341+
342+
343+
"SELECT * FROM `foo` WHERE foo = \"blah" . $x . "\" AND other = 'stuff'";
344+
'SELECT * FROM `foo` WHERE foo = "blah' . '" AND other = "stuff"';
345+
'SELECT * FROM `foo` WHERE foo = "blah' . $x . '" AND other = "stuff"';
346+
"SELECT * FROM \``foo" . $bar . "` WHERE foo = 'blah'";
347+
281348
// Comments
282349

283350
'SELECT * FROM # foo bar \' asdassdsaas';
@@ -499,4 +566,16 @@ function foo(
499566
return true;
500567
}
501568

569+
$foo->test()
570+
/* something */
571+
->blah()
572+
// test
573+
->oneMore();
574+
575+
$blah = "INSERT INTO foo SET blah = '12"; // Unclosed single quote should not be a problem
576+
$blah = "INSERT INTO `catalogue` SET
577+
`model`='{$_POST["page_row{$count}_model"]}',
578+
`type`='{$_POST["page_row{$count}_type"]}'
579+
;");
580+
502581
?>

0 commit comments

Comments
 (0)