From ba13646d7dcf00fd9eb799b866dd7b4db423aa2d Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Tue, 21 May 2019 10:20:38 -0700 Subject: [PATCH] Use separate variables as indices in nested loops Otherwise the loop might be stuck forever if - mActiveWatchers.size() > mActiveWatchers.get(0).size() Test: adb shell dumpsys appops Fixes: 133230634 Change-Id: I324b1750cf1e45a543e7a498407fbeadc98aba1b --- .../com/android/server/appop/AppOpsService.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 3bed9c3dc7e10..0a7684553c080 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -3814,8 +3814,9 @@ public class AppOpsService extends IAppOpsService.Stub { if (mActiveWatchers.size() > 0 && dumpMode < 0) { needSep = true; boolean printedHeader = false; - for (int i = 0; i < mActiveWatchers.size(); i++) { - final SparseArray activeWatchers = mActiveWatchers.valueAt(i); + for (int watcherNum = 0; watcherNum < mActiveWatchers.size(); watcherNum++) { + final SparseArray activeWatchers = + mActiveWatchers.valueAt(watcherNum); if (activeWatchers.size() <= 0) { continue; } @@ -3833,16 +3834,16 @@ public class AppOpsService extends IAppOpsService.Stub { } pw.print(" "); pw.print(Integer.toHexString(System.identityHashCode( - mActiveWatchers.keyAt(i)))); + mActiveWatchers.keyAt(watcherNum)))); pw.println(" ->"); pw.print(" ["); final int opCount = activeWatchers.size(); - for (i = 0; i < opCount; i++) { - if (i > 0) { + for (int opNum = 0; opNum < opCount; opNum++) { + if (opNum > 0) { pw.print(' '); } - pw.print(AppOpsManager.opToName(activeWatchers.keyAt(i))); - if (i < opCount - 1) { + pw.print(AppOpsManager.opToName(activeWatchers.keyAt(opNum))); + if (opNum < opCount - 1) { pw.print(','); } }