Don't leak header callback if headers already sent

We need to avoid storing it in the first place, as we don't
really have a good place to release it later. If headers haven't
been sent yet, send_headers will do this. sapi_deactive happens
too late in the shutdown sequence and will result in leak reports.
This commit is contained in:
Nikita Popov 2021-09-16 15:29:08 +02:00
parent 2172142346
commit 9bff96396d
2 changed files with 14 additions and 1 deletions

View file

@ -124,7 +124,11 @@ PHP_FUNCTION(header_register_callback)
SG(fci_cache) = empty_fcall_info_cache;
}
ZVAL_COPY(&SG(callback_func), &fci.function_name);
/* Don't store callback if headers have already been sent:
* It won't get used and we won't have a chance to release it. */
if (!SG(headers_sent)) {
ZVAL_COPY(&SG(callback_func), &fci.function_name);
}
RETURN_TRUE;
}