[wp-trac] [WordPress Trac] #25061: Plugin/Theme/Core Updates Fail When Curl Used and String Function Overloading Configured

WordPress Trac noreply at wordpress.org
Sat Aug 17 15:38:57 UTC 2013


#25061: Plugin/Theme/Core Updates Fail When Curl Used and String Function
Overloading Configured
--------------------------+-----------------------------
 Reporter:  DrProtocols   |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  HTTP          |    Version:  3.6
 Severity:  normal        |   Keywords:
--------------------------+-----------------------------
 When downloading an update in the form of a zip file the update
 consistently fails with a failure to find the end of central dir record
 when unpack is attempted. For example:

 Downloading update from
 http://downloads.wordpress.org/plugin/addthis.3.5.1.zip…

 Unpacking the update…

 The package could not be installed. PCLZIP_ERR_BAD_FORMAT (-10) : Unable
 to find End of Central Dir Record signature

 The download is using curl.

 To reproduce add the following to PHP configuration:

 mbstring.func_overload = 2;

 which enables str*() function overloading.

 The problem is caused by the new stream_body() function in wp-includes
 /class-http.php which uses the strlen() function to simply return the
 length of data written but when overloaded with the multi-byte function
 the count is almost certainly incorrect when the data is binary data such
 as part of a zip file download. Because for a chunk the function returns a
 count different from that expected by curl it terminates the transfer as
 "completed" at that point which appears as a successful outcome. But of
 course the downloaded file is incomplete so when pclzip tries to unzip it
 the above failure results.

 Attached are two files:
 stream_body_problem.txt shows a _working_ case where the "written" value
 is the value returned by fwrite() against the "string length" value which
 is the value according to strlen()
 stream_body_hack.txt shows a hacked function that handles the case where
 function overloading is enabled (not saying this is the way to do it but
 just to illustrate)

--
Ticket URL: <http://core.trac.wordpress.org/ticket/25061>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list