]> granicus.if.org Git - php/commitdiff
Add more tests for __debugInfo() and fix leak
authorSara Golemon <pollita@php.net>
Thu, 20 Feb 2014 19:55:27 +0000 (11:55 -0800)
committerSara Golemon <pollita@php.net>
Thu, 20 Feb 2014 20:10:00 +0000 (12:10 -0800)
12 files changed:
Zend/tests/debug_info-error-0.0.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-0.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-1.0.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-1.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-empty_str.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-false.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-object.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-resource.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-str.phpt [new file with mode: 0644]
Zend/tests/debug_info-error-true.phpt [new file with mode: 0644]
Zend/tests/debug_info.phpt
Zend/zend_object_handlers.c

diff --git a/Zend/tests/debug_info-error-0.0.phpt b/Zend/tests/debug_info-error-0.0.phpt
new file mode 100644 (file)
index 0000000..67cbe8a
--- /dev/null
@@ -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 (file)
index 0000000..97352a8
--- /dev/null
@@ -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 (file)
index 0000000..e89a47c
--- /dev/null
@@ -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 (file)
index 0000000..a77500d
--- /dev/null
@@ -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 (file)
index 0000000..ea55b65
--- /dev/null
@@ -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 (file)
index 0000000..9e91113
--- /dev/null
@@ -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 (file)
index 0000000..6562b5b
--- /dev/null
@@ -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 (file)
index 0000000..c6d7be4
--- /dev/null
@@ -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 (file)
index 0000000..230ad0e
--- /dev/null
@@ -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 (file)
index 0000000..886c601
--- /dev/null
@@ -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
index c7c9f23be58c563421b5695b036a025ad9507781..c82ddb2143edc888b0eb7e16290c7ddf70d8632a 100644 (file)
@@ -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) {
+}
index bc6531396273770a4ef7cee8877161593df44e2f..2ba05399b4ddb67d70c7d26bb5d8810460b5e8d7 100644 (file)
@@ -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);
        }