Skip to content

Commit

Permalink
bug #30034 [Config] ensure moving away from Serializable wont break c…
Browse files Browse the repository at this point in the history
…ache:clear (nicolas-grekas)

This PR was merged into the 3.4 branch.

Discussion
----------

[Config] ensure moving away from Serializable wont break cache:clear

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

When a resource implementation moves away from `Serializable`, the `cache:clear` command currently fails with `Warning: Class Symfony\Component\Config\Resource\ClassExistenceResource has no unserializer`. This change makes it ignore the failure, which is fine.

Commits
-------

9d3180a [Config] ensure moving away from Serializable wont break cache:clear
  • Loading branch information
nicolas-grekas committed Jan 30, 2019
2 parents 3cfb558 + 9d3180a commit c7937c9
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/Symfony/Component/Config/ResourceCheckerConfigCache.php
Expand Up @@ -156,18 +156,19 @@ private function safelyUnserialize($file)
{
$e = null;
$meta = false;
$content = file_get_contents($file);
$signalingException = new \UnexpectedValueException();
$prevUnserializeHandler = ini_set('unserialize_callback_func', '');
$prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$prevErrorHandler, $signalingException) {
if (E_WARNING === $type && 'Class __PHP_Incomplete_Class has no unserializer' === $msg) {
if (__FILE__ === $file) {
throw $signalingException;
}

return $prevErrorHandler ? $prevErrorHandler($type, $msg, $file, $line, $context) : false;
});

try {
$meta = unserialize(file_get_contents($file));
$meta = unserialize($content);
} catch (\Error $e) {
} catch (\Exception $e) {
}
Expand Down

0 comments on commit c7937c9

Please sign in to comment.