Skip to content

Commit ef56b2c

Browse files
committed
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fixed bug #79468
2 parents a76b335 + 95eaccd commit ef56b2c

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ PHP NEWS
1717
- SPL:
1818
. Fixed bug #69264 (__debugInfo() ignored while extending SPL classes). (cmb)
1919

20+
- Standard:
21+
. Fixed bug #79468 (SIGSEGV when closing stream handle with a stream filter
22+
appended). (dinosaur)
23+
2024
?? ??? ????, PHP 7.4.5
2125

2226
- Core:
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
Bug #79468 SIGSEGV when closing stream handle with a stream filter appended
3+
--SKIPIF--
4+
<?php
5+
$filters = stream_get_filters();
6+
if(! in_array( "string.rot13", $filters )) die( "skip rot13 filter not available." );
7+
?>
8+
--FILE--
9+
<?php
10+
$fp = fopen('php://temp', 'rb');
11+
$rot13_filter = stream_filter_append($fp, "string.rot13", STREAM_FILTER_WRITE);
12+
fwrite($fp, "This is ");
13+
fclose($fp);
14+
try {
15+
stream_filter_remove($rot13_filter);
16+
} catch (\Throwable $e) {
17+
var_dump($e->getMessage());
18+
}
19+
?>
20+
--EXPECTF--
21+
Warning: stream_filter_remove(): Invalid resource given, not a stream filter in %s on line %d

main/streams/streams.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,9 +487,15 @@ fprintf(stderr, "stream_free: %s:%p[%s] preserve_handle=%d release_cast=%d remov
487487

488488
if (close_options & PHP_STREAM_FREE_RELEASE_STREAM) {
489489
while (stream->readfilters.head) {
490+
if (stream->readfilters.head->res != NULL) {
491+
zend_list_close(stream->readfilters.head->res);
492+
}
490493
php_stream_filter_remove(stream->readfilters.head, 1);
491494
}
492495
while (stream->writefilters.head) {
496+
if (stream->writefilters.head->res != NULL) {
497+
zend_list_close(stream->writefilters.head->res);
498+
}
493499
php_stream_filter_remove(stream->writefilters.head, 1);
494500
}
495501

0 commit comments

Comments
 (0)