diff options
Diffstat (limited to 'main/output.c')
| -rw-r--r-- | main/output.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/main/output.c b/main/output.c index 0ef41c10a7..631c08178b 100644 --- a/main/output.c +++ b/main/output.c @@ -12,15 +12,13 @@ | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ - | Authors: Zeev Suraski <zeev@zend.com> | + | Authors: Zeev Suraski <zeev@php.net> | | Thies C. Arntzen <thies@thieso.net> | | Marcus Boerger <helly@php.net> | | New API: Michael Wallner <mike@php.net> | +----------------------------------------------------------------------+ */ -/* $Id$ */ - #ifndef PHP_OUTPUT_DEBUG # define PHP_OUTPUT_DEBUG 0 #endif @@ -504,7 +502,7 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler, efree(error); } if (handler_name) { - zend_string_release(handler_name); + zend_string_release_ex(handler_name, 0); } } @@ -521,7 +519,7 @@ PHPAPI php_output_handler *php_output_handler_create_internal(const char *name, handler = php_output_handler_init(str, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_INTERNAL); handler->func.internal = output_handler; - zend_string_release(str); + zend_string_release_ex(str, 0); return handler; } @@ -609,11 +607,16 @@ PHPAPI int php_output_handler_conflict(const char *handler_new, size_t handler_n * Register a conflict checking function on MINIT */ PHPAPI int php_output_handler_conflict_register(const char *name, size_t name_len, php_output_handler_conflict_check_t check_func) { + zend_string *str; + if (!EG(current_module)) { zend_error(E_ERROR, "Cannot register an output handler conflict outside of MINIT"); return FAILURE; } - return zend_hash_str_update_ptr(&php_output_handler_conflicts, name, name_len, check_func) ? SUCCESS : FAILURE; + str = zend_string_init_interned(name, name_len, 1); + zend_hash_update_ptr(&php_output_handler_conflicts, str, check_func); + zend_string_release_ex(str, 1); + return SUCCESS; } /* }}} */ @@ -631,15 +634,16 @@ PHPAPI int php_output_handler_reverse_conflict_register(const char *name, size_t if (NULL != (rev_ptr = zend_hash_str_find_ptr(&php_output_handler_reverse_conflicts, name, name_len))) { return zend_hash_next_index_insert_ptr(rev_ptr, check_func) ? SUCCESS : FAILURE; } else { + zend_string *str; + zend_hash_init(&rev, 8, NULL, NULL, 1); if (NULL == zend_hash_next_index_insert_ptr(&rev, check_func)) { zend_hash_destroy(&rev); return FAILURE; } - if (NULL == zend_hash_str_update_mem(&php_output_handler_reverse_conflicts, name, name_len+1, &rev, sizeof(HashTable))) { - zend_hash_destroy(&rev); - return FAILURE; - } + str = zend_string_init_interned(name, name_len, 1); + zend_hash_update_mem(&php_output_handler_reverse_conflicts, str, &rev, sizeof(HashTable)); + zend_string_release_ex(str, 1); return SUCCESS; } } @@ -657,11 +661,16 @@ PHPAPI php_output_handler_alias_ctor_t php_output_handler_alias(const char *name * Registers an internal output handler as alias for a user handler */ PHPAPI int php_output_handler_alias_register(const char *name, size_t name_len, php_output_handler_alias_ctor_t func) { + zend_string *str; + if (!EG(current_module)) { zend_error(E_ERROR, "Cannot register an output handler alias outside of MINIT"); return FAILURE; } - return zend_hash_str_update_ptr(&php_output_handler_aliases, name, name_len, func) ? SUCCESS : FAILURE; + str = zend_string_init_interned(name, name_len, 1); + zend_hash_update_ptr(&php_output_handler_aliases, str, func); + zend_string_release_ex(str, 1); + return SUCCESS; } /* }}} */ @@ -699,7 +708,7 @@ PHPAPI int php_output_handler_hook(php_output_handler_hook_t type, void *arg) PHPAPI void php_output_handler_dtor(php_output_handler *handler) { if (handler->name) { - zend_string_release(handler->name); + zend_string_release_ex(handler->name, 0); } if (handler->buffer.data) { efree(handler->buffer.data); @@ -1298,7 +1307,7 @@ PHP_FUNCTION(ob_start) zend_long chunk_size = 0; zend_long flags = PHP_OUTPUT_HANDLER_STDFLAGS; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|z/ll", &output_handler, &chunk_size, &flags) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|zll", &output_handler, &chunk_size, &flags) == FAILURE) { return; } @@ -1532,6 +1541,10 @@ PHP_FUNCTION(ob_implicit_flush) Reset(clear) URL rewriter values */ PHP_FUNCTION(output_reset_rewrite_vars) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } + if (php_url_scanner_reset_vars() == SUCCESS) { RETURN_TRUE; } else { |
