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