cvs: php-src /ext/spl spl_directory.c
| From: | Dmitry Stogov | Date: | Wed, 24 Jun 2009 08:53:44 +0000 |
| Subject: | cvs: php-src /ext/spl spl_directory.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-58950@lists.php.net to get a copy of this message | ||
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;
}
/* }}} */