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

Reply via email to