mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
fix leak appearing when converting object to NULL
add test
This commit is contained in:
parent
84ff4aaf1a
commit
9d6f7755b8
@ -447,6 +447,7 @@ ZEND_API void convert_to_null(zval *op)
|
||||
return;
|
||||
}
|
||||
*op = *org;
|
||||
FREE_ZVAL(org);
|
||||
}
|
||||
}
|
||||
|
||||
|
351
ext/standard/tests/general_functions/type.phpt
Normal file
351
ext/standard/tests/general_functions/type.phpt
Normal file
@ -0,0 +1,351 @@
|
||||
--TEST--
|
||||
gettype(), settype() and friends
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function foo($errno, $errstr, $errfile, $errline) {
|
||||
var_dump($errstr);
|
||||
}
|
||||
|
||||
set_error_handler("foo");
|
||||
|
||||
$fp = fopen(__FILE__, "r");
|
||||
fclose($fp);
|
||||
$fp1 = fopen(__FILE__, "r");
|
||||
|
||||
$var1 = "another string";
|
||||
$var2 = array(2,3,4);
|
||||
|
||||
$array = array(
|
||||
array(1,2,3),
|
||||
$var1,
|
||||
$var2,
|
||||
1,
|
||||
2.0,
|
||||
NULL,
|
||||
false,
|
||||
"some string",
|
||||
$fp,
|
||||
$fp1,
|
||||
new stdclass,
|
||||
);
|
||||
|
||||
$types = array(
|
||||
"null",
|
||||
"integer",
|
||||
"double",
|
||||
"boolean",
|
||||
"resource",
|
||||
"array",
|
||||
"object",
|
||||
"string"
|
||||
);
|
||||
|
||||
foreach ($array as $var) {
|
||||
var_dump(gettype($var));
|
||||
}
|
||||
|
||||
foreach ($types as $type) {
|
||||
foreach ($array as $var) {
|
||||
var_dump(settype($var, $type));
|
||||
var_dump($var);
|
||||
}
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(5) "array"
|
||||
string(6) "string"
|
||||
string(5) "array"
|
||||
string(7) "integer"
|
||||
string(6) "double"
|
||||
string(4) "NULL"
|
||||
string(7) "boolean"
|
||||
string(6) "string"
|
||||
string(12) "unknown type"
|
||||
string(8) "resource"
|
||||
string(6) "object"
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
NULL
|
||||
bool(true)
|
||||
int(1)
|
||||
bool(true)
|
||||
int(0)
|
||||
bool(true)
|
||||
int(1)
|
||||
bool(true)
|
||||
int(1)
|
||||
bool(true)
|
||||
int(2)
|
||||
bool(true)
|
||||
int(0)
|
||||
bool(true)
|
||||
int(0)
|
||||
bool(true)
|
||||
int(0)
|
||||
bool(true)
|
||||
int(5)
|
||||
bool(true)
|
||||
int(6)
|
||||
string(54) "Object of class stdClass could not be converted to int"
|
||||
bool(true)
|
||||
int(%d)
|
||||
bool(true)
|
||||
float(1)
|
||||
bool(true)
|
||||
float(0)
|
||||
bool(true)
|
||||
float(1)
|
||||
bool(true)
|
||||
float(1)
|
||||
bool(true)
|
||||
float(2)
|
||||
bool(true)
|
||||
float(0)
|
||||
bool(true)
|
||||
float(0)
|
||||
bool(true)
|
||||
float(0)
|
||||
bool(true)
|
||||
float(5)
|
||||
bool(true)
|
||||
float(6)
|
||||
string(57) "Object of class stdClass could not be converted to double"
|
||||
bool(true)
|
||||
float(%d)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
int(3)
|
||||
}
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
string(14) "another string"
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(2)
|
||||
[1]=>
|
||||
int(3)
|
||||
[2]=>
|
||||
int(4)
|
||||
}
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
int(1)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
float(2)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
NULL
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
bool(false)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
string(11) "some string"
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
resource(%d) of type (Unknown)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
resource(%d) of type (stream)
|
||||
string(42) "settype(): Cannot convert to resource type"
|
||||
bool(false)
|
||||
object(stdClass)#%d (0) {
|
||||
}
|
||||
bool(true)
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
int(3)
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
string(14) "another string"
|
||||
}
|
||||
bool(true)
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(2)
|
||||
[1]=>
|
||||
int(3)
|
||||
[2]=>
|
||||
int(4)
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
int(1)
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
float(2)
|
||||
}
|
||||
bool(true)
|
||||
array(0) {
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
bool(false)
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
string(11) "some string"
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
resource(%d) of type (Unknown)
|
||||
}
|
||||
bool(true)
|
||||
array(1) {
|
||||
[0]=>
|
||||
resource(%d) of type (stream)
|
||||
}
|
||||
bool(true)
|
||||
array(0) {
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
int(3)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
string(14) "another string"
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (3) {
|
||||
[0]=>
|
||||
int(2)
|
||||
[1]=>
|
||||
int(3)
|
||||
[2]=>
|
||||
int(4)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
int(1)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
float(2)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (0) {
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
bool(false)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
string(11) "some string"
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
resource(%d) of type (Unknown)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (1) {
|
||||
["scalar"]=>
|
||||
resource(%d) of type (stream)
|
||||
}
|
||||
bool(true)
|
||||
object(stdClass)#%d (0) {
|
||||
}
|
||||
string(26) "Array to string conversion"
|
||||
bool(true)
|
||||
string(5) "Array"
|
||||
bool(true)
|
||||
string(14) "another string"
|
||||
string(26) "Array to string conversion"
|
||||
bool(true)
|
||||
string(5) "Array"
|
||||
bool(true)
|
||||
string(1) "1"
|
||||
bool(true)
|
||||
string(1) "2"
|
||||
bool(true)
|
||||
string(0) ""
|
||||
bool(true)
|
||||
string(0) ""
|
||||
bool(true)
|
||||
string(11) "some string"
|
||||
bool(true)
|
||||
string(14) "Resource id #%d"
|
||||
bool(true)
|
||||
string(14) "Resource id #%d"
|
||||
string(57) "Object of class stdClass could not be converted to string"
|
||||
string(45) "Object of class stdClass to string conversion"
|
||||
bool(true)
|
||||
string(6) "Object"
|
||||
Done
|
Loading…
Reference in New Issue
Block a user