summaryrefslogtreecommitdiff
path: root/main/output.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/output.c')
-rw-r--r--main/output.c39
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 {