mike            Tue Oct  3 22:20:29 2006 UTC

  Modified files:              
    /php-src/main       output.c php_output.h 
  Log:
  - fix failure with tests/lang/bug23489.phpt
  - allocate fci param space at once with php_output_handler_user_func_t
  
  
http://cvs.php.net/viewvc.cgi/php-src/main/output.c?r1=1.197&r2=1.198&diff_format=u
Index: php-src/main/output.c
diff -u php-src/main/output.c:1.197 php-src/main/output.c:1.198
--- php-src/main/output.c:1.197 Tue Oct  3 08:15:44 2006
+++ php-src/main/output.c       Tue Oct  3 22:20:28 2006
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: output.c,v 1.197 2006/10/03 08:15:44 mike Exp $ */
+/* $Id: output.c,v 1.198 2006/10/03 22:20:28 mike Exp $ */
 
 #ifndef PHP_OUTPUT_DEBUG
 #      define PHP_OUTPUT_DEBUG 0
@@ -509,8 +509,13 @@
                                MAKE_STD_ZVAL(handler_name);
                                zend_make_callable(output_handler, handler_name 
TSRMLS_CC);
                                handler = php_output_handler_init(handler_name, 
chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_USER);
-                               handler->func.user = user;
                                zval_ptr_dtor(&handler_name);
+                               
+                               ZVAL_ADDREF(output_handler);
+                               user->zoh = output_handler;
+                               user->fci.param_count = 2;
+                               user->fci.params = (zval ***) &user->fcp;
+                               handler->func.user = user;
                        } else {
                                efree(user);
                        }
@@ -710,6 +715,7 @@
        zval_ptr_dtor(&handler->name);
        STR_FREE(handler->buffer.data);
        if (handler->flags & PHP_OUTPUT_HANDLER_USER) {
+               zval_ptr_dtor(&handler->func.user->zoh);
                efree(handler->func.user);
        }
        if (handler->dtor && handler->opaq) {
@@ -944,8 +950,6 @@
                        ZVAL_STRINGL(params[0], handler->buffer.data, 
handler->buffer.used, 1);
                        MAKE_STD_ZVAL(params[1]);
                        ZVAL_LONG(params[1], (long) context->op);
-                       handler->func.user->fci.param_count = 2;
-                       handler->func.user->fci.params = (zval***) 
safe_emalloc(handler->func.user->fci.param_count, sizeof(zval**), 0);
                        handler->func.user->fci.params[0] = &params[0];
                        handler->func.user->fci.params[1] = &params[1];
                        
@@ -966,7 +970,8 @@
                                /* call failed, pass internal buffer along */
                                status = PHP_OUTPUT_HANDLER_FAILURE;
                        }
-                       zend_fcall_info_args(&handler->func.user->fci, NULL 
TSRMLS_CC);
+                       zval_ptr_dtor(&params[0]);
+                       zval_ptr_dtor(&params[1]);
                        if (retval) {
                                zval_ptr_dtor(&retval);
                        }
http://cvs.php.net/viewvc.cgi/php-src/main/php_output.h?r1=1.66&r2=1.67&diff_format=u
Index: php-src/main/php_output.h
diff -u php-src/main/php_output.h:1.66 php-src/main/php_output.h:1.67
--- php-src/main/php_output.h:1.66      Tue Oct  3 08:15:44 2006
+++ php-src/main/php_output.h   Tue Oct  3 22:20:28 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_output.h,v 1.66 2006/10/03 08:15:44 mike Exp $ */
+/* $Id: php_output.h,v 1.67 2006/10/03 22:20:28 mike Exp $ */
 
 #ifndef PHP_OUTPUT_H
 #define PHP_OUTPUT_H
@@ -114,6 +114,8 @@
 typedef struct _php_output_handler_user_func_t {
        zend_fcall_info fci;
        zend_fcall_info_cache fcc;
+       zval **fcp[2];
+       zval *zoh;
 } php_output_handler_user_func_t;
 
 typedef struct _php_output_handler {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to