From 8b4674b87f95e03b6675db376530524f4b138c01 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Mon, 8 May 2023 14:20:04 +0200 Subject: [PATCH] MultipleStreamWriter() to single WriteStream() --- .../0.0.0/app/libraries/MailSo/Base/Utils.php | 70 ++++++++----------- .../MailSo/Imap/Commands/Messages.php | 2 +- .../RainLoop/Actions/Attachments.php | 9 +-- .../libraries/RainLoop/Actions/Messages.php | 18 ++--- .../RainLoop/Providers/Files/FileStorage.php | 8 +-- 5 files changed, 48 insertions(+), 59 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php index 7f439d1a0..fd132d855 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php @@ -609,52 +609,44 @@ abstract class Utils /** * @param resource $rRead + * @param resource $rWrite */ - public static function MultipleStreamWriter($rRead, array $aWrite, int $iBufferLen = 8192, bool $bResetTimeLimit = true, bool $bFixCrLf = false, bool $bRewindOnComplete = false) : int + public static function WriteStream($rRead, $rWrite, int $iBufferLen = 8192, bool $bFixCrLf = false, bool $bRewindOnComplete = false) : int { - $mResult = false; - if (\is_resource($rRead) && \count($aWrite)) { - $mResult = 0; - while (!\feof($rRead)) { - $sBuffer = \fread($rRead, $iBufferLen); - if (false === $sBuffer) { - $mResult = false; - break; - } - - if ('' === $sBuffer) { - break; - } - - if ($bFixCrLf) { - $sBuffer = \str_replace("\n", "\r\n", \str_replace("\r", '', $sBuffer)); - } - - $mResult += \strlen($sBuffer); - - foreach ($aWrite as $rWriteStream) { - $mWriteResult = \fwrite($rWriteStream, $sBuffer); - if (false === $mWriteResult) { - $mResult = false; - break 2; - } - } - - if ($bResetTimeLimit) { - static::ResetTimeLimit(); - } - } + if (!\is_resource($rRead) || !\is_resource($rWrite)) { + return -1; } - if ($mResult && $bRewindOnComplete) { - foreach ($aWrite as $rWriteStream) { - if (\is_resource($rWriteStream)) { - \rewind($rWriteStream); - } + $iResult = 0; + + while (!\feof($rRead)) { + $sBuffer = \fread($rRead, $iBufferLen); + if (false === $sBuffer) { + return -1; } + + if ('' === $sBuffer) { + break; + } + + if ($bFixCrLf) { + $sBuffer = \str_replace("\n", "\r\n", \str_replace("\r", '', $sBuffer)); + } + + $iResult += \strlen($sBuffer); + + if (false === \fwrite($rWrite, $sBuffer)) { + return -1; + } + + static::ResetTimeLimit(); } - return $mResult; + if ($bRewindOnComplete) { + \rewind($rWrite); + } + + return $iResult; } public static function Utf7ModifiedToUtf8(string $sStr) : string diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php index fbeab2478..d83fb5ff4 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php @@ -173,7 +173,7 @@ trait Messages { $this->writeLog('Write to connection stream', \LOG_INFO); - \MailSo\Base\Utils::MultipleStreamWriter($rMessageStream, array($this->ConnectionResource())); + \MailSo\Base\Utils::WriteStream($rMessageStream, $this->ConnectionResource()); $this->sendRaw(''); $oResponses = $this->getResponse(); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Attachments.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Attachments.php index 387a97b59..8647b6a0d 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Attachments.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Attachments.php @@ -152,15 +152,12 @@ trait Attachments unset($sContentType, $sFileName, $sMimeIndex); - if (\is_resource($rResource)) - { + if (\is_resource($rResource)) { $sHash = \MailSo\Base\Utils::Sha1Rand($sFileNameIn.'~'.$sContentTypeIn); $rTempResource = $oFileProvider->GetFile($oAccount, $sHash, 'wb+'); - if (\is_resource($rTempResource)) - { - if (false !== \MailSo\Base\Utils::MultipleStreamWriter($rResource, array($rTempResource))) - { + if (\is_resource($rTempResource)) { + if (-1 < \MailSo\Base\Utils::WriteStream($rResource, $rTempResource)) { $sResultHash = $sHash; } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php index 7744164f6..4df2b476b 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php @@ -113,8 +113,7 @@ trait Messages if ($oMessage) { $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); - $iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( - $oMessage->ToStream(false), array($rMessageStream), 8192, true, true); + $iMessageStreamSize = \MailSo\Base\Utils::WriteStream($oMessage->ToStream(false), $rMessageStream, 8192, true); if (false !== $iMessageStreamSize) { $sMessageId = $oMessage->MessageId(); @@ -168,8 +167,9 @@ trait Messages if ($oMessage) { $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); - $iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( - $oMessage->ToStream(true), array($rMessageStream), 8192, true, true, true); + $iMessageStreamSize = \MailSo\Base\Utils::WriteStream( + $oMessage->ToStream(true), $rMessageStream, 8192, true, true + ); if (false !== $iMessageStreamSize) { $bDsn = !empty($this->GetActionParam('dsn', 0)); @@ -217,8 +217,9 @@ trait Messages } else { $rAppendMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); - $iAppendMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( - $oMessage->ToStream(false), array($rAppendMessageStream), 8192, true, true, true); + $iAppendMessageStreamSize = \MailSo\Base\Utils::WriteStream( + $oMessage->ToStream(false), $rAppendMessageStream, 8192, true, true + ); $this->Plugins()->RunHook('filter.send-message-stream', array($oAccount, &$rAppendMessageStream, &$iAppendMessageStreamSize)); @@ -317,8 +318,9 @@ trait Messages if ($oMessage) { $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); - $iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( - $oMessage->ToStream(true), array($rMessageStream), 8192, true, true, true); + $iMessageStreamSize = \MailSo\Base\Utils::WriteStream( + $oMessage->ToStream(true), $rMessageStream, 8192, true, true + ); if (false !== $iMessageStreamSize) { $this->smtpSendMessage($oAccount, $oMessage, $rMessageStream, $iMessageStreamSize, false); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php index c0cbb0f0a..c781d06a8 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Files/FileStorage.php @@ -28,12 +28,10 @@ class FileStorage implements \RainLoop\Providers\Files\IFiles public function PutFile(\RainLoop\Model\Account $oAccount, string $sKey, /*resource*/ $rSource) : bool { $bResult = false; - if ($rSource) - { + if ($rSource) { $rOpenOutput = \fopen($this->generateFullFileName($oAccount, $sKey, true), 'w+b'); - if ($rOpenOutput) - { - $bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rSource, array($rOpenOutput))); + if ($rOpenOutput) { + $bResult = (false !== \MailSo\Base\Utils::WriteStream($rSource, $rOpenOutput)); \fclose($rOpenOutput); } }