[dev] Horde-Kolab-Storage - unserialize issue

Jan Schneider jan at horde.org
Sun Aug 17 13:01:06 UTC 2014


Zitat von Remi Collet <remi at fedoraproject.org>:

> Hi,
>
> With PHP 5.6.0 test suite fails :
>
> There were 51 errors:
>
> 1) Horde_Kolab_Storage_Unit_Data_BaseTest::testDefaultType
> Erroneous data format for unserializing 'Horde_Mime_Part'
>
> /dev/shm/BUILD/php-horde-Horde-Kolab-Storage-2.1.0/Horde_Kolab_Storage-2.1.0/lib/Horde/Kolab/Storage/Driver/Mock/Data.php:103
> ...
>
>
> Digging in this issue.
>
> First: you should be awarer that "serialized" data is a very bad
> pratice for storage... no warranty to work accross various versions.
>
> See the recent discussion about the "unserialize" regression/issue...
>
> The test/Horde/Kolab/Storage/fixtures/event.struct contains:
> O:15:"Horde_Mime_Part":...
>
> Which is wrong, as Horde_Mime_Part implements Serializable.
> (should be C:... with PHP > 5.4)
>
>
> Proof.
>
> <?php
> require 'Horde/Autoloader/Default.php';
> $txt = file_get_contents("event.struct");
> var_dump($ser = base64_decode($txt));
> $obj = unserialize($ser);
> var_dump($obj);
> var_dump($ser = serialize($obj));
>
> PHP Fatal error:  Call to a member function getArrayCopy() on a
> non-object in /usr/share/pear/Horde/Mime/Part.php on line 2321
>
> Analyse: with "O:..;" the unserialize method is not used.
> So the object is create, but without the correct unserializer.
>
>
> Fixing the fixture file.
>
> I add in the Horde_Mime_Part the fixit method
>
>    public function fixit()
>    {
>       if (is_array($this->_contentTypeParams)) {
>          echo "Fix\n";
>          $this->_contentTypeParams =
>     new Horde_Support_CaseInsensitiveArray($this->_contentTypeParams);
>       }
>       foreach($this->_parts as $i => $p) {
>           echo "Part $i\n";
>           $p->fixit();
>       }
>    }
>
> This allow to fix the unserialized object,
> and then to serialize it and save it.
>
> Then the new fixture file contains:
> C:15:"Horde_Mime_Part":978:{a:20:{i:0;i:1
>
> Then this file can be used with PHP 5.4, 5.5 and 5.6.
>
>
> This patch add this "fixed" fixture file, and use it.
> https://raw.githubusercontent.com/remicollet/remirepo/a8cb881f1ae02264496ca76c6287a4652a52e8c8/php/horde/php-horde-Horde-Kolab-Storage/Horde_Kolab_Storage-php54.patch
>
>
> Test suite pass with php 5.3, 5.4, 5.5, 5.6
>
>
> Can you please review it ?
>
> Regards,
> Remi.
>
>
> P.S. resent as it seems previous was refused
> (because of attached patch ?)

This has been fixed in Git already.

-- 
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject



More information about the dev mailing list