@@ -73,37 +73,19 @@ public function isFresh()
73
73
}
74
74
75
75
$ metadata = $ this ->getMetaFile ();
76
+
76
77
if (!is_file ($ metadata )) {
77
78
return false ;
78
79
}
79
80
80
- $ e = null ;
81
- $ meta = false ;
82
- $ time = filemtime ($ this ->file );
83
- $ signalingException = new \UnexpectedValueException ();
84
- $ prevUnserializeHandler = ini_set ('unserialize_callback_func ' , '' );
85
- $ prevErrorHandler = set_error_handler (function ($ type , $ msg , $ file , $ line , $ context ) use (&$ prevErrorHandler , $ signalingException ) {
86
- if (E_WARNING === $ type && 'Class __PHP_Incomplete_Class has no unserializer ' === $ msg ) {
87
- throw $ signalingException ;
88
- }
89
-
90
- return $ prevErrorHandler ? $ prevErrorHandler ($ type , $ msg , $ file , $ line , $ context ) : false ;
91
- });
81
+ $ meta = $ this ->safelyUnserialize ($ metadata );
92
82
93
- try {
94
- $ meta = unserialize (file_get_contents ($ metadata ));
95
- } catch (\Error $ e ) {
96
- } catch (\Exception $ e ) {
97
- }
98
- restore_error_handler ();
99
- ini_set ('unserialize_callback_func ' , $ prevUnserializeHandler );
100
- if (null !== $ e && $ e !== $ signalingException ) {
101
- throw $ e ;
102
- }
103
83
if (false === $ meta ) {
104
84
return false ;
105
85
}
106
86
87
+ $ time = filemtime ($ this ->file );
88
+
107
89
foreach ($ meta as $ resource ) {
108
90
/* @var ResourceInterface $resource */
109
91
foreach ($ this ->resourceCheckers as $ checker ) {
@@ -161,4 +143,32 @@ private function getMetaFile()
161
143
{
162
144
return $ this ->file .'.meta ' ;
163
145
}
146
+
147
+ private function safelyUnserialize ($ file )
148
+ {
149
+ $ e = null ;
150
+ $ meta = false ;
151
+ $ signalingException = new \UnexpectedValueException ();
152
+ $ prevUnserializeHandler = ini_set ('unserialize_callback_func ' , '' );
153
+ $ prevErrorHandler = set_error_handler (function ($ type , $ msg , $ file , $ line , $ context ) use (&$ prevErrorHandler , $ signalingException ) {
154
+ if (E_WARNING === $ type && 'Class __PHP_Incomplete_Class has no unserializer ' === $ msg ) {
155
+ throw $ signalingException ;
156
+ }
157
+
158
+ return $ prevErrorHandler ? $ prevErrorHandler ($ type , $ msg , $ file , $ line , $ context ) : false ;
159
+ });
160
+
161
+ try {
162
+ $ meta = unserialize (file_get_contents ($ file ));
163
+ } catch (\Error $ e ) {
164
+ } catch (\Exception $ e ) {
165
+ }
166
+ restore_error_handler ();
167
+ ini_set ('unserialize_callback_func ' , $ prevUnserializeHandler );
168
+ if (null !== $ e && $ e !== $ signalingException ) {
169
+ throw $ e ;
170
+ }
171
+
172
+ return $ meta ;
173
+ }
164
174
}
0 commit comments