Loading tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt +47 −21 Original line number Original line Diff line number Diff line Loading @@ -16,13 +16,21 @@ package com.google.android.lint.parcel package com.google.android.lint.parcel import com.android.tools.lint.detector.api.* import com.android.tools.lint.detector.api.Category import com.android.tools.lint.detector.api.Context import com.android.tools.lint.detector.api.Detector import com.android.tools.lint.detector.api.Implementation import com.android.tools.lint.detector.api.Issue import com.android.tools.lint.detector.api.JavaContext import com.android.tools.lint.detector.api.Scope import com.android.tools.lint.detector.api.Severity import com.android.tools.lint.detector.api.SourceCodeScanner import com.android.tools.lint.detector.api.UastLintUtils import com.intellij.psi.PsiMethod import com.intellij.psi.PsiMethod import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType import com.intellij.psi.PsiType import com.intellij.psi.PsiTypeParameter import com.intellij.psi.PsiTypeParameter import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.UCallExpression import java.util.* @Suppress("UnstableApiUsage") @Suppress("UnstableApiUsage") class SaferParcelChecker : Detector(), SourceCodeScanner { class SaferParcelChecker : Detector(), SourceCodeScanner { Loading Loading @@ -67,7 +75,7 @@ class SaferParcelChecker : Detector(), SourceCodeScanner { """, """, category = Category.SECURITY, category = Category.SECURITY, priority = 8, priority = 8, severity = Severity.WARNING, severity = Severity.ERROR, implementation = Implementation( implementation = Implementation( SaferParcelChecker::class.java, SaferParcelChecker::class.java, Loading @@ -76,30 +84,48 @@ class SaferParcelChecker : Detector(), SourceCodeScanner { ) ) // Parcel // Parcel private val PARCEL_METHOD_READ_SERIALIZABLE = Method("android.os.Parcel", "readSerializable", listOf()) private val PARCEL_METHOD_READ_SERIALIZABLE = private val PARCEL_METHOD_READ_ARRAY_LIST = Method("android.os.Parcel", "readArrayList", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readSerializable", listOf()) private val PARCEL_METHOD_READ_LIST = Method("android.os.Parcel", "readList", listOf("java.util.List", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY_LIST = private val PARCEL_METHOD_READ_PARCELABLE = Method(listOf("T"), "android.os.Parcel", "readParcelable", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readArrayList", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_LIST = Method(listOf("T"), "android.os.Parcel", "readParcelableList", listOf("java.util.List<T>", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_LIST = private val PARCEL_METHOD_READ_SPARSE_ARRAY = Method(listOf("T"), "android.os.Parcel", "readSparseArray", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readList", listOf("java.util.List", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY = Method("android.os.Parcel", "readArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE = private val PARCEL_METHOD_READ_PARCELABLE_ARRAY = Method("android.os.Parcel", "readParcelableArray", listOf("java.lang.ClassLoader")) Method(listOf("T"), "android.os.Parcel", "readParcelable", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_LIST = Method(listOf("T"), "android.os.Parcel", "readParcelableList", listOf("java.util.List<T>", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_SPARSE_ARRAY = Method(listOf("T"), "android.os.Parcel", "readSparseArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY = Method("android.os.Parcel", "readArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_ARRAY = Method("android.os.Parcel", "readParcelableArray", listOf("java.lang.ClassLoader")) // Bundle // Bundle private val BUNDLE_METHOD_GET_SERIALIZABLE = Method("android.os.Bundle", "getSerializable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SERIALIZABLE = private val BUNDLE_METHOD_GET_PARCELABLE = Method(listOf("T"), "android.os.Bundle", "getParcelable", listOf("java.lang.String")) Method("android.os.Bundle", "getSerializable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY_LIST = Method(listOf("T"), "android.os.Bundle", "getParcelableArrayList", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE = private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY = Method("android.os.Bundle", "getParcelableArray", listOf("java.lang.String")) Method(listOf("T"), "android.os.Bundle", "getParcelable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SPARSE_PARCELABLE_ARRAY = Method(listOf("T"), "android.os.Bundle", "getSparseParcelableArray", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY_LIST = Method(listOf("T"), "android.os.Bundle", "getParcelableArrayList", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY = Method("android.os.Bundle", "getParcelableArray", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SPARSE_PARCELABLE_ARRAY = Method(listOf("T"), "android.os.Bundle", "getSparseParcelableArray", listOf("java.lang.String")) // Intent // Intent private val INTENT_METHOD_GET_SERIALIZABLE_EXTRA = Method("android.content.Intent", "getSerializableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_SERIALIZABLE_EXTRA = private val INTENT_METHOD_GET_PARCELABLE_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableExtra", listOf("java.lang.String")) Method("android.content.Intent", "getSerializableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_EXTRA = Method("android.content.Intent", "getParcelableArrayExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_EXTRA = private val INTENT_METHOD_GET_PARCELABLE_ARRAY_LIST_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableArrayListExtra", listOf("java.lang.String")) Method(listOf("T"), "android.content.Intent", "getParcelableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_EXTRA = Method("android.content.Intent", "getParcelableArrayExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_LIST_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableArrayListExtra", listOf("java.lang.String")) // TODO: Write migrators for methods below // TODO: Write migrators for methods below private val PARCEL_METHOD_READ_PARCELABLE_CREATOR = Method("android.os.Parcel", "readParcelableCreator", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_CREATOR = Method("android.os.Parcel", "readParcelableCreator", listOf("java.lang.ClassLoader")) private val MIGRATORS = listOf( private val MIGRATORS = listOf( ReturnMigrator(PARCEL_METHOD_READ_PARCELABLE, setOf("android.os.Parcelable")), ReturnMigrator(PARCEL_METHOD_READ_PARCELABLE, setOf("android.os.Parcelable")), Loading tools/lint/framework/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt +26 −26 Original line number Original line Diff line number Diff line Loading @@ -60,11 +60,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readSerializable() \ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readSerializable() \ API usage [UnsafeParcelApi] API usage [UnsafeParcelApi] Serializable ans = p.readSerializable(); Serializable ans = p.readSerializable(); ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -111,11 +111,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:6: Warning: Unsafe Parcel.readArrayList() API \ src/test/pkg/TestClass.java:6: Error: Unsafe Parcel.readArrayList() API \ usage [UnsafeParcelApi] usage [UnsafeParcelApi] ArrayList ans = p.readArrayList(null); ArrayList ans = p.readArrayList(null); ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -165,11 +165,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:9: Warning: Unsafe Parcel.readList() API usage \ src/test/pkg/TestClass.java:9: Error: Unsafe Parcel.readList() API usage \ [UnsafeParcelApi] [UnsafeParcelApi] p.readList(list, null); p.readList(list, null); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -219,11 +219,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readParcelable() API \ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readParcelable() API \ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent ans = p.readParcelable(null); Intent ans = p.readParcelable(null); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -273,11 +273,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:9: Warning: Unsafe Parcel.readParcelableList() \ src/test/pkg/TestClass.java:9: Error: Unsafe Parcel.readParcelableList() \ API usage [UnsafeParcelApi] API usage [UnsafeParcelApi] List<Intent> ans = p.readParcelableList(list, null); List<Intent> ans = p.readParcelableList(list, null); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -329,11 +329,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:8: Warning: Unsafe Parcel.readSparseArray() API\ src/test/pkg/TestClass.java:8: Error: Unsafe Parcel.readSparseArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] SparseArray<Intent> ans = p.readSparseArray(null); SparseArray<Intent> ans = p.readSparseArray(null); ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -383,11 +383,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readArray() API\ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent[] ans = p.readArray(null); Intent[] ans = p.readArray(null); ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -435,11 +435,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readParcelableArray() API\ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readParcelableArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent[] ans = p.readParcelableArray(null); Intent[] ans = p.readParcelableArray(null); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -489,10 +489,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelable() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelable() API usage [UnsafeParcelApi] Intent ans = b.getParcelable("key"); Intent ans = b.getParcelable("key"); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -540,10 +540,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelableArrayList() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelableArrayList() API usage [UnsafeParcelApi] ArrayList<Intent> ans = b.getParcelableArrayList("key"); ArrayList<Intent> ans = b.getParcelableArrayList("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -591,10 +591,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelableArray() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelableArray() API usage [UnsafeParcelApi] Intent[] ans = b.getParcelableArray("key"); Intent[] ans = b.getParcelableArray("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -642,10 +642,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getSparseParcelableArray() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getSparseParcelableArray() API usage [UnsafeParcelApi] SparseArray<Intent> ans = b.getSparseParcelableArray("key"); SparseArray<Intent> ans = b.getSparseParcelableArray("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -694,10 +694,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:6: Warning: Unsafe Intent.getParcelableExtra() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:6: Error: Unsafe Intent.getParcelableExtra() API usage [UnsafeParcelApi] Intent ans = i.getParcelableExtra("name"); Intent ans = i.getParcelableExtra("name"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading
tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt +47 −21 Original line number Original line Diff line number Diff line Loading @@ -16,13 +16,21 @@ package com.google.android.lint.parcel package com.google.android.lint.parcel import com.android.tools.lint.detector.api.* import com.android.tools.lint.detector.api.Category import com.android.tools.lint.detector.api.Context import com.android.tools.lint.detector.api.Detector import com.android.tools.lint.detector.api.Implementation import com.android.tools.lint.detector.api.Issue import com.android.tools.lint.detector.api.JavaContext import com.android.tools.lint.detector.api.Scope import com.android.tools.lint.detector.api.Severity import com.android.tools.lint.detector.api.SourceCodeScanner import com.android.tools.lint.detector.api.UastLintUtils import com.intellij.psi.PsiMethod import com.intellij.psi.PsiMethod import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType import com.intellij.psi.PsiType import com.intellij.psi.PsiTypeParameter import com.intellij.psi.PsiTypeParameter import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.UCallExpression import java.util.* @Suppress("UnstableApiUsage") @Suppress("UnstableApiUsage") class SaferParcelChecker : Detector(), SourceCodeScanner { class SaferParcelChecker : Detector(), SourceCodeScanner { Loading Loading @@ -67,7 +75,7 @@ class SaferParcelChecker : Detector(), SourceCodeScanner { """, """, category = Category.SECURITY, category = Category.SECURITY, priority = 8, priority = 8, severity = Severity.WARNING, severity = Severity.ERROR, implementation = Implementation( implementation = Implementation( SaferParcelChecker::class.java, SaferParcelChecker::class.java, Loading @@ -76,30 +84,48 @@ class SaferParcelChecker : Detector(), SourceCodeScanner { ) ) // Parcel // Parcel private val PARCEL_METHOD_READ_SERIALIZABLE = Method("android.os.Parcel", "readSerializable", listOf()) private val PARCEL_METHOD_READ_SERIALIZABLE = private val PARCEL_METHOD_READ_ARRAY_LIST = Method("android.os.Parcel", "readArrayList", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readSerializable", listOf()) private val PARCEL_METHOD_READ_LIST = Method("android.os.Parcel", "readList", listOf("java.util.List", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY_LIST = private val PARCEL_METHOD_READ_PARCELABLE = Method(listOf("T"), "android.os.Parcel", "readParcelable", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readArrayList", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_LIST = Method(listOf("T"), "android.os.Parcel", "readParcelableList", listOf("java.util.List<T>", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_LIST = private val PARCEL_METHOD_READ_SPARSE_ARRAY = Method(listOf("T"), "android.os.Parcel", "readSparseArray", listOf("java.lang.ClassLoader")) Method("android.os.Parcel", "readList", listOf("java.util.List", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY = Method("android.os.Parcel", "readArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE = private val PARCEL_METHOD_READ_PARCELABLE_ARRAY = Method("android.os.Parcel", "readParcelableArray", listOf("java.lang.ClassLoader")) Method(listOf("T"), "android.os.Parcel", "readParcelable", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_LIST = Method(listOf("T"), "android.os.Parcel", "readParcelableList", listOf("java.util.List<T>", "java.lang.ClassLoader")) private val PARCEL_METHOD_READ_SPARSE_ARRAY = Method(listOf("T"), "android.os.Parcel", "readSparseArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_ARRAY = Method("android.os.Parcel", "readArray", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_ARRAY = Method("android.os.Parcel", "readParcelableArray", listOf("java.lang.ClassLoader")) // Bundle // Bundle private val BUNDLE_METHOD_GET_SERIALIZABLE = Method("android.os.Bundle", "getSerializable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SERIALIZABLE = private val BUNDLE_METHOD_GET_PARCELABLE = Method(listOf("T"), "android.os.Bundle", "getParcelable", listOf("java.lang.String")) Method("android.os.Bundle", "getSerializable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY_LIST = Method(listOf("T"), "android.os.Bundle", "getParcelableArrayList", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE = private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY = Method("android.os.Bundle", "getParcelableArray", listOf("java.lang.String")) Method(listOf("T"), "android.os.Bundle", "getParcelable", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SPARSE_PARCELABLE_ARRAY = Method(listOf("T"), "android.os.Bundle", "getSparseParcelableArray", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY_LIST = Method(listOf("T"), "android.os.Bundle", "getParcelableArrayList", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_PARCELABLE_ARRAY = Method("android.os.Bundle", "getParcelableArray", listOf("java.lang.String")) private val BUNDLE_METHOD_GET_SPARSE_PARCELABLE_ARRAY = Method(listOf("T"), "android.os.Bundle", "getSparseParcelableArray", listOf("java.lang.String")) // Intent // Intent private val INTENT_METHOD_GET_SERIALIZABLE_EXTRA = Method("android.content.Intent", "getSerializableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_SERIALIZABLE_EXTRA = private val INTENT_METHOD_GET_PARCELABLE_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableExtra", listOf("java.lang.String")) Method("android.content.Intent", "getSerializableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_EXTRA = Method("android.content.Intent", "getParcelableArrayExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_EXTRA = private val INTENT_METHOD_GET_PARCELABLE_ARRAY_LIST_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableArrayListExtra", listOf("java.lang.String")) Method(listOf("T"), "android.content.Intent", "getParcelableExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_EXTRA = Method("android.content.Intent", "getParcelableArrayExtra", listOf("java.lang.String")) private val INTENT_METHOD_GET_PARCELABLE_ARRAY_LIST_EXTRA = Method(listOf("T"), "android.content.Intent", "getParcelableArrayListExtra", listOf("java.lang.String")) // TODO: Write migrators for methods below // TODO: Write migrators for methods below private val PARCEL_METHOD_READ_PARCELABLE_CREATOR = Method("android.os.Parcel", "readParcelableCreator", listOf("java.lang.ClassLoader")) private val PARCEL_METHOD_READ_PARCELABLE_CREATOR = Method("android.os.Parcel", "readParcelableCreator", listOf("java.lang.ClassLoader")) private val MIGRATORS = listOf( private val MIGRATORS = listOf( ReturnMigrator(PARCEL_METHOD_READ_PARCELABLE, setOf("android.os.Parcelable")), ReturnMigrator(PARCEL_METHOD_READ_PARCELABLE, setOf("android.os.Parcelable")), Loading
tools/lint/framework/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt +26 −26 Original line number Original line Diff line number Diff line Loading @@ -60,11 +60,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readSerializable() \ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readSerializable() \ API usage [UnsafeParcelApi] API usage [UnsafeParcelApi] Serializable ans = p.readSerializable(); Serializable ans = p.readSerializable(); ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -111,11 +111,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:6: Warning: Unsafe Parcel.readArrayList() API \ src/test/pkg/TestClass.java:6: Error: Unsafe Parcel.readArrayList() API \ usage [UnsafeParcelApi] usage [UnsafeParcelApi] ArrayList ans = p.readArrayList(null); ArrayList ans = p.readArrayList(null); ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -165,11 +165,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:9: Warning: Unsafe Parcel.readList() API usage \ src/test/pkg/TestClass.java:9: Error: Unsafe Parcel.readList() API usage \ [UnsafeParcelApi] [UnsafeParcelApi] p.readList(list, null); p.readList(list, null); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -219,11 +219,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readParcelable() API \ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readParcelable() API \ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent ans = p.readParcelable(null); Intent ans = p.readParcelable(null); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -273,11 +273,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:9: Warning: Unsafe Parcel.readParcelableList() \ src/test/pkg/TestClass.java:9: Error: Unsafe Parcel.readParcelableList() \ API usage [UnsafeParcelApi] API usage [UnsafeParcelApi] List<Intent> ans = p.readParcelableList(list, null); List<Intent> ans = p.readParcelableList(list, null); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -329,11 +329,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:8: Warning: Unsafe Parcel.readSparseArray() API\ src/test/pkg/TestClass.java:8: Error: Unsafe Parcel.readSparseArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] SparseArray<Intent> ans = p.readSparseArray(null); SparseArray<Intent> ans = p.readSparseArray(null); ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -383,11 +383,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readArray() API\ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent[] ans = p.readArray(null); Intent[] ans = p.readArray(null); ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -435,11 +435,11 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Parcel.readParcelableArray() API\ src/test/pkg/TestClass.java:7: Error: Unsafe Parcel.readParcelableArray() API\ usage [UnsafeParcelApi] usage [UnsafeParcelApi] Intent[] ans = p.readParcelableArray(null); Intent[] ans = p.readParcelableArray(null); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -489,10 +489,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelable() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelable() API usage [UnsafeParcelApi] Intent ans = b.getParcelable("key"); Intent ans = b.getParcelable("key"); ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -540,10 +540,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelableArrayList() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelableArrayList() API usage [UnsafeParcelApi] ArrayList<Intent> ans = b.getParcelableArrayList("key"); ArrayList<Intent> ans = b.getParcelableArrayList("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -591,10 +591,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getParcelableArray() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getParcelableArray() API usage [UnsafeParcelApi] Intent[] ans = b.getParcelableArray("key"); Intent[] ans = b.getParcelableArray("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -642,10 +642,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:7: Warning: Unsafe Bundle.getSparseParcelableArray() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:7: Error: Unsafe Bundle.getSparseParcelableArray() API usage [UnsafeParcelApi] SparseArray<Intent> ans = b.getSparseParcelableArray("key"); SparseArray<Intent> ans = b.getSparseParcelableArray("key"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading Loading @@ -694,10 +694,10 @@ class SaferParcelCheckerTest : LintDetectorTest() { .run() .run() .expect( .expect( """ """ src/test/pkg/TestClass.java:6: Warning: Unsafe Intent.getParcelableExtra() API usage [UnsafeParcelApi] src/test/pkg/TestClass.java:6: Error: Unsafe Intent.getParcelableExtra() API usage [UnsafeParcelApi] Intent ans = i.getParcelableExtra("name"); Intent ans = i.getParcelableExtra("name"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 errors, 1 warnings 1 errors, 0 warnings """.addLineContinuation() """.addLineContinuation() ) ) } } Loading