diff options
| author | 2023-05-01 01:02:41 -0400 | |
|---|---|---|
| committer | 2023-06-03 00:05:57 -0700 | |
| commit | 3281dc597e84115a032bb3d8d1ff9d5467422993 (patch) | |
| tree | f3080148fb1ef7aaeca9ff3e665b713fc839d666 /src/android | |
| parent | android: Add dedicated show overlay checkbox (diff) | |
| download | yuzu-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.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 | |||
| 7 | import android.net.Uri | 7 | import android.net.Uri |
| 8 | import org.yuzu.yuzu_emu.NativeLibrary | 8 | import org.yuzu.yuzu_emu.NativeLibrary |
| 9 | import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage | 9 | import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage |
| 10 | import java.io.BufferedInputStream | ||
| 10 | import java.io.File | 11 | import java.io.File |
| 11 | import java.io.FileInputStream | 12 | import java.io.FileInputStream |
| 12 | import java.io.FileOutputStream | 13 | import 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 |