From 428baf5f91fa623a51c236a899f308408b3d85fd Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Fri, 14 May 2021 13:47:07 +0200 Subject: [PATCH] String starting with \ is valid class name --- src/Reflection/ClassNameHelper.php | 2 +- .../Rules/Classes/InstantiationRuleTest.php | 5 +++++ tests/PHPStan/Rules/Classes/data/bug-5002.php | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/PHPStan/Rules/Classes/data/bug-5002.php diff --git a/src/Reflection/ClassNameHelper.php b/src/Reflection/ClassNameHelper.php index d18c1a6357..803129f14a 100644 --- a/src/Reflection/ClassNameHelper.php +++ b/src/Reflection/ClassNameHelper.php @@ -10,7 +10,7 @@ class ClassNameHelper public static function isValidClassName(string $name): bool { // from https://stackoverflow.com/questions/3195614/validate-class-method-names-with-regex#comment104531582_12011255 - return Strings::match($name, '/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/') !== null; + return Strings::match(ltrim($name, '\\'), '/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/') !== null; } } diff --git a/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php b/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php index 47e51ea7ed..7faa259d64 100644 --- a/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php +++ b/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php @@ -342,4 +342,9 @@ public function testBug3425(): void ]); } + public function testBug5002(): void + { + $this->analyse([__DIR__ . '/data/bug-5002.php'], []); + } + } diff --git a/tests/PHPStan/Rules/Classes/data/bug-5002.php b/tests/PHPStan/Rules/Classes/data/bug-5002.php new file mode 100644 index 0000000000..729720272c --- /dev/null +++ b/tests/PHPStan/Rules/Classes/data/bug-5002.php @@ -0,0 +1,18 @@ +