From 448120b665ea6f365a5b6e4a0d4ea1a44a884a8b Mon Sep 17 00:00:00 2001 From: djmaze Date: Wed, 1 Sep 2021 16:08:44 +0200 Subject: [PATCH] HighestModSeq & Uidvalidity are integers according to IMAP RFC --- .../MailSo/Imap/FolderInformation.php | 32 +++++++--------- .../MailSo/Imap/ResponseCollection.php | 22 ++++------- .../app/libraries/MailSo/Mail/MailClient.php | 38 +++++++++---------- 3 files changed, 39 insertions(+), 53 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/FolderInformation.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/FolderInformation.php index 93570c117..e682417db 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/FolderInformation.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/FolderInformation.php @@ -30,55 +30,51 @@ class FolderInformation /** * @var array */ - public $Flags; + public $Flags = array(); /** * @var array */ - public $PermanentFlags; + public $PermanentFlags = array(); /** * @var int */ - public $Exists; + public $Exists = null; /** * @var int */ - public $Recent; + public $Recent = null; /** - * @var string + * rfc3501 2.3.1.1 + * A 32-bit value + * @var int */ - public $Uidvalidity; + public $Uidvalidity = null; /** * @var int */ - public $Unread; + public $Unread = null; /** * @var string */ - public $Uidnext; + public $Uidnext = null; /** - * @var string + * rfc4551 + * 1*DIGIT Positive unsigned 64-bit integer + * @var int */ - public $HighestModSeq; + public $HighestModSeq = null; function __construct(string $sFolderName, bool $bIsWritable) { $this->FolderName = $sFolderName; $this->IsWritable = $bIsWritable; - $this->Exists = null; - $this->Recent = null; - $this->Flags = array(); - $this->PermanentFlags = array(); - - $this->Unread = null; - $this->Uidnext = null; - $this->HighestModSeq = null; } public function IsFlagSupported(string $sFlag) : bool diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ResponseCollection.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ResponseCollection.php index fa44faad3..63f04b034 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ResponseCollection.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ResponseCollection.php @@ -300,32 +300,26 @@ class ResponseCollection extends \MailSo\Base\Collection } if (is_array($oResponse->OptionalResponse) && \count($oResponse->OptionalResponse) > 1) { - if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0] && - is_array($oResponse->OptionalResponse[1])) + if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0] + && is_array($oResponse->OptionalResponse[1])) { $oResult->PermanentFlags = $oResponse->OptionalResponse[1]; } - else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0] && - isset($oResponse->OptionalResponse[1])) + else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0]) { - $oResult->Uidvalidity = $oResponse->OptionalResponse[1]; + $oResult->Uidvalidity = (int) $oResponse->OptionalResponse[1]; } - else if ('UNSEEN' === $oResponse->OptionalResponse[0] && - isset($oResponse->OptionalResponse[1]) && - is_numeric($oResponse->OptionalResponse[1])) + else if ('UNSEEN' === $oResponse->OptionalResponse[0]) { $oResult->Unread = (int) $oResponse->OptionalResponse[1]; } - else if ('UIDNEXT' === $oResponse->OptionalResponse[0] && - isset($oResponse->OptionalResponse[1])) + else if ('UIDNEXT' === $oResponse->OptionalResponse[0]) { $oResult->Uidnext = $oResponse->OptionalResponse[1]; } - else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0] && - isset($oResponse->OptionalResponse[1]) && - \is_numeric($oResponse->OptionalResponse[1])) + else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0]) { - $oResult->HighestModSeq = \trim($oResponse->OptionalResponse[1]); + $oResult->HighestModSeq = (int) $oResponse->OptionalResponse[1]; } } 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 1ab0ee534..99a1c8c6a 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 @@ -556,7 +556,7 @@ class MailClient } protected function initFolderValues(string $sFolderName, int &$iCount, int &$iUnseenCount, - string &$sUidNext, string &$sHighestModSeq = '') : void + string &$sUidNext, int &$iHighestModSeq = 0) : void { $aTypes = array( \MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES, @@ -571,17 +571,13 @@ class MailClient $aFolderStatus = $this->oImapClient->FolderStatus($sFolderName, $aTypes); - $iCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES]) - ? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] : 0; + $iCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] ?? 0; - $iUnseenCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN]) - ? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] : 0; + $iUnseenCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] ?? 0; - $sUidNext = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT]) - ? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] : '0'; + $sUidNext = (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] ?? '0'; - $sHighestModSeq = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ]) - ? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] : ''; + $iHighestModSeq = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] ?? 0; } public function GenerateImapClientHash() : string @@ -593,11 +589,11 @@ class MailClient ); } - public function GenerateFolderHash(string $sFolder, int $iCount, int $iUnseenCount, string $sUidNext, string $sHighestModSeq = '') : string + public function GenerateFolderHash(string $sFolder, int $iCount, int $iUnseenCount, string $sUidNext, int $iHighestModSeq = 0) : string { $iUnseenCount = 0; // unneccessery return \md5('FolderHash/'.$sFolder.'-'.$iCount.'-'.$iUnseenCount.'-'.$sUidNext.'-'. - $sHighestModSeq.'-'.$this->GenerateImapClientHash().'-'. + $iHighestModSeq.'-'.$this->GenerateImapClientHash().'-'. \MailSo\Config::$MessageListPermanentFilter ); } @@ -697,18 +693,18 @@ class MailClient $iCount = 0; $iUnseenCount = 0; $sUidNext = '0'; - $sHighestModSeq = ''; + $iHighestModSeq = 0; - $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); + $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq); $aResult = array( 'Folder' => $sFolderName, - 'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq), + 'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq), 'MessageCount' => $iCount, 'MessageUnseenCount' => $iUnseenCount, 'UidNext' => (int) $sUidNext, 'Flags' => $aFlags, - 'HighestModSeq' => $sHighestModSeq, + 'HighestModSeq' => $iHighestModSeq, 'NewMessages' => 'INBOX' === $sFolderName && \MailSo\Config::$CheckNewMessages ? $this->getFolderNextMessageInformation($sFolderName, $sPrevUidNext, $sUidNext) : array() ); @@ -726,11 +722,11 @@ class MailClient $iCount = 0; $iUnseenCount = 0; $sUidNext = '0'; - $sHighestModSeq = ''; + $iHighestModSeq = 0; - $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); + $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq); - return $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); + return $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq); } /** @@ -1600,7 +1596,7 @@ class MailClient $iMessageRealCount = 0; $iMessageUnseenCount = 0; $sUidNext = '0'; - $sHighestModSeq = ''; + $iHighestModSeq = 0; $bUseSortIfSupported = $bUseSortIfSupported && $this->oImapClient->IsSupported('SORT'); @@ -1617,7 +1613,7 @@ class MailClient $oCacher = null; } - $this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq); + $this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq); if ($bUseFilter) { @@ -1625,7 +1621,7 @@ class MailClient } $oMessageCollection->FolderHash = $this->GenerateFolderHash( - $sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq); + $sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq); $oMessageCollection->UidNext = $sUidNext;