1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix leak when include fails in a read operation

Usually it will already fail when opening, but reads can also
fail since PHP 7.4, in which case we still need to place the
file handle in open_files to make sure the destructor will run
on it.
This commit is contained in:
Nikita Popov
2019-10-07 17:29:33 +02:00
parent 638ac2efc4
commit 2f64844495
2 changed files with 14 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
--TEST--
Include fails during read
--FILE--
<?php
class SampleFilter extends php_user_filter { }
stream_filter_register('sample.filter', SampleFilter::class);
include 'php://filter/read=sample.filter/resource='. __FILE__;
?>
--EXPECTF--
Warning: include(): Unprocessed filter buckets remaining on input brigade in %s on line %d
Warning: include(): Failed opening 'php://filter/read=sample.filter/resource=%s' for inclusion (include_path='%s') in %s on line %d

View File

@@ -518,6 +518,8 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
zend_string *compiled_filename;
if (zend_stream_fixup(file_handle, &buf, &size) == FAILURE) {
/* Still add it to open_files to make destroy_file_handle work */
zend_llist_add_element(&CG(open_files), file_handle);
return FAILURE;
}