diff options
author | Sara Golemon <pollita@php.net> | 2014-02-20 11:55:27 -0800 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2014-02-20 12:10:00 -0800 |
commit | 14c08ea362e5f16527b3d9772ddc75ca49cc22d7 (patch) | |
tree | 230f74999ea86030cd84d31e9561bc0bd9d1a192 /Zend | |
parent | b67c8b8603f7fa3914f51deefa5a265315179d80 (diff) | |
download | php-git-14c08ea362e5f16527b3d9772ddc75ca49cc22d7.tar.gz |
Add more tests for __debugInfo() and fix leak
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/tests/debug_info-error-0.0.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-0.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-1.0.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-1.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-empty_str.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-false.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-object.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-resource.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-str.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info-error-true.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/debug_info.phpt | 17 | ||||
-rw-r--r-- | Zend/zend_object_handlers.c | 1 |
12 files changed, 206 insertions, 2 deletions
diff --git a/Zend/tests/debug_info-error-0.0.phpt b/Zend/tests/debug_info-error-0.0.phpt new file mode 100644 index 0000000000..67cbe8a749 --- /dev/null +++ b/Zend/tests/debug_info-error-0.0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ZERO (float) +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(0.0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.0.php on line %d diff --git a/Zend/tests/debug_info-error-0.phpt b/Zend/tests/debug_info-error-0.phpt new file mode 100644 index 0000000000..97352a8017 --- /dev/null +++ b/Zend/tests/debug_info-error-0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ZERO +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.php on line %d diff --git a/Zend/tests/debug_info-error-1.0.phpt b/Zend/tests/debug_info-error-1.0.phpt new file mode 100644 index 0000000000..e89a47c199 --- /dev/null +++ b/Zend/tests/debug_info-error-1.0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ONE (float) +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(1.0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.0.php on line %d diff --git a/Zend/tests/debug_info-error-1.phpt b/Zend/tests/debug_info-error-1.phpt new file mode 100644 index 0000000000..a77500df2c --- /dev/null +++ b/Zend/tests/debug_info-error-1.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ONE +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(1); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.php on line %d diff --git a/Zend/tests/debug_info-error-empty_str.phpt b/Zend/tests/debug_info-error-empty_str.phpt new file mode 100644 index 0000000000..ea55b65ecb --- /dev/null +++ b/Zend/tests/debug_info-error-empty_str.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns EMPTY STRING +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(""); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-empty_str.php on line %d diff --git a/Zend/tests/debug_info-error-false.phpt b/Zend/tests/debug_info-error-false.phpt new file mode 100644 index 0000000000..9e9111326c --- /dev/null +++ b/Zend/tests/debug_info-error-false.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns FALSE +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(false); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-false.php on line %d diff --git a/Zend/tests/debug_info-error-object.phpt b/Zend/tests/debug_info-error-object.phpt new file mode 100644 index 0000000000..6562b5b6da --- /dev/null +++ b/Zend/tests/debug_info-error-object.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns OBJECT +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(new stdClass); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-object.php on line %d diff --git a/Zend/tests/debug_info-error-resource.phpt b/Zend/tests/debug_info-error-resource.phpt new file mode 100644 index 0000000000..c6d7be4cd9 --- /dev/null +++ b/Zend/tests/debug_info-error-resource.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns RESOURCE +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(fopen("data:text/plain,Foo", 'r')); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-resource.php on line %d diff --git a/Zend/tests/debug_info-error-str.phpt b/Zend/tests/debug_info-error-str.phpt new file mode 100644 index 0000000000..230ad0e93b --- /dev/null +++ b/Zend/tests/debug_info-error-str.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns STRING +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C("foo"); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-str.php on line %d diff --git a/Zend/tests/debug_info-error-true.phpt b/Zend/tests/debug_info-error-true.phpt new file mode 100644 index 0000000000..886c601286 --- /dev/null +++ b/Zend/tests/debug_info-error-true.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns TRUE +--FILE-- +<?php + +class C { + public $val; + public function __debugInfo() { + return $this->val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(true); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-true.php on line %d diff --git a/Zend/tests/debug_info.phpt b/Zend/tests/debug_info.phpt index c7c9f23be5..c82ddb2143 100644 --- a/Zend/tests/debug_info.phpt +++ b/Zend/tests/debug_info.phpt @@ -13,10 +13,21 @@ class Foo { } } +class Bar { + public $val = 123; + + public function __debugInfo() { + return null; + } +} + $f = new Foo; var_dump($f); ---EXPECT-- -object(Foo)#1 (3) { + +$b = new Bar; +var_dump($b); +--EXPECTF-- +object(Foo)#%d (3) { ["a"]=> int(1) ["b":protected]=> @@ -24,3 +35,5 @@ object(Foo)#1 (3) { ["c":"Foo":private]=> int(3) } +object(Bar)#%d (0) { +} diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index bc65313962..2ba05399b4 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -164,6 +164,7 @@ ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC zval ret; array_init(&ret); *is_temp = 1; + zval_ptr_dtor(&retval); return Z_ARRVAL(ret); } |