From dfd79953c5dea5f09724ba03dc89e4003d006831 Mon Sep 17 00:00:00 2001 From: Jalila BAALI Date: Fri, 3 Apr 2026 20:57:36 +0200 Subject: [PATCH] Fix: Decompress folder retain their original timestamps --- .../filemanager/activities/DecompressActivity.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt index 39d03354..a55fe7e6 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt @@ -155,6 +155,7 @@ class DecompressActivity : SimpleActivity() { zipInputStream.setPassword(password?.toCharArray()) } val buffer = ByteArray(1024) + val foldersTimestamp = mutableListOf>() zipInputStream.use { while (true) { @@ -162,6 +163,7 @@ class DecompressActivity : SimpleActivity() { val filename = filename.substringBeforeLast(".") val parent = "$destination/$filename" val newPath = "$parent/${entry.fileName.trimEnd('/')}" + val outputFile = File(newPath) if (!getDoesFilePathExist(parent)) { if (!createDirectorySync(parent)) { @@ -170,10 +172,14 @@ class DecompressActivity : SimpleActivity() { } if (entry.isDirectory) { + if (!getDoesFilePathExist(newPath)) { + createDirectorySync(newPath) + } + + foldersTimestamp.add(Pair(outputFile,entry)) continue - } - val outputFile = File(newPath) + } val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent) if (isVulnerableForZipPathTraversal) { @@ -193,7 +199,9 @@ class DecompressActivity : SimpleActivity() { fos!!.close() outputFile.setLastModified(entry) } - + for ((folder,header) in foldersTimestamp){ + folder.setLastModified((header)) + } toast(R.string.decompression_successful) finish() }