From 03b1a5521f491de7c317f9e38146fc2a414f3897 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Thu, 21 Apr 2022 16:43:02 +0200 Subject: [PATCH] GPG allow TEMP stream_select --- .../MailSo/Base/StreamWrappers/Binary.php | 5 + .../MailSo/Base/StreamWrappers/TempFile.php | 24 ++-- .../MailSo/Base/StreamWrappers/Test.php | 105 ------------------ .../libraries/RainLoop/Actions/Messages.php | 2 +- .../app/libraries/snappymail/pgp/gpg.php | 2 +- 5 files changed, 19 insertions(+), 119 deletions(-) delete mode 100644 snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php 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 cec59ad61..397ad5ea5 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 @@ -170,6 +170,11 @@ class Binary return \fopen(self::STREAM_NAME.'://'.$sHashName, 'rb'); } + public function stream_cast(int $cast_as) /*: resource*/ + { + return false; // $this->rStream; + } + public function stream_open(string $sPath) : bool { $this->iPos = 0; 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 a138bd403..6991b0439 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 @@ -31,7 +31,7 @@ class TempFile /** * @var resource */ - private $rSream; + private $rStream; /** * @return resource|bool @@ -59,14 +59,14 @@ class TempFile if (isset(self::$aStreams[$sHashName]) && \is_resource(self::$aStreams[$sHashName])) { - $this->rSream = self::$aStreams[$sHashName]; - \fseek($this->rSream, 0); + $this->rStream = self::$aStreams[$sHashName]; + \fseek($this->rStream, 0); $bResult = true; } else { - $this->rSream = \fopen('php://temp', 'r+b'); - self::$aStreams[$sHashName] = $this->rSream; + $this->rStream = \fopen('php://temp', 'r+b'); + self::$aStreams[$sHashName] = $this->rStream; $bResult = true; } @@ -82,37 +82,37 @@ class TempFile public function stream_flush() : bool { - return \fflush($this->rSream); + return \fflush($this->rStream); } public function stream_read(int $iLen) : string { - return \fread($this->rSream, $iLen); + return \fread($this->rStream, $iLen); } public function stream_write(string $sInputString) : int { - return \fwrite($this->rSream, $sInputString); + return \fwrite($this->rStream, $sInputString); } public function stream_tell() : int { - return \ftell($this->rSream); + return \ftell($this->rStream); } public function stream_eof() : bool { - return \feof($this->rSream); + return \feof($this->rStream); } public function stream_stat() : array { - return \fstat($this->rSream); + return \fstat($this->rStream); } public function stream_seek(int $iOffset, int $iWhence = SEEK_SET) : int { - return \fseek($this->rSream, $iOffset, $iWhence); + return \fseek($this->rStream, $iOffset, $iWhence); } } 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 deleted file mode 100644 index 75d8e4439..000000000 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/StreamWrappers/Test.php +++ /dev/null @@ -1,105 +0,0 @@ -rReadSream = self::$aStreams[$sHashName]; - $bResult = true; - } - } - - return $bResult; - } - - public function stream_read(int $iCount) : string - { - return \fread($this->rReadSream, $iCount); - } - - public function stream_write(string $sInputString) : int - { - return \strlen($sInputString); - } - - public function stream_tell() : int - { - return \ftell($this->rReadSream); - } - - public function stream_eof() : bool - { - return \feof($this->rReadSream); - } - - public function stream_stat() : array - { - return \fstat($this->rReadSream); - } - - public function stream_seek() : bool - { - return false; - } -} - -\stream_wrapper_register(Test::STREAM_NAME, '\\MailSo\\Base\\StreamWrappers\\Test'); 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 853ffb54b..15db3b7da 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 @@ -1288,7 +1288,6 @@ trait Messages if ($sFingerprint) { $GPG = $this->GnuPG(); $oBody = $oMessage->GetRootPart(); - $fp = \fopen('php://temp', 'r+b'); $resource = $oBody->ToStream(); $oBody->Body = null; $oBody->SubParts->Clear(); @@ -1296,6 +1295,7 @@ trait Messages $oMessage->Attachments()->Clear(); \MailSo\Base\StreamFilters\LineEndings::appendTo($resource); + $fp = \fopen('php://temp', 'r+b'); \stream_copy_to_stream($resource, $fp); $GPG->addSignKey($sFingerprint, $sPassphrase); $GPG->setsignmode(GNUPG_SIG_MODE_DETACH); diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/pgp/gpg.php b/snappymail/v/0.0.0/app/libraries/snappymail/pgp/gpg.php index 7647c1b49..9755d85da 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/pgp/gpg.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/pgp/gpg.php @@ -908,7 +908,7 @@ class GPG // https://github.com/the-djmaze/snappymail/issues/331 // $meta['stream_type'] == MEMORY or $meta['wrapper_data'] == MailSo\Base\StreamWrappers\Literal $meta = \stream_get_meta_data($input); - if ('STDIO' != $meta['stream_type']) { + if (!\in_array($meta['stream_type'], ['STDIO', 'TEMP'])) { /* $fp = \fopen('php://temp'); \stream_copy_to_stream($input, $fp);