@@ -3,6 +3,8 @@ package com.androidvip.sysctlgui.data.utils
33import android.content.ContentResolver
44import android.net.Uri
55import android.util.Log
6+ import android.webkit.MimeTypeMap
7+ import com.androidvip.sysctlgui.domain.exceptions.InvalidFileException
68import com.androidvip.sysctlgui.domain.exceptions.NoParameterFoundException
79import com.androidvip.sysctlgui.domain.models.KernelParam
810import com.androidvip.sysctlgui.utils.isValidSysctlOutputLine
@@ -18,6 +20,7 @@ class PresetsFileProcessor(
1820 suspend fun getKernelParamsFromUri (
1921 uri : Uri
2022 ): List <KernelParam > = withContext(ioDispatcher) {
23+ checkFileType(uri)
2124 contentResolver.openInputStream(uri)?.use { inputStream ->
2225 val lines = inputStream.bufferedReader().readLines()
2326 val params = lines.mapNotNull { line ->
@@ -56,4 +59,19 @@ class PresetsFileProcessor(
5659 }
5760 } ? : throw IOException (" Failed to open output stream for URI: $uri " )
5861 }
59- }
62+
63+
64+ private suspend fun checkFileType (uri : Uri ) = withContext(ioDispatcher) {
65+ val mimeType = contentResolver.getType(uri)
66+ if (mimeType != null && mimeType.startsWith(" text/" )) {
67+ return @withContext // It's likely a text file, we're good.
68+ }
69+
70+ val fileExtension = MimeTypeMap .getFileExtensionFromUrl(uri.toString()).lowercase()
71+ val allowedExtensions = listOf (" conf" , " cfg" , " config" , " ini" , " txt" )
72+
73+ if (fileExtension in allowedExtensions) return @withContext
74+
75+ throw InvalidFileException (" Unsupported file type. MIME type: $mimeType ." )
76+ }
77+ }
0 commit comments