]> granicus.if.org Git - php/commitdiff
Fixed invalid pointer usage (tests/output/ob_start_callbacks.phpt)
authorXinchen Hui <laruence@gmail.com>
Fri, 7 Mar 2014 08:49:01 +0000 (16:49 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 7 Mar 2014 08:49:01 +0000 (16:49 +0800)
main/output.c
main/php_output.h

index e9a816d44c00ba30273878aa4e1f06c568129e07..a25a326e166804d5296410c225f91a289f53133b 100644 (file)
@@ -495,8 +495,7 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler,
                        user = ecalloc(1, sizeof(php_output_handler_user_func_t));
                        if (SUCCESS == zend_fcall_info_init(output_handler, 0, &user->fci, &user->fcc, &handler_name, &error TSRMLS_CC)) {
                                handler = php_output_handler_init(handler_name->val, handler_name->len, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_USER TSRMLS_CC);
-                               if (Z_REFCOUNTED_P(output_handler)) Z_ADDREF_P(output_handler);
-                               user->zoh = output_handler;
+                               ZVAL_COPY(&user->zoh, output_handler);
                                handler->func.user = user;
                        } else {
                                efree(user);
@@ -709,7 +708,7 @@ PHPAPI void php_output_handler_dtor(php_output_handler *handler TSRMLS_DC)
 //???  STR_FREE(handler->buffer.data);
        if (handler->buffer.data) efree(handler->buffer.data);
        if (handler->flags & PHP_OUTPUT_HANDLER_USER) {
-               zval_ptr_dtor(handler->func.user->zoh);
+               zval_ptr_dtor(&handler->func.user->zoh);
                efree(handler->func.user);
        }
        if (handler->dtor && handler->opaq) {
index e61b59b95af019d67e82f793119c78a30e1fe406..45af14f6a509b7cff5f62fd978932ce19cd482f2 100644 (file)
@@ -123,7 +123,7 @@ typedef struct _php_output_handler *(*php_output_handler_alias_ctor_t)(const cha
 typedef struct _php_output_handler_user_func_t {
        zend_fcall_info fci;
        zend_fcall_info_cache fcc;
-       zval *zoh;
+       zval zoh;
 } php_output_handler_user_func_t;
 
 typedef struct _php_output_handler {