Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed

- Preserve modified date when unzip files ([#176])

## [1.1.0] - 2025-05-21

### Added
Expand Down Expand Up @@ -66,3 +70,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import org.fossify.filemanager.R
import org.fossify.filemanager.adapters.DecompressItemsAdapter
import org.fossify.filemanager.databinding.ActivityDecompressBinding
import org.fossify.filemanager.extensions.config
import org.fossify.filemanager.extensions.setLastModified
import org.fossify.filemanager.models.ListItem
import java.io.BufferedInputStream
import java.io.File
Expand Down Expand Up @@ -171,7 +172,9 @@ class DecompressActivity : SimpleActivity() {
continue
}

val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent)
val outputFile = File(newPath)

val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent)
if (isVulnerableForZipPathTraversal) {
continue
}
Expand All @@ -187,6 +190,7 @@ class DecompressActivity : SimpleActivity() {
fos!!.write(buffer, 0, count)
}
fos!!.close()
outputFile.setLastModified(entry)
}

toast(R.string.decompression_successful)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ import org.fossify.filemanager.extensions.config
import org.fossify.filemanager.extensions.isPathOnRoot
import org.fossify.filemanager.extensions.isZipFile
import org.fossify.filemanager.extensions.setAs
import org.fossify.filemanager.extensions.setLastModified
import org.fossify.filemanager.extensions.sharePaths
import org.fossify.filemanager.extensions.toggleItemVisibility
import org.fossify.filemanager.extensions.tryOpenPathIntent
Expand Down Expand Up @@ -693,6 +694,7 @@ class ItemsAdapter(
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
if (fos != null) {
zipInputStream.copyTo(fos)
File(newPath).setLastModified(entry)
}
}
}
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/kotlin/org/fossify/filemanager/extensions/Zip4j.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.fossify.filemanager.extensions

import net.lingala.zip4j.model.LocalFileHeader
import java.io.File

fun File.setLastModified(localFileHeader: LocalFileHeader) {
setLastModified(localFileHeader.lastModifiedOrCurrentTimeMillis)
}

private val LocalFileHeader.lastModifiedOrCurrentTimeMillis
get() = if (lastModifiedTimeEpoch == 0L) {
System.currentTimeMillis()
} else {
lastModifiedTimeEpoch
}
Loading