This was reported for PHP_5_2, did you intentionally not MFH? :)
--Jani
Dmitry Stogov wrote:
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