mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
- Fixed bug #61371 (resource leak). This bug had two parts, a long standing leak
already fixed in trunk/5.3 and now merged onto 5.4 and a leak introduced in fixing bug #61115. This better fix for #61115 fixes the leak (the inhibition for deleting the context was too broad) and so prevents segfaults in new circumstances (where the inhibition was not broad enough).
This commit is contained in:
parent
a07759a013
commit
ef19fba2d5
2
NEWS
2
NEWS
@ -98,6 +98,8 @@ PHP NEWS
|
||||
SessionHandler::write()). (Ilia)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #61371 (stream_context_create() causes memory leaks on use
|
||||
streams_socket_create). (Gustavo)
|
||||
. Fixed bug #61253 (Wrappers opened with errors concurrency problem on ZTS).
|
||||
(Gustavo)
|
||||
. Fixed bug #61115 (stream related segfault on fatal error in
|
||||
|
11
ext/standard/tests/streams/bug61115-1.phpt
Normal file
11
ext/standard/tests/streams/bug61115-1.phpt
Normal file
@ -0,0 +1,11 @@
|
||||
--TEST--
|
||||
Bug #61115: Stream related segfault on fatal error in php_stream_context_del_link - variation 1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$fileResourceTemp = fopen('php://temp', 'wr');
|
||||
stream_context_get_options($fileResourceTemp);
|
||||
ftruncate($fileResourceTemp, PHP_INT_MAX);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes) in %s on line %d
|
10
ext/standard/tests/streams/bug61115-2.phpt
Normal file
10
ext/standard/tests/streams/bug61115-2.phpt
Normal file
@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #61115: Stream related segfault on fatal error in php_stream_context_del_link - variation 2
|
||||
--FILE--
|
||||
<?php
|
||||
stream_socket_client('abc', $var, $var, 0, STREAM_CLIENT_PERSISTENT);
|
||||
|
||||
?>
|
||||
==DONE==
|
||||
--EXPECT--
|
||||
==DONE==
|
40
ext/standard/tests/streams/bug61371.phpt
Normal file
40
ext/standard/tests/streams/bug61371.phpt
Normal file
@ -0,0 +1,40 @@
|
||||
--TEST--
|
||||
Bug #61371: stream_context_create() causes memory leaks on use streams_socket_create
|
||||
--FILE--
|
||||
<?php
|
||||
function test($doFclose) {
|
||||
$previous = null;
|
||||
$current = null;
|
||||
for($test=1;$test<=3;$test++) {
|
||||
$current = memory_get_usage(true);
|
||||
if (!is_null($previous)) {
|
||||
var_dump($previous == $current);
|
||||
}
|
||||
$previous = $current;
|
||||
echo 'memory: '.round($current / 1024, 0)."kb\n";
|
||||
for($i=0;$i<=100;$i++) {
|
||||
$context = stream_context_create(array());
|
||||
$stream = stream_socket_client('udp://0.0.0.0:80', $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context);
|
||||
if ($doFclose) fclose($stream);
|
||||
unset($context);
|
||||
unset($stream);
|
||||
unset($errno);
|
||||
unset($errstr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test(true);
|
||||
test(false);
|
||||
?>
|
||||
--EXPECTF--
|
||||
memory: %dkb
|
||||
bool(true)
|
||||
memory: %dkb
|
||||
bool(true)
|
||||
memory: %dkb
|
||||
memory: %dkb
|
||||
bool(true)
|
||||
memory: %dkb
|
||||
bool(true)
|
||||
memory: %dkb
|
@ -344,7 +344,7 @@ PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC) /*
|
||||
/* on an resource list destruction, the context, another resource, may have
|
||||
* already been freed (if it was created after the stream resource), so
|
||||
* don't reference it */
|
||||
if (!(close_options & PHP_STREAM_FREE_RSRC_DTOR)) {
|
||||
if (EG(active)) {
|
||||
context = stream->context;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user