diff --git a/plugins/demo-account/storage.php b/plugins/demo-account/storage.php index af4634530..e387d8fbc 100644 --- a/plugins/demo-account/storage.php +++ b/plugins/demo-account/storage.php @@ -31,7 +31,7 @@ class DemoStorage extends \RainLoop\Providers\Storage\FileStorage } } - $sDataPath .= '/' . \RainLoop\Utils::fixName(\RainLoop\Utils::GetConnectionToken()); + $sDataPath .= '/' . \MailSo\Base\Utils::SecureFileName(\RainLoop\Utils::GetConnectionToken()); if (!\is_dir($sDataPath) && \mkdir($sDataPath, 0700, true)) { \file_put_contents("{$sDataPath}/settings",'{"RemoveColors":true,"ListInlineAttachments":true}'); if (\mkdir($sDataPath.'/.gnupg/private-keys-v1.d', 0700, true)) { 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 904d1600c..a1624b00f 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 @@ -490,11 +490,13 @@ abstract class Utils return false; } - # Replace ampersand, spaces and reserved characters (based on Win95 VFAT) - # en.wikipedia.org/wiki/Filename#Reserved_characters_and_words + /** + * Replace control characters, ampersand and reserved characters (based on Win95 VFAT) + * en.wikipedia.org/wiki/Filename#Reserved_characters_and_words + */ public static function SecureFileName(string $sFileName) : string { - return \preg_replace('#[|\\\\?*<":>+\\[\\]/&\\s\\pC]#su', '-', $sFileName); + return \preg_replace('#[|\\\\?*<":>+\\[\\]/&\\pC]#su', '-', $sFileName); } public static function Trim(string $sValue) : string 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 39aaaad16..c0cbb0f0a 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 @@ -144,9 +144,9 @@ class FileStorage implements \RainLoop\Providers\Files\IFiles $aEmail = \explode('@', $sEmail ?: 'nobody@unknown.tld'); $sDomain = \trim(1 < \count($aEmail) ? \array_pop($aEmail) : ''); $sFilePath = $this->sDataPath - .'/'.\RainLoop\Utils::fixName($sDomain ?: 'unknown.tld') - .'/'.\RainLoop\Utils::fixName(\implode('@', $aEmail) ?: '.unknown') - .($sSubEmail ? '/'.\RainLoop\Utils::fixName($sSubEmail) : '') + .'/'.\MailSo\Base\Utils::SecureFileName($sDomain ?: 'unknown.tld') + .'/'.\MailSo\Base\Utils::SecureFileName(\implode('@', $aEmail) ?: '.unknown') + .($sSubEmail ? '/'.\MailSo\Base\Utils::SecureFileName($sSubEmail) : '') .'/.files/'.\sha1($sKey); if ($bMkDir && !\is_dir(\dirname($sFilePath)) && !\mkdir(\dirname($sFilePath), 0700, true)) { diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php index c51db5ce9..9d4d659fc 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php @@ -137,9 +137,9 @@ class FileStorage implements \RainLoop\Providers\Storage\IStorage $aEmail = \explode('@', $sEmail ?: 'nobody@unknown.tld'); $sDomain = \trim(1 < \count($aEmail) ? \array_pop($aEmail) : ''); $sFilePath = $this->sDataPath - .'/'.\RainLoop\Utils::fixName($sDomain ?: 'unknown.tld') - .'/'.\RainLoop\Utils::fixName(\implode('@', $aEmail) ?: '.unknown') - .'/'.($sSubFolder ? \RainLoop\Utils::fixName($sSubFolder).'/' : ''); + .'/'.\MailSo\Base\Utils::SecureFileName($sDomain ?: 'unknown.tld') + .'/'.\MailSo\Base\Utils::SecureFileName(\implode('@', $aEmail) ?: '.unknown') + .'/'.($sSubFolder ? \MailSo\Base\Utils::SecureFileName($sSubFolder).'/' : ''); break; default: throw new \Exception("Invalid storage type {$iStorageType}"); @@ -163,7 +163,7 @@ class FileStorage implements \RainLoop\Providers\Storage\IStorage if (StorageType::NOBODY === $iStorageType) { $sFilePath .= \sha1($sKey ?: \time()); } else { - $sFilePath .= ($sKey ? \RainLoop\Utils::fixName($sKey) : ''); + $sFilePath .= ($sKey ? \MailSo\Base\Utils::SecureFileName($sKey) : ''); } } return $sFilePath; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php index 5d9be7893..a756ad9d1 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php @@ -275,15 +275,6 @@ class Utils return true; } - /** - * Replace control characters, ampersand, spaces and reserved characters (based on Win95 VFAT) - * en.wikipedia.org/wiki/Filename#Reserved_characters_and_words - */ - public static function fixName(string $filename) : string - { - return \preg_replace('#[|\\\\?*<":>+\\[\\]/&\\s\\pC]#su', '-', $filename); - } - public static function saveFile(string $filename, string $data) : void { $dir = \dirname($filename); diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php b/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php index 80e4d8bc6..d410e7e09 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/upgrade.php @@ -15,8 +15,8 @@ abstract class Upgrade $aEmail = \explode('@', \basename($sDomainDir)); $sDomain = \trim(1 < \count($aEmail) ? \array_pop($aEmail) : ''); $sNewDir = $sDataPath - .'/'.\RainLoop\Utils::fixName($sDomain ?: 'unknown.tld') - .'/'.\RainLoop\Utils::fixName(\implode('@', $aEmail) ?: '.unknown'); + .'/'.\MailSo\Base\Utils::SecureFileName($sDomain ?: 'unknown.tld') + .'/'.\MailSo\Base\Utils::SecureFileName(\implode('@', $aEmail) ?: '.unknown'); if (\is_dir($sNewDir) || \mkdir($sNewDir, 0700, true)) { foreach (\glob("{$sDomainDir}/*") as $sItem) { $sName = \basename($sItem);