Skip to content

Commit b05a3ae

Browse files
committed
PhpNamespace::addUse() added validation
1 parent 42884e1 commit b05a3ae

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/PhpGenerator/PhpNamespace.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ public function getBracketedSyntax(): bool
8787
*/
8888
public function addUse(string $name, string $alias = null, string &$aliasOut = null): self
8989
{
90+
if (
91+
!Helpers::isNamespaceIdentifier($name, true)
92+
|| (Helpers::isIdentifier($name) && isset(Helpers::KEYWORDS[strtolower($name)]))
93+
) {
94+
throw new Nette\InvalidArgumentException("Value '$name' is not valid class name.");
95+
} elseif ($alias && (!Helpers::isIdentifier($alias) || isset(Helpers::KEYWORDS[strtolower($alias)]))) {
96+
throw new Nette\InvalidArgumentException("Value '$alias' is not valid alias.");
97+
}
98+
9099
$name = ltrim($name, '\\');
91100
if ($alias === null && $this->name === Helpers::extractNamespace($name)) {
92101
$alias = Helpers::extractShortName($name);

tests/PhpGenerator/invalidNames.phpt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,22 @@ Assert::exception(function () {
3636
new Nette\PhpGenerator\PhpNamespace('\abc');
3737
}, Nette\InvalidArgumentException::class);
3838

39+
Assert::exception(function () {
40+
(new Nette\PhpGenerator\PhpNamespace('Abc'))->addUse('');
41+
}, Nette\InvalidArgumentException::class);
42+
43+
Assert::exception(function () {
44+
(new Nette\PhpGenerator\PhpNamespace('Abc'))->addUse('Foo', 'a b');
45+
}, Nette\InvalidArgumentException::class);
46+
47+
Assert::exception(function () {
48+
(new Nette\PhpGenerator\PhpNamespace('Abc'))->addUse('true');
49+
}, Nette\InvalidArgumentException::class);
50+
51+
Assert::exception(function () {
52+
(new Nette\PhpGenerator\PhpNamespace('Abc'))->addUse('aaa', 'true');
53+
}, Nette\InvalidArgumentException::class);
54+
3955

4056
Assert::noError(function () {
4157
new Nette\PhpGenerator\ClassType(null); // anonymous class

0 commit comments

Comments
 (0)