Edit report at https://bugs.php.net/bug.php?id=64354&edit=1
ID: 64354 Updated by: larue...@php.net Reported by: alan at klestoff dot ru Summary: Unserialize array of objects whose class can't be autoloaded fail Status: Open Type: Bug Package: Scripting Engine problem Operating System: Debian PHP Version: 5.3.22 Block user comment: N Private report: N New Comment: hmm, this is because one serializing triggered more than one exception. quick patch attached. Previous Comments: ------------------------------------------------------------------------ [2013-03-05 07:27:04] alan at klestoff dot ru Description: ------------ We have serialized object of class A and array with 2 such objects <?php class A {} echo serialize(new A()).PHP_EOL; echo serialize(array(new A(), new A())).PHP_EOL; ?> Then we write autoload function which throws exception if can't find a file with class. And in first case - we have a normal behaviour (we can catch exception). In second we have uncaughted exception. Test script: --------------- <?php spl_autoload_register( function($class) { if (!file_exists($class.'.php')) throw new Exception(); require_once $class.'.php'; } ); try { var_dump(unserialize('O:1:"A":0:{}')); echo 'Serialized'.PHP_EOL; } catch (Exception $e) { echo 'Failed'.PHP_EOL; } try { var_dump(unserialize('a:2:{i:0;O:1:"A":0:{}i:1;O:1:"A":0:{}}')); echo 'Serialized'.PHP_EOL; } catch (Exception $e) { echo 'Failed'.PHP_EOL; } Expected result: ---------------- Failed Failed Actual result: -------------- Failed PHP Fatal error: Uncaught exception 'Exception' in -:5 Stack trace: #0 [internal function]: {closure}('A') #1 [internal function]: spl_autoload_call('A') #2 -(20): unserialize('a:2:{i:0;O:1:"A...') #3 {main} Next exception 'Exception' in -:5 Stack trace: #0 [internal function]: {closure}('A') #1 -(0): spl_autoload_call('A') #2 {main} thrown in - on line 5 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64354&edit=1