Restoring the error handler within the error handler causes unexpected results

See http://php.net/manual/en/function.restore-error-handler.php#120879
for more information.

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-04-20 12:23:34 +02:00
parent 38c901fadf
commit 24789ba0f4
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
1 changed files with 10 additions and 3 deletions

View File

@ -17,15 +17,22 @@ class RedisTest extends Cache {
self::markTestSkipped('The redis extension is not available.'); self::markTestSkipped('The redis extension is not available.');
} }
$errorOccurred = false;
set_error_handler( set_error_handler(
function($errno, $errstr) { function($errno, $errstr) {
restore_error_handler(); throw new \RuntimeException($errstr, 123456789);
self::markTestSkipped($errstr);
}, },
E_WARNING E_WARNING
); );
try {
$instance = new \OC\Memcache\Redis(self::getUniqueID()); $instance = new \OC\Memcache\Redis(self::getUniqueID());
} catch (\RuntimeException $e) {
$errorOccurred = $e->getCode() === 123456789 ? $e->getMessage() : false;
}
restore_error_handler(); restore_error_handler();
if ($errorOccurred !== false) {
self::markTestSkipped($errorOccurred);
}
if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) { if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) {
self::markTestSkipped('redis server seems to be down.'); self::markTestSkipped('redis server seems to be down.');