diff options
author | Charles Lombardo <clombardo169@gmail.com> | 2023-05-01 01:02:41 -0400 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2023-06-03 00:05:57 -0700 |
commit | 3281dc597e84115a032bb3d8d1ff9d5467422993 (patch) | |
tree | f3080148fb1ef7aaeca9ff3e665b713fc839d666 /src | |
parent | d1fb7ea58b987fe1e8013986c3166d67e74bc391 (diff) |
android: Fix potential zip traversal exploit
Diffstat (limited to 'src')
-rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt index 236c7bc23..23986692a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt @@ -7,6 +7,7 @@ import android.content.Context import android.net.Uri import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage +import java.io.BufferedInputStream import java.io.File import java.io.FileInputStream import java.io.FileOutputStream @@ -28,12 +29,17 @@ object GpuDriverHelper { if (!dir.exists()) dir.mkdirs() // Unpack the files. - val zis = ZipInputStream(FileInputStream(zipFilePath)) + val inputStream = FileInputStream(zipFilePath) + val zis = ZipInputStream(BufferedInputStream(inputStream)) val buffer = ByteArray(1024) var ze = zis.nextEntry while (ze != null) { - val fileName = ze.name - val newFile = File(destDir + fileName) + val newFile = File(destDir, ze.name) + val canonicalPath = newFile.canonicalPath + if (!canonicalPath.startsWith(destDir + ze.name)) { + throw SecurityException("Zip file attempted path traversal! " + ze.name) + } + newFile.parentFile!!.mkdirs() val fos = FileOutputStream(newFile) var len: Int |