mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
Merge branch 'PHP-8.0'
* PHP-8.0: Make sure output start filename is not freed early
This commit is contained in:
commit
808029c049
11
Zend/tests/output_started_at_eval.phpt
Normal file
11
Zend/tests/output_started_at_eval.phpt
Normal file
@ -0,0 +1,11 @@
|
||||
--TEST--
|
||||
Output start at eval()
|
||||
--FILE--
|
||||
<?php
|
||||
eval('echo "Foo\n";');
|
||||
header('Foo: Bar');
|
||||
?>
|
||||
--EXPECTF--
|
||||
Foo
|
||||
|
||||
Warning: Cannot modify header information - headers already sent by (output started at %s(2) : eval()'d code:1) in %s on line %d
|
@ -103,16 +103,20 @@ static size_t (*php_output_direct)(const char *str, size_t str_len) = php_output
|
||||
static void php_output_header(void)
|
||||
{
|
||||
if (!SG(headers_sent)) {
|
||||
if (!OG(output_start_filename)) {
|
||||
if (!OG(output_start_filename_str)) {
|
||||
if (zend_is_compiling()) {
|
||||
OG(output_start_filename) = ZSTR_VAL(zend_get_compiled_filename());
|
||||
OG(output_start_filename_str) = zend_get_compiled_filename();
|
||||
OG(output_start_lineno) = zend_get_compiled_lineno();
|
||||
} else if (zend_is_executing()) {
|
||||
OG(output_start_filename) = zend_get_executed_filename();
|
||||
OG(output_start_filename_str) = zend_get_executed_filename_ex();
|
||||
OG(output_start_lineno) = zend_get_executed_lineno();
|
||||
}
|
||||
if (OG(output_start_filename_str)) {
|
||||
zend_string_addref(OG(output_start_filename_str));
|
||||
}
|
||||
#if PHP_OUTPUT_DEBUG
|
||||
fprintf(stderr, "!!! output started at: %s (%d)\n", OG(output_start_filename), OG(output_start_lineno));
|
||||
fprintf(stderr, "!!! output started at: %s (%d)\n",
|
||||
ZSTR_VAL(OG(output_start_filename_str)), OG(output_start_lineno));
|
||||
#endif
|
||||
}
|
||||
if (!php_header()) {
|
||||
@ -190,6 +194,11 @@ PHPAPI void php_output_deactivate(void)
|
||||
}
|
||||
zend_stack_destroy(&OG(handlers));
|
||||
}
|
||||
|
||||
if (OG(output_start_filename_str)) {
|
||||
zend_string_release(OG(output_start_filename_str));
|
||||
OG(output_start_filename_str) = NULL;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@ -749,7 +758,7 @@ PHPAPI void php_output_set_implicit_flush(int flush)
|
||||
* Get the file name where output has started */
|
||||
PHPAPI const char *php_output_get_start_filename(void)
|
||||
{
|
||||
return OG(output_start_filename);
|
||||
return ZSTR_VAL(OG(output_start_filename_str));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -137,9 +137,10 @@ ZEND_BEGIN_MODULE_GLOBALS(output)
|
||||
zend_stack handlers;
|
||||
php_output_handler *active;
|
||||
php_output_handler *running;
|
||||
const char *output_start_filename;
|
||||
const char *output_start_filename; /* TODO: Unused, remove */
|
||||
int output_start_lineno;
|
||||
int flags;
|
||||
zend_string *output_start_filename_str;
|
||||
ZEND_END_MODULE_GLOBALS(output)
|
||||
|
||||
PHPAPI ZEND_EXTERN_MODULE_GLOBALS(output)
|
||||
|
Loading…
Reference in New Issue
Block a user