Skip to content

Commit 9ba6ec3

Browse files
Reflection: Add regression tests for error messages with null bytes
So that when the outputs are fixed the changes can be confirmed in tests
1 parent 2804d09 commit 9ba6ec3

25 files changed

Lines changed: 381 additions & 0 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClassConstant::__construct() error messages (class name)
3+
--FILE--
4+
<?php
5+
6+
new ReflectionClassConstant("foo\0bar", "");
7+
8+
?>
9+
--EXPECTF--
10+
Fatal error: Uncaught ReflectionException: Class "foo" does not exist in %s:%d
11+
Stack trace:
12+
#0 %s(%d): ReflectionClassConstant->__construct('foo\x00bar', '')
13+
#1 {main}
14+
thrown in %s on line %d
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClassConstant::__construct() error messages (constant name)
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
new ReflectionClassConstant(Demo::class, "foo\0bar");
8+
9+
?>
10+
--EXPECTF--
11+
Fatal error: Uncaught ReflectionException: Constant Demo::foo does not exist in %s:%d
12+
Stack trace:
13+
#0 %s(%d): ReflectionClassConstant->__construct('Demo', 'foo\x00bar')
14+
#1 {main}
15+
thrown in %s on line %d
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::__construct() error messages
3+
--FILE--
4+
<?php
5+
6+
new ReflectionClass("foo\0bar");
7+
8+
?>
9+
--EXPECTF--
10+
Fatal error: Uncaught ReflectionException: Class "foo" does not exist in %s:%d
11+
Stack trace:
12+
#0 %s(%d): ReflectionClass->__construct('foo\x00bar')
13+
#1 {main}
14+
thrown in %s on line %d
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::getMethod() error messages
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
$r = new ReflectionClass(Demo::class);
8+
$r->getMethod("foo\0bar");
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Uncaught ReflectionException: Method Demo::foo() does not exist in %s:%d
13+
Stack trace:
14+
#0 %s(%d): ReflectionClass->getMethod('foo\x00bar')
15+
#1 {main}
16+
thrown in %s on line %d
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::getProperty() error messages
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
$r = new ReflectionClass(Demo::class);
8+
$r->getProperty("foo\0bar");
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Uncaught ReflectionException: Property Demo::$foo does not exist in %s:%d
13+
Stack trace:
14+
#0 %s(%d): ReflectionClass->getProperty('foo\x00bar')
15+
#1 {main}
16+
thrown in %s on line %d
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::getProperty() (fully qualified, base class) error messages
3+
--FILE--
4+
<?php
5+
6+
class Base {}
7+
class Demo extends Base {}
8+
$r = new ReflectionClass(Demo::class);
9+
$r->getProperty("Base::foo\0bar");
10+
11+
?>
12+
--EXPECTF--
13+
Fatal error: Uncaught ReflectionException: Property Base::$foo does not exist in %s:%d
14+
Stack trace:
15+
#0 %s(%d): ReflectionClass->getProperty('Base::foo\x00bar')
16+
#1 {main}
17+
thrown in %s on line %d
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::getProperty() (fully qualified, non-base class) error messages
3+
--FILE--
4+
<?php
5+
6+
class Base {}
7+
class Demo {}
8+
$r = new ReflectionClass(Demo::class);
9+
$r->getProperty("Base::foo\0bar");
10+
11+
?>
12+
--EXPECTF--
13+
Fatal error: Uncaught ReflectionException: Fully qualified property name Base::$foo does not specify a base class of Demo in %s:%d
14+
Stack trace:
15+
#0 %s(%d): ReflectionClass->getProperty('Base::foo\x00bar')
16+
#1 {main}
17+
thrown in %s on line %d
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::getStaticPropertyValue() error messages
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
$r = new ReflectionClass(Demo::class);
8+
$r->getStaticPropertyValue("foo\0bar");
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Uncaught ReflectionException: Property Demo::$foo does not exist in %s:%d
13+
Stack trace:
14+
#0 %s(%d): ReflectionClass->getStaticPropertyValue('foo\x00bar')
15+
#1 {main}
16+
thrown in %s on line %d
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::implementsInterface() error messages
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
$r = new ReflectionClass(Demo::class);
8+
$r->implementsInterface("foo\0bar");
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Uncaught ReflectionException: Interface "foo" does not exist in %s:%d
13+
Stack trace:
14+
#0 %s(%d): ReflectionClass->implementsInterface('foo\x00bar')
15+
#1 {main}
16+
thrown in %s on line %d
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
GH-22905: null bytes in ReflectionClass::isSubclassOf() error messages
3+
--FILE--
4+
<?php
5+
6+
class Demo {}
7+
$r = new ReflectionClass(Demo::class);
8+
$r->isSubclassOf("foo\0bar");
9+
10+
?>
11+
--EXPECTF--
12+
Fatal error: Uncaught ReflectionException: Class "foo" does not exist in %s:%d
13+
Stack trace:
14+
#0 %s(%d): ReflectionClass->isSubclassOf('foo\x00bar')
15+
#1 {main}
16+
thrown in %s on line %d

0 commit comments

Comments
 (0)