From 14e7acd58c8b4f9f2fd517cded5c4e3099fd5989 Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Wed, 27 Apr 2016 10:35:56 +0100 Subject: [PATCH] Fix infinite loop during package-usage.list file upgrade When upgrading from version 0 to version 1 of the file '/data/system/package-usage.list', the PackageManagerService can get stuck in an infinite loop if one of the listed packages does not exist, e.g. because it had been uninstalled. Fix the issue by refactoring the loop. Bug: 28409278 Change-Id: Ia312bd0d04f696240445b710dd6a68b93c5d5946 --- .../com/android/server/pm/PackageManagerService.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index a328f00c8c2d7..a12887769eb59 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1217,12 +1217,7 @@ public class PackageManagerService extends IPackageManager.Stub { // Initial version of the file had no version number and stored one // package-timestamp pair per line. // Note that the first line has already been read from the InputStream. - String line = firstLine; - while (true) { - if (line == null) { - break; - } - + for (String line = firstLine; line != null; line = readLine(in, sb)) { String[] tokens = line.split(" "); if (tokens.length != 2) { throw new IOException("Failed to parse " + line + @@ -1241,8 +1236,6 @@ public class PackageManagerService extends IPackageManager.Stub { reason++) { pkg.mLastPackageUsageTimeInMills[reason] = timestamp; } - - line = readLine(in, sb); } }