From 846c9e9fbd61b573ee78741e11f35ed35d72d456 Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:45:46 +0100 Subject: [PATCH 01/11] formating Signed-off-by: CaCO3 --- index.php | 20 ++++++++++---------- lib/Updater.php | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/index.php b/index.php index 69c1d161..e8cb6393 100644 --- a/index.php +++ b/index.php @@ -461,7 +461,7 @@ public function createBackup(): void { if (!file_exists($backupFolderLocation . '/' . dirname($fileName))) { $state = mkdir($backupFolderLocation . '/' . dirname($fileName), 0750, true); if ($state === false) { - throw new \Exception('Could not create folder: '.$backupFolderLocation.'/'.dirname($fileName)); + throw new \Exception('Could not create folder: ' . $backupFolderLocation . '/' . dirname($fileName)); } } @@ -544,7 +544,7 @@ private function getUpdateServerResponse(): array { /** @var false|string $response */ $response = curl_exec($curl); if ($response === false) { - throw new \Exception('Could not do request to updater server: '.curl_error($curl)); + throw new \Exception('Could not do request to updater server: ' . curl_error($curl)); } curl_close($curl); @@ -737,7 +737,7 @@ private function getVersionByVersionFile(string $versionFile): string { return implode('.', $OC_Version); } - throw new \Exception("OC_Version not found in $versionFile"); + throw new \Exception('OC_Version not found in ' . $versionFile); } /** @@ -754,15 +754,15 @@ public function extractDownload(): void { if ($zipState === true) { $extraction = $zip->extractTo(dirname($downloadedFilePath)); if ($extraction === false) { - throw new \Exception('Error during unpacking zipfile: '.($zip->getStatusString())); + throw new \Exception('Error during unpacking zipfile: ' . ($zip->getStatusString())); } $zip->close(); $state = unlink($downloadedFilePath); if ($state === false) { - throw new \Exception("Can't unlink ". $downloadedFilePath); + throw new \Exception("Could not unlink " . $downloadedFilePath); } } else { - throw new \Exception("Can't handle ZIP file. Error code is: ".print_r($zipState, true)); + throw new \Exception("Can't handle ZIP file. Error code is: " . print_r($zipState, true)); } // Ensure that the downloaded version is not lower @@ -804,7 +804,7 @@ public function replaceEntryPoints(): void { } $state = file_put_contents($this->baseDir . '/../' . $file, $content); if ($state === false) { - throw new \Exception('Can\'t replace entry point: '.$file); + throw new \Exception('Can\'t replace entry point: ' . $file); } } @@ -950,7 +950,7 @@ public function deleteOldFiles(): void { if ($fileInfo->isFile() || $fileInfo->isLink()) { $state = unlink($path); if ($state === false) { - throw new \Exception('Could not unlink: '.$path); + throw new \Exception('Could not unlink: ' . $path); } } elseif ($fileInfo->isDir()) { $state = rmdir($path); @@ -1054,7 +1054,7 @@ public function finalize(): void { $this->moveWithExclusions($storageLocation, []); $state = rmdir($storageLocation); if ($state === false) { - throw new \Exception('Could not rmdir $storagelocation'); + throw new \Exception('Could not rmdir ' . $storageLocation); } $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); @@ -1079,7 +1079,7 @@ private function writeStep(string $state, int $step): void { if (!file_exists($updaterDir)) { $result = mkdir($updaterDir); if ($result === false) { - throw new \Exception('Could not create $updaterDir'); + throw new \Exception('Could not create ' . $updaterDir); } } $result = touch($updaterDir . '/.step'); diff --git a/lib/Updater.php b/lib/Updater.php index 37d112d1..649d6b56 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -423,7 +423,7 @@ public function createBackup(): void { if (!file_exists($backupFolderLocation . '/' . dirname($fileName))) { $state = mkdir($backupFolderLocation . '/' . dirname($fileName), 0750, true); if ($state === false) { - throw new \Exception('Could not create folder: '.$backupFolderLocation.'/'.dirname($fileName)); + throw new \Exception('Could not create folder: ' . $backupFolderLocation . '/' . dirname($fileName)); } } @@ -506,7 +506,7 @@ private function getUpdateServerResponse(): array { /** @var false|string $response */ $response = curl_exec($curl); if ($response === false) { - throw new \Exception('Could not do request to updater server: '.curl_error($curl)); + throw new \Exception('Could not do request to updater server: ' . curl_error($curl)); } curl_close($curl); @@ -699,7 +699,7 @@ private function getVersionByVersionFile(string $versionFile): string { return implode('.', $OC_Version); } - throw new \Exception("OC_Version not found in $versionFile"); + throw new \Exception('OC_Version not found in ' . $versionFile); } /** @@ -716,15 +716,15 @@ public function extractDownload(): void { if ($zipState === true) { $extraction = $zip->extractTo(dirname($downloadedFilePath)); if ($extraction === false) { - throw new \Exception('Error during unpacking zipfile: '.($zip->getStatusString())); + throw new \Exception('Error during unpacking zipfile: ' . ($zip->getStatusString())); } $zip->close(); $state = unlink($downloadedFilePath); if ($state === false) { - throw new \Exception("Can't unlink ". $downloadedFilePath); + throw new \Exception("Could not unlink " . $downloadedFilePath); } } else { - throw new \Exception("Can't handle ZIP file. Error code is: ".print_r($zipState, true)); + throw new \Exception("Can't handle ZIP file. Error code is: " . print_r($zipState, true)); } // Ensure that the downloaded version is not lower @@ -766,7 +766,7 @@ public function replaceEntryPoints(): void { } $state = file_put_contents($this->baseDir . '/../' . $file, $content); if ($state === false) { - throw new \Exception('Can\'t replace entry point: '.$file); + throw new \Exception('Can\'t replace entry point: ' . $file); } } @@ -912,7 +912,7 @@ public function deleteOldFiles(): void { if ($fileInfo->isFile() || $fileInfo->isLink()) { $state = unlink($path); if ($state === false) { - throw new \Exception('Could not unlink: '.$path); + throw new \Exception('Could not unlink: ' . $path); } } elseif ($fileInfo->isDir()) { $state = rmdir($path); @@ -1016,7 +1016,7 @@ public function finalize(): void { $this->moveWithExclusions($storageLocation, []); $state = rmdir($storageLocation); if ($state === false) { - throw new \Exception('Could not rmdir $storagelocation'); + throw new \Exception('Could not rmdir ' . $storageLocation); } $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); @@ -1041,7 +1041,7 @@ private function writeStep(string $state, int $step): void { if (!file_exists($updaterDir)) { $result = mkdir($updaterDir); if ($result === false) { - throw new \Exception('Could not create $updaterDir'); + throw new \Exception('Could not create ' . $updaterDir); } } $result = touch($updaterDir . '/.step'); From 2c69cd8cf6b0143ff0f12fd84d90b7a0939ca82d Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:07 +0100 Subject: [PATCH 02/11] corrected message text Signed-off-by: CaCO3 --- index.php | 2 +- lib/Updater.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.php b/index.php index e8cb6393..7f8a626c 100644 --- a/index.php +++ b/index.php @@ -1059,7 +1059,7 @@ public function finalize(): void { $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); if ($state === false) { - throw new \Exception('Could not rmdir .step'); + throw new \Exception('Could not unlink .step'); } if (function_exists('opcache_reset')) { diff --git a/lib/Updater.php b/lib/Updater.php index 649d6b56..76722a06 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -1021,7 +1021,7 @@ public function finalize(): void { $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); if ($state === false) { - throw new \Exception('Could not rmdir .step'); + throw new \Exception('Could not unlink .step'); } if (function_exists('opcache_reset')) { From 5719e8ee4907b9cfb1fa2d1a49c00c4293dfa08a Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:19 +0100 Subject: [PATCH 03/11] validate return codes of rmdir() and unlink() Signed-off-by: CaCO3 --- index.php | 8 ++++++-- lib/Updater.php | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index 7f8a626c..64d5c1f9 100644 --- a/index.php +++ b/index.php @@ -841,10 +841,14 @@ private function recursiveDelete(string $folder): void { } foreach ($files as $file) { - unlink($file); + if (unlink($file) === false) { + throw new \Exception('Could not unlink ' . $file); + } } foreach ($directories as $dir) { - rmdir($dir); + if (rmdir($dir) === false) { + throw new \Exception('Could not rmdir ' . $dir); + } } $state = rmdir($folder); diff --git a/lib/Updater.php b/lib/Updater.php index 76722a06..0a0b9ab1 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -803,10 +803,14 @@ private function recursiveDelete(string $folder): void { } foreach ($files as $file) { - unlink($file); + if (unlink($file) === false) { + throw new \Exception('Could not unlink ' . $file); + } } foreach ($directories as $dir) { - rmdir($dir); + if (rmdir($dir) === false) { + throw new \Exception('Could not rmdir ' . $dir); + } } $state = rmdir($folder); From 429adaf59b0232f9fe3e5b4f095f433641af42f6 Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:32 +0100 Subject: [PATCH 04/11] prevent modifying a directory while iterating through it. This can lead to skipped files! Signed-off-by: CaCO3 --- index.php | 10 ++++++++-- lib/Updater.php | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index 64d5c1f9..be31cd07 100644 --- a/index.php +++ b/index.php @@ -937,7 +937,10 @@ public function deleteOldFiles(): void { * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator() as $path => $fileInfo) { + // Build file list first, so the removals won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator(), true); + foreach ($fileList as $path => $fileInfo) { $currentDir = $this->baseDir . '/../'; $fileName = explode($currentDir, $path)[1]; $folderStructure = explode('/', $fileName, -1); @@ -977,7 +980,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator($dataLocation) as $path => $fileInfo) { + // Build file list first, so the renames won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator($dataLocation), true); + foreach ($fileList as $path => $fileInfo) { $fileName = explode($dataLocation, $path)[1]; $folderStructure = explode('/', $fileName, -1); diff --git a/lib/Updater.php b/lib/Updater.php index 0a0b9ab1..4adc6820 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -899,7 +899,10 @@ public function deleteOldFiles(): void { * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator() as $path => $fileInfo) { + // Build file list first, so the removals won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator(), true); + foreach ($fileList as $path => $fileInfo) { $currentDir = $this->baseDir . '/../'; $fileName = explode($currentDir, $path)[1]; $folderStructure = explode('/', $fileName, -1); @@ -939,7 +942,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator($dataLocation) as $path => $fileInfo) { + // Build file list first, so the renames won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator($dataLocation), true); + foreach ($fileList as $path => $fileInfo) { $fileName = explode($dataLocation, $path)[1]; $folderStructure = explode('/', $fileName, -1); From 5a29098fbb78a4841ae8fdeec3a18d65e4c027a6 Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:47:34 +0100 Subject: [PATCH 05/11] updated phar Signed-off-by: CaCO3 --- updater.phar | Bin 760152 -> 762841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/updater.phar b/updater.phar index ddba9d5cfc16d85b6ab2477084d3d092d85e9174..d0ea013917ed6d55923325ee6d1e143ff4cce494 100755 GIT binary patch delta 9367 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

Date: Wed, 1 Nov 2023 23:01:03 +0100 Subject: [PATCH 06/11] rebuild updater.phar with composer 2.6.5 Signed-off-by: CaCO3 --- updater.phar | Bin 762841 -> 763109 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/updater.phar b/updater.phar index d0ea013917ed6d55923325ee6d1e143ff4cce494..23785deeebc5275954bb46b12f83b134b8cf4d96 100755 GIT binary patch delta 3677 zcmai03v`p!9sj;BuP@(i)3j;YrfHi?n>IF}=}^JX?eC*Q*v^J9hto}?&Vjgd#sNV<#LXQ=@VMgv@r)jIn^d;ld%sfKgXfrY zZhyV^|N8wO_a^Tj_Wa|BXZtfr^D8SV7gTu{Rxhj^-0_?FbN3g!=j`P+-Y?vKRNl{* zQTT{=QIG@%RYE!4jR+nJPYBB>oEHiyh^mDYT2)>Oaa9F{y{dW&pQ@NarkeR|Q@fIG zKiU$&DIE9Yt)W7Bi^?oNrZ!Q{J?c6p+rV?2!@K7lc~WIg?TiLTV}YnAG7>qG#BoF| zUBmo#Ygm-~HPzJifMzKLt+t24t=gL?yrf-2!K7=WaGS23!am(%3YQhA7MtkqPO*i; z>&ouGVk6x(>RECDz00Ul(aIia*D{`~!k9r6}pil3Ei+DSEw>rd`rrtcGl-g`cH zTOM^<<<1mQ{wSH{rZq5LD-9itkb%+r)WC{SlF~^JH>a@Op%f-dGO~nM8{3)RHOU;8 zrM~brO;|o@v`~Z3jH@Wrr!w%l~bVQ_!@dt5Z^{_C7OnbUdSr+TcvaG?dAP zX1}t#lF4RnRTk^!Gg;lt-=0j4v!7m?FWaUojxCr8@(MW4RkON)b@B2=(#2a$N*5_w zY=2hEXA6}kVGELvTJmV*ixw8SI-8Y$s{%)}*(e*WtTne@RQ6I4Yr5#Th3@sOpNGu}r;jyvD7r<#@TLnj%ebD~BbaIulS-KC7|hwC|R?BoZp z$>;P|`B7Jze9@Ik16*~n7B4Sm;eJ)j-Y!)Mt5%?d9UdxSPne<9ZS=4U-V&gQ&xk6y zz0^&;Y%FcC{De~misD0Msj)whuF_AToa)YzFO?=4zp7L;D4r;vcv}|TZp*7$<&fgK z-mL@I%nF#LuMh%U7-JU%nXE<0@~p*9&KIQGc5~5RKvn>}U4st!!8@j8!W|ad>DBOICH% zL0KN!tfs7?vrTUXw+-2q?aC@X14N86m8~Bm3?KUV8{zl~2|w`Q3V|#YS!%L0WNFFL zktLF)PdvCnQdJ~;gZz9ok738>yeV<&UddUWOCe6ipV9*&O=#e$>{aOt#^ z1!{-h1P>qMb@0i%QVVQ1=|w0yBelUql2(M@cIz`?R~Jf2D#fGmP)PX;lfawNEIzQ~ zv{VXf+`Oo!v8m@JP>IoW z8Qqm3+`*32nL-DeT_RgCs-TkOnc~ok1kGkrn`efQ2+w5-m4Mfa$?!rk+AxpSnrhV6 z21kRjpf42M7+5~ax}l62bd{^EaJdvEL*p(%r<+x6FYL_{&RlnVw>wMq>at4WMwB|-{}i+mD1ohRG?d&|*;)=sNE28WuF6-G*h9N1pSYhb5M zSPhTWqbx8!DQY3oO3vP}2}UTx!ftr6fjFzjLOKi#s?y=4QIi4IRzVL}=A(_UsS-U( zZ3`iiFC3uCE1n+1s>k1L$4%g7CcotslojfH<=j}nI;q;EzDOZ7x1^L($pVbLH8r2+re36yV5g`u!uJ30A{fg_%tgIg9UVCxG#%6>o4#wbe4;J`cJ9;Y&@2Y1dD1|~1E|dx_r4=2B4pFND3PM3;6P#0_%r1z?D~fSGw&*{5 z>CqfDKEjrb`IuyzTBDA|ZPDO#qNr2nbD1$JM$t?i%(?r0*JUwTlapV+_wW18chAjk z&&6Y&kGJb{YI6cvwKdg&;UjC;?i%s3e5d>+nHKUjii%@&5AOxI#ybIs0wGJ03DSIp z2VkS30N{qg0iacm0+^s22GF7$4zNR+3vf$`0Wm7fS*UXAD~|aBVmQZbs;YC)THPZQs)C` zG}8d8G_M2f)64=ehZO?65mp4SGi)Nj0~xZl<3L)h^#L4~rN6a#Am!<>xq!||SEyA; z?Q4$XvZJ=9(QP^`dtQgBMKTS|K_$oi5wqzYH5u(pR0sm|ssy4rX+`4S66B~BCPQ|= zFa==^Xd_&Mn>abR=fbF#jQ9)aIP|+Yp?g$(|&1|*9VA!dZV-uJSs{aLRtaGeV-Rv zKJgl(y1sc5^cfWW?L}rZp%~%9<*RLW246-|Je&UE-&+mk%kLWkwIeB zyeCikWONz0i!n&8E(W(`k1P$u;F6VE@#eN$%Q00)49BJP<|os{7b6y9MKmPXInFt< z!j6|E#tN+Aa}sH)Gy_*(05CT32Nk{QkZ%S&#@&{>Icdah?!+R6>^L0!3K@>a;S!r{ zcqvsj?DSI`ev^H+F+e>%emcO)_%dX%L;9$Gt9x`nrWYT{^bbj-W~Zc;oa{qN(P@t) z#_V^^qnSWPa$43e5m779>8BwxA>q)3*8rBwa3NtfNI8jEdSxOGxhD~6*+dLz6*1tH zEV+{AK*0M+IKvxBXd9i3-|PD15~MLck>geki_+0f7tVxrJ|+pwU#!&;cn5N&WtLL- z?D8GXlNM!)a&s=tOi88t?NN~agdIz#rr;*jr&NIQXv&)asg4-{?>KNiXB}vB55<8t z4jm7+eM9l~wW*aL)uf`!;Z)>mNy8p%(r}>O2-t%M^*8I$cPnR+srxi#?<&kuJ z!Hn(OxWlM6BO}(Rla+v@%PxrjhS@P}x0YzO`H*N^MvnBM%g%t-dj-8x1_ynh)tYv_ zFaTz^S3afBGw_)n;mI=nm?sAT9?dFRLKl0ofODq@*JZ$iL!at}!M@w>UDNL6L+xHg z^AL7*E>)J&8 z@UJjbyqPQ*$@ByKG$!Q|S;1*y39TRCb9r_(T1aNc&ycu~{x3d;XZKHN)GU9HPh^!P zf?m}mjuBbJQ{K$J8{{Lv+s;@o31^3HE23Fdi6AH?7dHM3Nzl~>>jF)%rmU=$w=lye zJkba1tLs{70{LKK56=>Jc=f^s4GWtBjpczwEy2bB Date: Thu, 2 Nov 2023 17:07:44 +0100 Subject: [PATCH 07/11] fixup! updated phar Signed-off-by: CaCO3 --- updater.phar | Bin 763109 -> 760620 bytes vendor/composer/installed.php | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/updater.phar b/updater.phar index 23785deeebc5275954bb46b12f83b134b8cf4d96..d21639a669907179291ef3afec22d9e3970e7c78 100755 GIT binary patch delta 6123 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 O7vQzc4a$Ea|9=4!f%FRi delta 8544 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 '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => '14ccc22088938656fb221e3d7f7e8928a58332ab', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => '14ccc22088938656fb221e3d7f7e8928a58332ab', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), From 508fde6a30621bc4a9db2f2daca821ccef1cc88f Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:45:46 +0100 Subject: [PATCH 08/11] formating Signed-off-by: CaCO3 --- index.php | 20 ++++++++++---------- lib/Updater.php | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/index.php b/index.php index 69c1d161..e8cb6393 100644 --- a/index.php +++ b/index.php @@ -461,7 +461,7 @@ public function createBackup(): void { if (!file_exists($backupFolderLocation . '/' . dirname($fileName))) { $state = mkdir($backupFolderLocation . '/' . dirname($fileName), 0750, true); if ($state === false) { - throw new \Exception('Could not create folder: '.$backupFolderLocation.'/'.dirname($fileName)); + throw new \Exception('Could not create folder: ' . $backupFolderLocation . '/' . dirname($fileName)); } } @@ -544,7 +544,7 @@ private function getUpdateServerResponse(): array { /** @var false|string $response */ $response = curl_exec($curl); if ($response === false) { - throw new \Exception('Could not do request to updater server: '.curl_error($curl)); + throw new \Exception('Could not do request to updater server: ' . curl_error($curl)); } curl_close($curl); @@ -737,7 +737,7 @@ private function getVersionByVersionFile(string $versionFile): string { return implode('.', $OC_Version); } - throw new \Exception("OC_Version not found in $versionFile"); + throw new \Exception('OC_Version not found in ' . $versionFile); } /** @@ -754,15 +754,15 @@ public function extractDownload(): void { if ($zipState === true) { $extraction = $zip->extractTo(dirname($downloadedFilePath)); if ($extraction === false) { - throw new \Exception('Error during unpacking zipfile: '.($zip->getStatusString())); + throw new \Exception('Error during unpacking zipfile: ' . ($zip->getStatusString())); } $zip->close(); $state = unlink($downloadedFilePath); if ($state === false) { - throw new \Exception("Can't unlink ". $downloadedFilePath); + throw new \Exception("Could not unlink " . $downloadedFilePath); } } else { - throw new \Exception("Can't handle ZIP file. Error code is: ".print_r($zipState, true)); + throw new \Exception("Can't handle ZIP file. Error code is: " . print_r($zipState, true)); } // Ensure that the downloaded version is not lower @@ -804,7 +804,7 @@ public function replaceEntryPoints(): void { } $state = file_put_contents($this->baseDir . '/../' . $file, $content); if ($state === false) { - throw new \Exception('Can\'t replace entry point: '.$file); + throw new \Exception('Can\'t replace entry point: ' . $file); } } @@ -950,7 +950,7 @@ public function deleteOldFiles(): void { if ($fileInfo->isFile() || $fileInfo->isLink()) { $state = unlink($path); if ($state === false) { - throw new \Exception('Could not unlink: '.$path); + throw new \Exception('Could not unlink: ' . $path); } } elseif ($fileInfo->isDir()) { $state = rmdir($path); @@ -1054,7 +1054,7 @@ public function finalize(): void { $this->moveWithExclusions($storageLocation, []); $state = rmdir($storageLocation); if ($state === false) { - throw new \Exception('Could not rmdir $storagelocation'); + throw new \Exception('Could not rmdir ' . $storageLocation); } $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); @@ -1079,7 +1079,7 @@ private function writeStep(string $state, int $step): void { if (!file_exists($updaterDir)) { $result = mkdir($updaterDir); if ($result === false) { - throw new \Exception('Could not create $updaterDir'); + throw new \Exception('Could not create ' . $updaterDir); } } $result = touch($updaterDir . '/.step'); diff --git a/lib/Updater.php b/lib/Updater.php index 37d112d1..649d6b56 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -423,7 +423,7 @@ public function createBackup(): void { if (!file_exists($backupFolderLocation . '/' . dirname($fileName))) { $state = mkdir($backupFolderLocation . '/' . dirname($fileName), 0750, true); if ($state === false) { - throw new \Exception('Could not create folder: '.$backupFolderLocation.'/'.dirname($fileName)); + throw new \Exception('Could not create folder: ' . $backupFolderLocation . '/' . dirname($fileName)); } } @@ -506,7 +506,7 @@ private function getUpdateServerResponse(): array { /** @var false|string $response */ $response = curl_exec($curl); if ($response === false) { - throw new \Exception('Could not do request to updater server: '.curl_error($curl)); + throw new \Exception('Could not do request to updater server: ' . curl_error($curl)); } curl_close($curl); @@ -699,7 +699,7 @@ private function getVersionByVersionFile(string $versionFile): string { return implode('.', $OC_Version); } - throw new \Exception("OC_Version not found in $versionFile"); + throw new \Exception('OC_Version not found in ' . $versionFile); } /** @@ -716,15 +716,15 @@ public function extractDownload(): void { if ($zipState === true) { $extraction = $zip->extractTo(dirname($downloadedFilePath)); if ($extraction === false) { - throw new \Exception('Error during unpacking zipfile: '.($zip->getStatusString())); + throw new \Exception('Error during unpacking zipfile: ' . ($zip->getStatusString())); } $zip->close(); $state = unlink($downloadedFilePath); if ($state === false) { - throw new \Exception("Can't unlink ". $downloadedFilePath); + throw new \Exception("Could not unlink " . $downloadedFilePath); } } else { - throw new \Exception("Can't handle ZIP file. Error code is: ".print_r($zipState, true)); + throw new \Exception("Can't handle ZIP file. Error code is: " . print_r($zipState, true)); } // Ensure that the downloaded version is not lower @@ -766,7 +766,7 @@ public function replaceEntryPoints(): void { } $state = file_put_contents($this->baseDir . '/../' . $file, $content); if ($state === false) { - throw new \Exception('Can\'t replace entry point: '.$file); + throw new \Exception('Can\'t replace entry point: ' . $file); } } @@ -912,7 +912,7 @@ public function deleteOldFiles(): void { if ($fileInfo->isFile() || $fileInfo->isLink()) { $state = unlink($path); if ($state === false) { - throw new \Exception('Could not unlink: '.$path); + throw new \Exception('Could not unlink: ' . $path); } } elseif ($fileInfo->isDir()) { $state = rmdir($path); @@ -1016,7 +1016,7 @@ public function finalize(): void { $this->moveWithExclusions($storageLocation, []); $state = rmdir($storageLocation); if ($state === false) { - throw new \Exception('Could not rmdir $storagelocation'); + throw new \Exception('Could not rmdir ' . $storageLocation); } $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); @@ -1041,7 +1041,7 @@ private function writeStep(string $state, int $step): void { if (!file_exists($updaterDir)) { $result = mkdir($updaterDir); if ($result === false) { - throw new \Exception('Could not create $updaterDir'); + throw new \Exception('Could not create ' . $updaterDir); } } $result = touch($updaterDir . '/.step'); From d18a3f2ba50450e9f1a626be2d0c6d43ace82c86 Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:07 +0100 Subject: [PATCH 09/11] corrected message text Signed-off-by: CaCO3 --- index.php | 2 +- lib/Updater.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.php b/index.php index e8cb6393..7f8a626c 100644 --- a/index.php +++ b/index.php @@ -1059,7 +1059,7 @@ public function finalize(): void { $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); if ($state === false) { - throw new \Exception('Could not rmdir .step'); + throw new \Exception('Could not unlink .step'); } if (function_exists('opcache_reset')) { diff --git a/lib/Updater.php b/lib/Updater.php index 649d6b56..76722a06 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -1021,7 +1021,7 @@ public function finalize(): void { $state = unlink($this->getUpdateDirectoryLocation() . '/updater-'.$this->getConfigOptionMandatoryString('instanceid') . '/.step'); if ($state === false) { - throw new \Exception('Could not rmdir .step'); + throw new \Exception('Could not unlink .step'); } if (function_exists('opcache_reset')) { From 801578bf94de98b057254e8db78535c6232f4a9e Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:19 +0100 Subject: [PATCH 10/11] validate return codes of rmdir() and unlink() Signed-off-by: CaCO3 --- index.php | 8 ++++++-- lib/Updater.php | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index 7f8a626c..64d5c1f9 100644 --- a/index.php +++ b/index.php @@ -841,10 +841,14 @@ private function recursiveDelete(string $folder): void { } foreach ($files as $file) { - unlink($file); + if (unlink($file) === false) { + throw new \Exception('Could not unlink ' . $file); + } } foreach ($directories as $dir) { - rmdir($dir); + if (rmdir($dir) === false) { + throw new \Exception('Could not rmdir ' . $dir); + } } $state = rmdir($folder); diff --git a/lib/Updater.php b/lib/Updater.php index 76722a06..0a0b9ab1 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -803,10 +803,14 @@ private function recursiveDelete(string $folder): void { } foreach ($files as $file) { - unlink($file); + if (unlink($file) === false) { + throw new \Exception('Could not unlink ' . $file); + } } foreach ($directories as $dir) { - rmdir($dir); + if (rmdir($dir) === false) { + throw new \Exception('Could not rmdir ' . $dir); + } } $state = rmdir($folder); From 99ce35bf266386bf9f8aca67a196fc14106a5a37 Mon Sep 17 00:00:00 2001 From: CaCO3 Date: Wed, 1 Nov 2023 22:46:32 +0100 Subject: [PATCH 11/11] prevent modifying a directory while iterating through it. This can lead to skipped files! Signed-off-by: CaCO3 --- index.php | 10 ++++++++-- lib/Updater.php | 10 ++++++++-- vendor/composer/installed.php | 4 ++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/index.php b/index.php index 64d5c1f9..be31cd07 100644 --- a/index.php +++ b/index.php @@ -937,7 +937,10 @@ public function deleteOldFiles(): void { * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator() as $path => $fileInfo) { + // Build file list first, so the removals won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator(), true); + foreach ($fileList as $path => $fileInfo) { $currentDir = $this->baseDir . '/../'; $fileName = explode($currentDir, $path)[1]; $folderStructure = explode('/', $fileName, -1); @@ -977,7 +980,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator($dataLocation) as $path => $fileInfo) { + // Build file list first, so the renames won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator($dataLocation), true); + foreach ($fileList as $path => $fileInfo) { $fileName = explode($dataLocation, $path)[1]; $folderStructure = explode('/', $fileName, -1); diff --git a/lib/Updater.php b/lib/Updater.php index 0a0b9ab1..4adc6820 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -899,7 +899,10 @@ public function deleteOldFiles(): void { * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator() as $path => $fileInfo) { + // Build file list first, so the removals won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator(), true); + foreach ($fileList as $path => $fileInfo) { $currentDir = $this->baseDir . '/../'; $fileName = explode($currentDir, $path)[1]; $folderStructure = explode('/', $fileName, -1); @@ -939,7 +942,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement * @var string $path * @var \SplFileInfo $fileInfo */ - foreach ($this->getRecursiveDirectoryIterator($dataLocation) as $path => $fileInfo) { + // Build file list first, so the renames won't mess with it + /** @var array */ + $fileList = iterator_to_array($this->getRecursiveDirectoryIterator($dataLocation), true); + foreach ($fileList as $path => $fileInfo) { $fileName = explode($dataLocation, $path)[1]; $folderStructure = explode('/', $fileName, -1); diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index a1f1e348..0c941aa1 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => '14ccc22088938656fb221e3d7f7e8928a58332ab', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => '14ccc22088938656fb221e3d7f7e8928a58332ab', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(),