From 427f4f67a716d95ba337dccc5f6bc52596bc82cf Mon Sep 17 00:00:00 2001 From: Pinyao Ting Date: Wed, 10 Jun 2020 15:37:41 -0700 Subject: [PATCH] Throw XmlParserException when client tag cannot be found when parsing slice permissions. There are three call-sites of SliceClientPermissions#createFrom: 1) SlicePermissionManager#writeBackup and SlicePermissionManager#readRestore ensures the client tag exists before calling SliceClientPermissions#createFrom. 2) SlicePermissionManager#getClient is expecting Exception from SliceClientPermissions#createFrom when it fails to parse the xml, and creates clean permission object accordingly. This CL ensures an exception was thrown when the xml parsing cannot be completed. Bug: 121144871 Test: run test suite in forrest frameworks/base/services/tests/uiservicestests/src/com/android/server/slice Change-Id: Id7a239f16b95d16ba17bf651d474dec86492ef47 --- .../com/android/server/slice/SliceClientPermissions.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/core/java/com/android/server/slice/SliceClientPermissions.java b/services/core/java/com/android/server/slice/SliceClientPermissions.java index ab94a59c4d9cd..e241205cfb99e 100644 --- a/services/core/java/com/android/server/slice/SliceClientPermissions.java +++ b/services/core/java/com/android/server/slice/SliceClientPermissions.java @@ -160,6 +160,9 @@ public class SliceClientPermissions implements DirtyTracker, Persistable { // Get to the beginning of the provider. while (parser.getEventType() != XmlPullParser.START_TAG || !TAG_CLIENT.equals(parser.getName())) { + if (parser.getEventType() == XmlPullParser.END_DOCUMENT) { + throw new XmlPullParserException("Can't find client tag in xml"); + } parser.next(); } int depth = parser.getDepth(); @@ -173,6 +176,9 @@ public class SliceClientPermissions implements DirtyTracker, Persistable { parser.next(); while (parser.getDepth() > depth) { + if (parser.getEventType() == XmlPullParser.END_DOCUMENT) { + return provider; + } if (parser.getEventType() == XmlPullParser.START_TAG && TAG_AUTHORITY.equals(parser.getName())) { try {