summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-05-01 01:02:41 -0400
committerGravatar bunnei2023-06-03 00:05:57 -0700
commit3281dc597e84115a032bb3d8d1ff9d5467422993 (patch)
treef3080148fb1ef7aaeca9ff3e665b713fc839d666 /src/android
parentandroid: Add dedicated show overlay checkbox (diff)
downloadyuzu-3281dc597e84115a032bb3d8d1ff9d5467422993.tar.gz
yuzu-3281dc597e84115a032bb3d8d1ff9d5467422993.tar.xz
yuzu-3281dc597e84115a032bb3d8d1ff9d5467422993.zip
android: Fix potential zip traversal exploit
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GpuDriverHelper.kt12
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
7import android.net.Uri 7import android.net.Uri
8import org.yuzu.yuzu_emu.NativeLibrary 8import org.yuzu.yuzu_emu.NativeLibrary
9import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage 9import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage
10import java.io.BufferedInputStream
10import java.io.File 11import java.io.File
11import java.io.FileInputStream 12import java.io.FileInputStream
12import java.io.FileOutputStream 13import java.io.FileOutputStream
@@ -28,12 +29,17 @@ object GpuDriverHelper {
28 if (!dir.exists()) dir.mkdirs() 29 if (!dir.exists()) dir.mkdirs()
29 30
30 // Unpack the files. 31 // Unpack the files.
31 val zis = ZipInputStream(FileInputStream(zipFilePath)) 32 val inputStream = FileInputStream(zipFilePath)
33 val zis = ZipInputStream(BufferedInputStream(inputStream))
32 val buffer = ByteArray(1024) 34 val buffer = ByteArray(1024)
33 var ze = zis.nextEntry 35 var ze = zis.nextEntry
34 while (ze != null) { 36 while (ze != null) {
35 val fileName = ze.name 37 val newFile = File(destDir, ze.name)
36 val newFile = File(destDir + fileName) 38 val canonicalPath = newFile.canonicalPath
39 if (!canonicalPath.startsWith(destDir + ze.name)) {
40 throw SecurityException("Zip file attempted path traversal! " + ze.name)
41 }
42
37 newFile.parentFile!!.mkdirs() 43 newFile.parentFile!!.mkdirs()
38 val fos = FileOutputStream(newFile) 44 val fos = FileOutputStream(newFile)
39 var len: Int 45 var len: Int