ZF-7762: Patch against today's svn (r17952) to fix (De)serialization when str* functions overloaded via mbstring.func_overload in php.ini
Description
Overloading str* functions via the mbstring.func_overload php.ini setting causes Zend_Amf_Exceptions due to using strlen and substr on binary data.
PHP Fatal error: Uncaught exception 'Zend_Amf_Exception' with message 'Buffer underrun at needle position: 301 while requesting length: 9' in /usr/share/pear/Zend-1.11.10/Amf/Util/BinaryStream.php:98\nStack trace:\n#0 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf3/Deserializer.php(194): Zend_Amf_Util_BinaryStream->readBytes(9)\n#1 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf3/Deserializer.php(97): Zend_Amf_Parse_Amf3_Deserializer->readString()\n#2 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf3/Deserializer.php(382): Zend_Amf_Parse_Amf3_Deserializer->readTypeMarker()\n#3 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf3/Deserializer.php(103): Zend_Amf_Parse_Amf3_Deserializer->readObject()\n#4 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf0/Deserializer.php(293): Zend_Amf_Parse_Amf3_Deserializer->readTypeMarker()\n#5 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf0/Deserializer.php(130): Zend_Amf_Parse_Amf0_Deserializer->readAmf3TypeMarker()\n#6 /usr/share/pear/Zend-1.11.10/Amf/Parse/Amf0/Deserializer.php(217): Zend_Amf_Parse_Amf0_Deserializer->readTypeMarke in /usr/share/pear/Zend-1.11.10/Amf/Request.php on line 176
The attached patch changes the necessary strlen and substr uses to use mb_strlen and mb_substr with '8bit' encoding to use bytes rather than multi-byte characters. We've been running this patch on our production site since version 1.9.3 and our flex projects works with mbstring.func_overload = 7 and mbstring.func_overload = 0.
Comments
Posted by Mark Reidenbach (mreiden) on 2009-09-02T12:40:08.000+0000
Patch for when str* functions are overwritten using mbstring.func_overload php.ini setting.
Posted by Mark Reidenbach (mreiden) on 2011-08-30T15:11:54.000+0000
This is the patch updated against ZF version 1.11.10. I do not know why I can't upload it as an attachment.
Posted by Rob Allen (rob) on 2012-12-22T21:29:42.000+0000
Fixed on trunk (25178) and release-1.12 (25179)