From 4009b0501f3ec658930bd7dc842bac22e0508e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 28 May 2026 11:09:06 +0200 Subject: [PATCH 1/2] fix: Fix explode calls for path parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Always pass a limit of 2 when using explode in this way avoids bugs when the path contains several times the delimiter by chance. Signed-off-by: Côme Chilliet --- index.php | 4 ++-- lib/Updater.php | 4 ++-- tests/checkSameCodeBase.php | 2 +- updater.phar | Bin 1324127 -> 1324131 bytes 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index 240b773c..d6ef2ce6 100644 --- a/index.php +++ b/index.php @@ -502,7 +502,7 @@ public function createBackup(): void { } foreach ($this->getRecursiveDirectoryIterator($this->nextcloudDir, $excludedElements) as $absolutePath => $fileInfo) { - $relativePath = explode($this->nextcloudDir, $absolutePath)[1]; + $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1]; $relativeDirectory = dirname($relativePath); // Create folder if it doesn't exist @@ -1136,7 +1136,7 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement } - $fileName = explode($dataLocation, $path)[1]; + $fileName = explode($dataLocation, $path, 2)[1]; if ($fileInfo->isFile()) { if (!file_exists($this->nextcloudDir . '/' . dirname($fileName))) { diff --git a/lib/Updater.php b/lib/Updater.php index d1f523c5..bf523684 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -486,7 +486,7 @@ public function createBackup(): void { } foreach ($this->getRecursiveDirectoryIterator($this->nextcloudDir, $excludedElements) as $absolutePath => $fileInfo) { - $relativePath = explode($this->nextcloudDir, $absolutePath)[1]; + $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1]; $relativeDirectory = dirname($relativePath); // Create folder if it doesn't exist @@ -1120,7 +1120,7 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement } - $fileName = explode($dataLocation, $path)[1]; + $fileName = explode($dataLocation, $path, 2)[1]; if ($fileInfo->isFile()) { if (!file_exists($this->nextcloudDir . '/' . dirname($fileName))) { diff --git a/tests/checkSameCodeBase.php b/tests/checkSameCodeBase.php index bd1d2c8a..fb106b60 100644 --- a/tests/checkSameCodeBase.php +++ b/tests/checkSameCodeBase.php @@ -56,7 +56,7 @@ function findDiffPos($original, $copy) { * @var SplFileInfo $fileInfo */ foreach ($iterator as $path => $fileInfo) { - $fileName = explode($libDir, $path)[1]; + $fileName = explode($libDir, $path, 2)[1]; if (in_array($fileName, $excludedFiles)) { continue; diff --git a/updater.phar b/updater.phar index 70abbee7c708de0a1b1e478bb41a0ad48c4ff972..1d5d38efaf86d104c07cf02fd2861ce83ff33116 100755 GIT binary patch delta 9241 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 PHM;5vy>#Secg+4@8is=+ delta 8973 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 ZsrA0veV3Oysyo*9g0CB)V|Lf<{{iVT)vo{m From b19b4a46421bd646207b4b8cbd5ee528a43c5b8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 28 May 2026 11:37:48 +0200 Subject: [PATCH 2/2] fix: Add error handling and rebuild updater.phar with correct box version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- index.php | 10 ++++++++-- lib/Updater.php | 10 ++++++++-- updater.phar | Bin 1324131 -> 1324395 bytes 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index d6ef2ce6..89277b0e 100644 --- a/index.php +++ b/index.php @@ -502,7 +502,10 @@ public function createBackup(): void { } foreach ($this->getRecursiveDirectoryIterator($this->nextcloudDir, $excludedElements) as $absolutePath => $fileInfo) { - $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1]; + $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1] ?? null; + if ($relativePath === null) { + throw new \Exception($absolutePath . ' is not in ' . $this->nextcloudDir); + } $relativeDirectory = dirname($relativePath); // Create folder if it doesn't exist @@ -1136,7 +1139,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement } - $fileName = explode($dataLocation, $path, 2)[1]; + $fileName = explode($dataLocation, $path, 2)[1] ?? null; + if ($fileName === null) { + throw new \Exception('Could not move ' . $path . ' as it’s not in ' . $dataLocation); + } if ($fileInfo->isFile()) { if (!file_exists($this->nextcloudDir . '/' . dirname($fileName))) { diff --git a/lib/Updater.php b/lib/Updater.php index bf523684..4e74be7e 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -486,7 +486,10 @@ public function createBackup(): void { } foreach ($this->getRecursiveDirectoryIterator($this->nextcloudDir, $excludedElements) as $absolutePath => $fileInfo) { - $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1]; + $relativePath = explode($this->nextcloudDir, $absolutePath, 2)[1] ?? null; + if ($relativePath === null) { + throw new \Exception($absolutePath . ' is not in ' . $this->nextcloudDir); + } $relativeDirectory = dirname($relativePath); // Create folder if it doesn't exist @@ -1120,7 +1123,10 @@ private function moveWithExclusions(string $dataLocation, array $excludedElement } - $fileName = explode($dataLocation, $path, 2)[1]; + $fileName = explode($dataLocation, $path, 2)[1] ?? null; + if ($fileName === null) { + throw new \Exception('Could not move ' . $path . ' as it’s not in ' . $dataLocation); + } if ($fileInfo->isFile()) { if (!file_exists($this->nextcloudDir . '/' . dirname($fileName))) { diff --git a/updater.phar b/updater.phar index 1d5d38efaf86d104c07cf02fd2861ce83ff33116..b08cc6267449d940fb9c4734e53508474dbd0ec9 100755 GIT binary patch delta 503 zcmaF-BH;C_fC=+?j4YDOP0iC%Qwf3wyK+doThq6A&{4F$)m00x=s9 zvjZ^)5OV@C7Z7s;F%J;)0x=&D^8>K}5DRV>_7JlB!lP@bn{HxYV3}lKsy;p8nec(_ z61Kv1Ch7|I_6m8WIXTu`oSdAQX$l%DMX5Q7C7ETZ0f{9U3bwYkVCm@}=LpM6t0X2B z=jW7`K;-lk)D<#|74q^+6f*Os_Z<5_3}#=1x=> zk(+)XQJBj-H@_?uXri8iN&(1bkm-rV3YjI38fL;Qfk>w$mL&S*Cj%XspQmX({lZaU z>FtXT3s)3){GWMam&u)#-=5aBcyOCUIybbf=e&9M)a*s8I~ccwTh0_#-28iw`-Y2q lj^8?V@u$U`o2nShuXh*^M`6^Pk@ zm>q~YfS41Axqz4(h-A*fLL(5u!oS{7j}h|%%YM?_2~icgb!?&wH2;2 zVYJ>ZStR^5kja{B`o3ae|d^vS+OYfg6ZYQ+Phb?^bf6a!N^|!X{HE7;& z++>DI$-CIsS~-9Jnrp@HvfyoIoU~EK>*)7?T3f4UDy&K5u~cvP%>wj=yOXaI0H;K1 A^Z)<=