mirror of
https://github.com/php/php-src.git
synced 2026-03-24 16:22:37 +01:00
The ctrl_handler is never destroyed. We have to destroy it at request
end so we avoid leaking it and also avoid keeping a reference to
previous request memory in a next request. The latter can result in a
crash and can be demonstrated with this script and `--repeat 2`:
```php
class Test {
public function set() {
sapi_windows_set_ctrl_handler(self::cb(...));
}
public function cb() {
}
}
$test = new Test;
$test->set();
sleep(3);
```
When you hit CTRL+C in the second request you can crash.
This patch resolves both the leak and crash by destroying the
ctrl_handler after a request.
Closes GH-18231.
29 lines
399 B
PHP
29 lines
399 B
PHP
--TEST--
|
|
sapi_windows_set_ctrl_handler() leak bug
|
|
--SKIPIF--
|
|
<?php
|
|
include "skipif.inc";
|
|
|
|
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
|
|
die("skip this test is for Windows platforms only");
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
|
|
class Test {
|
|
public function set() {
|
|
sapi_windows_set_ctrl_handler(self::cb(...));
|
|
}
|
|
public function cb() {
|
|
}
|
|
}
|
|
|
|
$test = new Test;
|
|
$test->set();
|
|
|
|
echo "Done\n";
|
|
|
|
?>
|
|
--EXPECT--
|
|
Done
|