Fix crash in RequiresPermissionChecker.java

Bug: 265320139
Test: atest --host error_prone_android_framework_test
Change-Id: Ia46d5e7cab4d39888c4975ded18c59d5eb918ffa
This commit is contained in:
Cole Faust 2023-02-01 17:33:40 -08:00
parent 838c317e2d
commit a5f2ae0dcb
2 changed files with 25 additions and 2 deletions

View File

@ -412,11 +412,11 @@ public final class RequiresPermissionChecker extends BugChecker
private static ParsedRequiresPermission parseRequiresPermissionRecursively(
MethodInvocationTree tree, VisitorState state) {
if (ENFORCE_VIA_CONTEXT.matches(tree, state)) {
if (ENFORCE_VIA_CONTEXT.matches(tree, state) && tree.getArguments().size() > 0) {
final ParsedRequiresPermission res = new ParsedRequiresPermission();
res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(0))));
return res;
} else if (ENFORCE_VIA_CHECKER.matches(tree, state)) {
} else if (ENFORCE_VIA_CHECKER.matches(tree, state) && tree.getArguments().size() > 1) {
final ParsedRequiresPermission res = new ParsedRequiresPermission();
res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(1))));
return res;

View File

@ -415,4 +415,27 @@ public class RequiresPermissionCheckerTest {
"}")
.doTest();
}
@Test
public void testInvalidFunctions() {
compilationHelper
.addSourceFile("/android/annotation/RequiresPermission.java")
.addSourceFile("/android/annotation/SuppressLint.java")
.addSourceFile("/android/content/Context.java")
.addSourceLines("Example.java",
"import android.annotation.RequiresPermission;",
"import android.annotation.SuppressLint;",
"import android.content.Context;",
"class Foo extends Context {",
" private static final String RED = \"red\";",
" public void checkPermission() {",
" }",
" @RequiresPermission(RED)",
" // BUG: Diagnostic contains:",
" public void exampleScoped(Context context) {",
" checkPermission();",
" }",
"}")
.doTest();
}
}