From 80f5373e9e757ff400906e37e372324f73601bc4 Mon Sep 17 00:00:00 2001 From: djmaze <> Date: Fri, 7 Jan 2022 17:16:53 +0100 Subject: [PATCH] Cleanup StreamWrappers and no need for WhitespaceFilter --- .../MailSo/Base/StreamWrappers/Binary.php | 39 +++++-------------- .../MailSo/Base/StreamWrappers/Literal.php | 7 +--- .../MailSo/Base/StreamWrappers/SubStreams.php | 7 +--- .../MailSo/Base/StreamWrappers/TempFile.php | 12 +----- .../MailSo/Base/StreamWrappers/Test.php | 7 +--- .../app/libraries/MailSo/Mail/MailClient.php | 28 ++++++------- 6 files changed, 28 insertions(+), 72 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php index 281421349..f3d754302 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php @@ -12,19 +12,6 @@ namespace MailSo\Base\StreamWrappers; -class WhitespaceFilter extends \php_user_filter -{ - function filter($in, $out, &$consumed, $closing) - { - while ($bucket = \stream_bucket_make_writeable($in)) { - $bucket->data = \str_replace(array("\r", "\n", "\t"), '', $bucket->data); - $consumed += $bucket->datalen; - \stream_bucket_append($out, $bucket); - } - return PSFS_PASS_ON; - } -} - /** * @category MailSo * @package Base @@ -149,11 +136,6 @@ class Binary public static function CreateStream($rStream, string $sUtilsDecodeOrEncodeFunctionName = null, string $sFromEncoding = null, string $sToEncoding = null) { - if (!\in_array(self::STREAM_NAME, \stream_get_wrappers())) - { - \stream_wrapper_register(self::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Binary'); - } - if (null === $sUtilsDecodeOrEncodeFunctionName || !\strlen($sUtilsDecodeOrEncodeFunctionName)) { $sUtilsDecodeOrEncodeFunctionName = 'InlineNullDecode'; @@ -167,23 +149,18 @@ class Binary $sUtilsDecodeOrEncodeFunctionName = 'InlineConvertDecode'; } - if (\in_array($sUtilsDecodeOrEncodeFunctionName, array( - 'convert.base64-decode', 'convert.base64-encode', - 'convert.quoted-printable-decode', 'convert.quoted-printable-encode' - ))) + if (\in_array($sUtilsDecodeOrEncodeFunctionName, ['convert.base64-decode', 'convert.quoted-printable-decode'])) + { + $rFilter = \stream_filter_append($rStream, $sUtilsDecodeOrEncodeFunctionName); + return \is_resource($rFilter) ? $rStream : false; + } + else if (\in_array($sUtilsDecodeOrEncodeFunctionName, ['convert.base64-encode', 'convert.quoted-printable-encode'])) { - if ('convert.base64-decode' === $sUtilsDecodeOrEncodeFunctionName) { - \stream_filter_register('mailsowhitespace', '\\MailSo\\Base\\StreamWrappers\\WhitespaceFilter'); - if (!\stream_filter_append($rStream, 'mailsowhitespace')) { - return false; - } - } $rFilter = \stream_filter_append($rStream, $sUtilsDecodeOrEncodeFunctionName, - STREAM_FILTER_READ, array( + \STREAM_FILTER_READ, array( 'line-length' => \MailSo\Mime\Enumerations\Constants::LINE_LENGTH, 'line-break-chars' => \MailSo\Mime\Enumerations\Constants::CRLF )); - return \is_resource($rFilter) ? $rStream : false; } @@ -333,3 +310,5 @@ class Binary return false; } } + +\stream_wrapper_register(Binary::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Binary'); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php index f351f4995..9d692059d 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php @@ -50,11 +50,6 @@ class Literal */ public static function CreateStream($rStream, int $iLiteralLen) { - if (!\in_array(self::STREAM_NAME, stream_get_wrappers())) - { - \stream_wrapper_register(self::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Literal'); - } - $sHashName = \md5(\microtime(true).\rand(1000, 9999)); self::$aStreams[$sHashName] = array($rStream, $iLiteralLen); @@ -163,3 +158,5 @@ class Literal return false; } } + +\stream_wrapper_register(Literal::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Literal'); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php index a7c05da79..4e6fcd437 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php @@ -58,11 +58,6 @@ class SubStreams */ public static function CreateStream(array $aSubStreams) { - if (!\in_array(self::STREAM_NAME, \stream_get_wrappers())) - { - \stream_wrapper_register(self::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\SubStreams'); - } - $sHashName = \MailSo\Base\Utils::Sha1Rand(); self::$aStreams[$sHashName] = \array_map(function ($mItem) { @@ -219,3 +214,5 @@ class SubStreams return false; } } + +\stream_wrapper_register(SubStreams::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\SubStreams'); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php index 28853171f..04852c23f 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php @@ -33,21 +33,11 @@ class TempFile */ private $rSream; - public static function Reg() - { - if (!in_array(self::STREAM_NAME, stream_get_wrappers())) - { - stream_wrapper_register(self::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\TempFile'); - } - } - /** * @return resource|bool */ public static function CreateStream(string $sHash, string &$sFileName = '') { - self::Reg(); - $sFileName = self::STREAM_NAME.'://'.$sHash; return fopen($sFileName, 'r+b'); } @@ -121,3 +111,5 @@ class TempFile return fseek($this->rSream, $iOffset, $iWhence); } } + +\stream_wrapper_register(TempFile::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\TempFile'); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php index 5eceaccee..75d8e4439 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php @@ -39,11 +39,6 @@ class Test */ public static function CreateStream(string $sRawResponse) { - if (!\in_array(self::STREAM_NAME, \stream_get_wrappers())) - { - \stream_wrapper_register(self::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Test'); - } - $sHashName = \md5(\microtime(true).\rand(1000, 9999)); $rConnect = \fopen('php://memory', 'r+b'); @@ -106,3 +101,5 @@ class Test return false; } } + +\stream_wrapper_register(Test::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Test'); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php index f8ff82537..2563a6172 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php @@ -226,7 +226,7 @@ class MailClient $sFileName = ''; $sContentType = ''; - $sMailEncodingName = ''; + $sMailEncoding = ''; $sMimeIndex = trim($sMimeIndex); $aFetchResponse = $this->oImapClient->Fetch(array( @@ -250,22 +250,19 @@ class MailClient if (\strlen($sMimeIndex)) { $sFileName = $oHeaders->ParameterValue(MimeHeader::CONTENT_DISPOSITION, MimeParameter::FILENAME); - - if (!\strlen($sFileName)) - { + if (!\strlen($sFileName)) { $sFileName = $oHeaders->ParameterValue(MimeHeader::CONTENT_TYPE, MimeParameter::NAME); } - $sMailEncodingName = $oHeaders->ValueByName(MimeHeader::CONTENT_TRANSFER_ENCODING); + $sMailEncoding = \MailSo\Base\StreamWrappers\Binary::GetInlineDecodeOrEncodeFunctionName( + $oHeaders->ValueByName(MimeHeader::CONTENT_TRANSFER_ENCODING) + ); $sContentType = $oHeaders->ValueByName(MimeHeader::CONTENT_TYPE); } else { - $sSubject = $oHeaders->ValueByName(MimeHeader::SUBJECT); - - $sFileName = \strlen($sSubject) ? $sSubject : (string) $iIndex; - $sFileName .= '.eml'; + $sFileName = ($oHeaders->ValueByName(MimeHeader::SUBJECT) ?: $iIndex) . '.eml'; $sContentType = 'message/rfc822'; } @@ -276,17 +273,14 @@ class MailClient // Push in the aFetchCallbacks array and then called by \MailSo\Imap\Traits\ResponseParser::partialResponseLiteralCallbackCallable array( FetchType::BODY_PEEK.'['.$sMimeIndex.']', - function ($sParent, $sLiteralAtomUpperCase, $rImapLiteralStream) use ($mCallback, $sMimeIndex, $sMailEncodingName, $sContentType, $sFileName) + function ($sParent, $sLiteralAtomUpperCase, $rImapLiteralStream) use ($mCallback, $sMimeIndex, $sMailEncoding, $sContentType, $sFileName) { if (\strlen($sLiteralAtomUpperCase) && \is_resource($rImapLiteralStream) && 'FETCH' === $sParent) { - $rMessageMimeIndexStream = \strlen($sMailEncodingName) - ? \MailSo\Base\StreamWrappers\Binary::CreateStream($rImapLiteralStream, - \MailSo\Base\StreamWrappers\Binary::GetInlineDecodeOrEncodeFunctionName( - $sMailEncodingName, true)) - : $rImapLiteralStream; - - $mCallback($rMessageMimeIndexStream, $sContentType, $sFileName, $sMimeIndex); + $mCallback($sMailEncoding + ? \MailSo\Base\StreamWrappers\Binary::CreateStream($rImapLiteralStream, $sMailEncoding) + : $rImapLiteralStream, + $sContentType, $sFileName, $sMimeIndex); } } )), $iIndex, $bIndexIsUid);