Commit c72587e2 authored by mku's avatar mku

ZP-150 #comment Inline images can not be downloaded with Windows Phone 7.5 or...

ZP-150 #comment Inline images can not be downloaded with Windows Phone 7.5 or Samsung Galaxy S2, changed the padding handling #time 30m

git-svn-id: https://z-push.org/svn/z-push/trunk@1417 b7dd7b3b-3a3c-0410-9da9-bee62a6cc5b5
parent 1f6ba8b4
...@@ -69,12 +69,10 @@ class padding_filter extends php_user_filter { ...@@ -69,12 +69,10 @@ class padding_filter extends php_user_filter {
*/ */
function filter($in, $out, &$consumed, $closing) { function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) { while ($bucket = stream_bucket_make_writeable($in)) {
$padding = $this->padding - ($bucket->datalen % $this->padding); if ($this->padding != 0 && $bucket->datalen < 8192) {
if ($bucket->datalen < 8192 && $padding != $this->padding) {
$bucket->data .= str_pad($bucket->data, $padding, 0x0); $bucket->data .= str_pad($bucket->data, $padding, 0x0);
} }
$consumed += ($this->padding != 0 && $bucket->datalen < 8192) ? ($bucket->datalen + $padding) : $bucket->datalen;
$consumed += ($padding != $this->padding) ? ($bucket->datalen + $padding) : $bucket->datalen;
stream_bucket_append($out, $bucket); stream_bucket_append($out, $bucket);
} }
return PSFS_PASS_ON; return PSFS_PASS_ON;
......
...@@ -310,7 +310,12 @@ class Streamer implements Serializable { ...@@ -310,7 +310,12 @@ class Streamer implements Serializable {
else if(isset($map[self::STREAMER_TYPE]) && $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_STREAM) { else if(isset($map[self::STREAMER_TYPE]) && $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_STREAM) {
//encode stream with base64 //encode stream with base64
$stream = $this->$map[self::STREAMER_VAR]; $stream = $this->$map[self::STREAMER_VAR];
$paddingfilter = stream_filter_append($stream, 'padding.3'); $stat = fstat($stream);
// the padding size muss be calculated for the entire stream,
// the base64 filter seems to process 8192 byte chunks correctly itself
$padding = (isset($stat['size']) && $stat['size'] > 8192) ? ($stat['size'] % 3) : 0;
$paddingfilter = stream_filter_append($stream, 'padding.'.$padding);
$base64filter = stream_filter_append($stream, 'convert.base64-encode'); $base64filter = stream_filter_append($stream, 'convert.base64-encode');
$d = ""; $d = "";
while (!feof($stream)) { while (!feof($stream)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment