dmitry Wed Jun 24 08:53:44 2009 UTC Modified files: /php-src/ext/spl spl_directory.c Log: Fixed bug #48643 (String functions memory issue) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.183&r2=1.184&diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.183 php-src/ext/spl/spl_directory.c:1.184 --- php-src/ext/spl/spl_directory.c:1.183 Thu Jun 4 14:46:08 2009 +++ php-src/ext/spl/spl_directory.c Wed Jun 24 08:53:44 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_directory.c,v 1.183 2009/06/04 14:46:08 colder Exp $ */ +/* $Id: spl_directory.c,v 1.184 2009/06/24 08:53:44 dmitry Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -1723,37 +1723,53 @@ static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type, void *extra TSRMLS_DC) { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(readobj TSRMLS_CC); + int ret; + zval retval; + zval *retval_ptr = &retval; switch (intern->type) { case SPL_FS_INFO: case SPL_FS_FILE: if (type == intern->file_name_type) { - ZVAL_ZSTRL(writeobj, intern->file_name_type, intern->file_name, intern->file_name_len, 1); - return SUCCESS; + ZVAL_ZSTRL(retval_ptr, intern->file_name_type, intern->file_name, intern->file_name_len, 1); + ret = SUCCESS; + break; } if (type == IS_STRING) { - ZVAL_ZSTRL(writeobj, intern->file_name_type, intern->file_name, intern->file_name_len, ZSTR_DUPLICATE); - zval_unicode_to_string_ex(writeobj, ZEND_U_CONVERTER(((UConverter *)extra)) TSRMLS_CC); - return SUCCESS; + ZVAL_ZSTRL(retval_ptr, intern->file_name_type, intern->file_name, intern->file_name_len, ZSTR_DUPLICATE); + zval_unicode_to_string_ex(retval_ptr, ZEND_U_CONVERTER(((UConverter *)extra)) TSRMLS_CC); + ret = SUCCESS; + break; } if (type == IS_UNICODE) { - ZVAL_ASCII_STRINGL(writeobj, intern->file_name.s, intern->file_name_len, 1); - return SUCCESS; + ZVAL_ASCII_STRINGL(retval_ptr, intern->file_name.s, intern->file_name_len, 1); + ret = SUCCESS; + break; } + ZVAL_NULL(retval_ptr); + ret = FAILURE; break; case SPL_FS_DIR: if (type == IS_STRING) { - ZVAL_STRING(writeobj, intern->u.dir.entry.d_name, 1); - return SUCCESS; + ZVAL_STRING(retval_ptr, intern->u.dir.entry.d_name, 1); + ret = SUCCESS; + break; } if (type == IS_UNICODE) { - ZVAL_ASCII_STRING(writeobj, intern->u.dir.entry.d_name, 1); - return SUCCESS; + ZVAL_ASCII_STRING(retval_ptr, intern->u.dir.entry.d_name, 1); + ret = SUCCESS; + break; } - break; + default: + ZVAL_NULL(retval_ptr); + ret = FAILURE; + break; + } + if (readobj == writeobj) { + zval_dtor(readobj); } - ZVAL_NULL(writeobj); - return FAILURE; + ZVAL_ZVAL(writeobj, retval_ptr, 0, 0); + return ret; } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php