Handle archives with nested directories properly

Closes #9389
This commit is contained in:
arkon 2023-04-25 22:07:34 -04:00
parent 3ce9a9ff97
commit 20bec66a9d
2 changed files with 6 additions and 3 deletions

View file

@ -26,9 +26,11 @@ internal class RarPageLoader(file: File) : PageLoader() {
rar.fileHeaders.asSequence() rar.fileHeaders.asSequence()
.filterNot { it.isDirectory } .filterNot { it.isDirectory }
.forEach { header -> .forEach { header ->
val pageFile = File(tmpDir, header.fileName).also { it.createNewFile() } val pageOutputStream = File(tmpDir, header.fileName.substringAfterLast("/"))
.also { it.createNewFile() }
.outputStream()
getStream(rar, header).use { getStream(rar, header).use {
it.copyTo(pageFile.outputStream()) it.copyTo(pageOutputStream)
} }
} }
} }

View file

@ -24,7 +24,8 @@ internal class ZipPageLoader(file: File) : PageLoader() {
generateSequence { zipInputStream.nextEntry } generateSequence { zipInputStream.nextEntry }
.filterNot { it.isDirectory } .filterNot { it.isDirectory }
.forEach { entry -> .forEach { entry ->
File(tmpDir, entry.name).also { it.createNewFile() } File(tmpDir, entry.name.substringAfterLast("/"))
.also { it.createNewFile() }
.outputStream().use { pageOutputStream -> .outputStream().use { pageOutputStream ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
pageOutputStream.write(zipInputStream.readNBytes(entry.size.toInt())) pageOutputStream.write(zipInputStream.readNBytes(entry.size.toInt()))