Bug #70187 [Com]: [Introduced in PHP 7] Notice: unserialize(): Unexpected end of serialized data

From: Date: Wed, 26 Aug 2015 06:47:16 +0000
Subject: Bug #70187 [Com]: [Introduced in PHP 7] Notice: unserialize(): Unexpected end of serialized data
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-195522@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70187&edit=1

 ID:                 70187
 Comment by:         pagescene at gmail dot com
 Reported by:        pagescene at gmail dot com
 Summary:            [Introduced in PHP 7] Notice: unserialize():
                     Unexpected end of serialized data
 Status:             Closed
 Type:               Bug
 Package:            Unknown/Other Function
 Operating System:   Windows 7
 PHP Version:        7.0.0beta2
 Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

Thanks very much @nikic & @dmitry. I can confirm that the latest commits to php-src fixed the
issue. Drupal Views works flawlessly now. All the best :-)


Previous Comments:
------------------------------------------------------------------------
[2015-08-26 00:27:22] dmitry@php.net

Automatic comment on behalf of dmitry@zend.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=25f9e255264d8196f51a22707e797977e4cd3995
Log: Fixed bug #70187 (Notice: unserialize(): Unexpected end of serialized data)

------------------------------------------------------------------------
[2015-08-25 09:48:03] nikic@php.net

@pagescene: This is definitely a bug in PHP 7. You shouldn't change the Drupal code for this ;)

The problem is basically that in PHP 7 count($array) is no longer precise (i.e. does not match the
actual number of elements in the array) in some very limited circumstances. One such case is doing
something like count($object->getAllProperties()) if there exists some property that was declared
on the class and later unset(). In this case the count() will be reported to be one larger than it
really is.

@dmitry: Could you take a look at this? Is there some way to fix this short of doing a full table
scan beforehand (or serializing the contents into a separate buffer first and counting elements
while doing so)?

------------------------------------------------------------------------
[2015-08-25 09:22:10] pagescene at gmail dot com

Thanks very much to you all for looking into this issue.

So do you think this is a PHP 7 bug or does the Drupal Views code need to be adjusted for PHP 7?

The error appears only under PHP 7.

@nikic@php.net, would you please explain this part from your comment:

"t's because there is an object with a dynamic properties HT, which contains and INDIRECT
to and UNDEF" ..

The View's class definition is here (expand View source item in page):
https://api.drupal.org/api/views/includes%21view.inc/7

The ctools_object_cache code (where the view's object gets serialized):
http://www.drupalcontrib.org/api/drupal/contributions%21ctools%21includes%21object-cache.inc/7

Thanks.

------------------------------------------------------------------------
[2015-08-23 17:42:55] nikic@php.net

Here we go: https://3v4l.org/KiLqN

class A { public $b; }
$a = new A;
var_dump($a); // force properties HT
unset($a->b);
var_dump(serialize($a));

Results in "O:1:"A":1:{}" while it should be "O:1:"A":0:{}".

------------------------------------------------------------------------
[2015-08-23 17:40:53] nikic@php.net

If I were to venture a guess, it's because there is an object with a dynamic properties HT,
which contains and INDIRECT to and UNDEF. The hashtable count will then include the UNDEF, but it
will not be actually present in the properties list.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=70187


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


Thread (13 messages)

« previous php.bugs (#195522) next »