Edit report at https://bugs.php.net/bug.php?id=60919&edit=1

 ID:                 60919
 Updated by:         ras...@php.net
 Reported by:        the...@php.net
 Summary:            __wakeup is not called
 Status:             Feedback
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   (Any)
 PHP Version:        5.4.0RC6+
 Block user comment: N
 Private report:     N

 New Comment:

You should ask Stas for permission to commit this patch to 5.4 before the 
release. Initializing uninitialized variables tends to be a good idea.


Previous Comments:
------------------------------------------------------------------------
[2012-02-05 14:03:53] the...@php.net

The following patch has been added/updated:

Patch Name: init-serialize-levels.diff
Revision:   1328450632
URL:        
https://bugs.php.net/patch-display.php?bug=60919&patch=init-serialize-levels.diff&revision=1328450632

------------------------------------------------------------------------
[2012-02-05 14:00:32] the...@php.net

I can also not reproduce the issue if I compile PHP myself, neither on Linux 
nor on Windows.

>From looking at the diffs between 5.4.0RC5 and current SVN, BG(serialize_lock) 
>in conjunction with BG(unserialize).level and BG(serialize).level) sticks out. 
>The thing I think is suspicous here is that BG(unserialize).level gets 
>assigned to 1 inside a block guarded by if (... || !BG(unserialize).level) {, 
>but is never assigned to 0. 

Are we running into this problem because BG(unserialize).level doesn't properly 
get initialized? I'm not an expert here but is it safe to rely on the compiler 
doing thos?

Same goes for BG(serialize).level, by the way.

------------------------------------------------------------------------
[2012-02-04 17:47:12] the...@php.net

But still occurs in php-5.4.0RC7-nts-Win32-VC9-x86 (2012-Feb-02 23:15:00)

------------------------------------------------------------------------
[2012-01-28 21:23:59] ras...@php.net

I can't actually reproduce this in the current 5.4 code:

% php --version
PHP 5.4.0RC7-dev (cli) (built: Jan 28 2012 13:21:30) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

% php -r 'class A { function __sleep() { echo "SLEEP\n"; return array(); } 
function __wakeup() { echo "WAKEUP"; }} $a= unserialize(serialize(new A()));'
SLEEP
WAKEUP

------------------------------------------------------------------------
[2012-01-28 20:58:08] the...@php.net

Description:
------------
In 5.4.0RC6, a __wakeup() method is no longer called during unserialization.

Test script:
---------------
$ php -r 'class A { function __sleep() { echo "SLEEP\n"; return array(); } 
function __wakeup() { echo "WAKEUP"; }} $a= unserialize(serialize(new A()));'


Expected result:
----------------
SLEEP
WAKEUP
object(A)#1 (0) {
}


Actual result:
--------------
SLEEP
object(A)#1 (0) {
}



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60919&edit=1

Reply via email to