[klib] Validate paths when unpacking zip archives

This commit is contained in:
Sergej Jaskiewicz
2022-11-21 15:44:45 +01:00
committed by Space Team
parent 898626d055
commit d50c072af0
5 changed files with 146 additions and 42 deletions
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.file.file
import org.jetbrains.kotlin.konan.file.recursiveCopyTo
import org.jetbrains.kotlin.konan.file.withZipFileSystem
import org.jetbrains.kotlin.library.impl.zippedKotlinLibraryChecks
@@ -23,6 +24,7 @@ fun File.unpackZippedKonanLibraryTo(newDir: File) {
newDir.delete()
}
// TODO: Replace this with this.unzipTo(newDir) after bootstrap advance
this.withZipFileSystem {
it.file("/").recursiveCopyTo(newDir)
}
@@ -32,4 +34,4 @@ fun File.unpackZippedKonanLibraryTo(newDir: File) {
val List<String>.toUnresolvedLibraries
get() = this.map {
UnresolvedLibrary(it, null)
}
}
@@ -2,6 +2,8 @@ package org.jetbrains.kotlin.library.impl
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.file.file
import org.jetbrains.kotlin.konan.file.unzipTo
import org.jetbrains.kotlin.konan.file.recursiveCopyTo
import org.jetbrains.kotlin.konan.file.withZipFileSystem
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.util.removeSuffixIfPresent
@@ -109,6 +111,14 @@ private fun extract(zipFile: File, file: File) = zipFile.withZipFileSystem { zip
fun KotlinLibraryLayoutImpl.extractDir(directory: File): File = extractDir(this.klib, directory)
// TODO: Use this implementation after bootstrap advance
//private fun extractDir(zipFile: File, directory: File): File {
// val temporary = org.jetbrains.kotlin.konan.file.createTempDir(directory.name)
// temporary.deleteOnExitRecursively()
// zipFile.unzipTo(temporary, fromSubdirectory = directory)
// return temporary
//}
private fun extractDir(zipFile: File, directory: File): File = zipFile.withZipFileSystem { zipFileSystem ->
val temporary = org.jetbrains.kotlin.konan.file.createTempDir(directory.name)
zipFileSystem.file(directory).recursiveCopyTo(temporary)
@@ -162,4 +172,4 @@ internal fun zippedKotlinLibraryChecks(klibFile: File) {
check(extension.isEmpty() || extension == KLIB_FILE_EXTENSION || extension == "jar") {
"KLIB path has unexpected extension: $klibFile"
}
}
}