tony2001 Wed Nov 15 17:28:56 2006 UTC Added files: /php-src/ext/standard/tests/general_functions type.phpt
Modified files: /ZendEngine2 zend_operators.c Log: fix leak appearing when converting object to NULL add test
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_operators.c?r1=1.258&r2=1.259&diff_format=u Index: ZendEngine2/zend_operators.c diff -u ZendEngine2/zend_operators.c:1.258 ZendEngine2/zend_operators.c:1.259 --- ZendEngine2/zend_operators.c:1.258 Fri Oct 13 14:52:19 2006 +++ ZendEngine2/zend_operators.c Wed Nov 15 17:28:56 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.c,v 1.258 2006/10/13 14:52:19 andrei Exp $ */ +/* $Id: zend_operators.c,v 1.259 2006/11/15 17:28:56 tony2001 Exp $ */ #include <ctype.h> @@ -498,6 +498,7 @@ return; } *op = *org; + FREE_ZVAL(org); } } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/type.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/type.phpt +++ php-src/ext/standard/tests/general_functions/type.phpt --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(%d) bool(true) int(%d) 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(%d) bool(true) float(%d) 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 --UEXPECTF-- unicode(5) "array" unicode(7) "unicode" unicode(5) "array" unicode(7) "integer" unicode(6) "double" unicode(4) "NULL" unicode(7) "boolean" unicode(7) "unicode" unicode(12) "unknown type" unicode(8) "resource" unicode(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(%d) bool(true) int(%d) unicode(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(%d) bool(true) float(%d) unicode(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) unicode(42) "settype(): Cannot convert to resource type" bool(false) array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } unicode(42) "settype(): Cannot convert to resource type" bool(false) unicode(14) "another string" unicode(42) "settype(): Cannot convert to resource type" bool(false) array(3) { [0]=> int(2) [1]=> int(3) [2]=> int(4) } unicode(42) "settype(): Cannot convert to resource type" bool(false) int(1) unicode(42) "settype(): Cannot convert to resource type" bool(false) float(2) unicode(42) "settype(): Cannot convert to resource type" bool(false) NULL unicode(42) "settype(): Cannot convert to resource type" bool(false) bool(false) unicode(42) "settype(): Cannot convert to resource type" bool(false) unicode(11) "some string" unicode(42) "settype(): Cannot convert to resource type" bool(false) resource(%d) of type (Unknown) unicode(42) "settype(): Cannot convert to resource type" bool(false) resource(%d) of type (stream) unicode(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]=> unicode(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]=> unicode(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) { [u"scalar"]=> unicode(14) "another string" } bool(true) object(stdClass)#%d (3) { [0]=> int(2) [1]=> int(3) [2]=> int(4) } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> int(1) } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> float(2) } bool(true) object(stdClass)#%d (0) { } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> bool(false) } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> unicode(11) "some string" } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> resource(%d) of type (Unknown) } bool(true) object(stdClass)#%d (1) { [u"scalar"]=> resource(%d) of type (stream) } bool(true) object(stdClass)#%d (0) { } unicode(26) "Array to string conversion" bool(true) unicode(5) "Array" bool(true) unicode(14) "another string" unicode(26) "Array to string conversion" bool(true) unicode(5) "Array" bool(true) unicode(1) "1" bool(true) unicode(1) "2" bool(true) unicode(0) "" bool(true) unicode(0) "" bool(true) unicode(11) "some string" bool(true) unicode(14) "Resource id #%d" bool(true) unicode(14) "Resource id #%d" unicode(65) "Object of class stdClass could not be converted to Unicode string" unicode(45) "Object of class stdClass to string conversion" bool(true) unicode(6) "Object" Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php