diff options
author | Pinyao Ting <pinyaoting@google.com> | 2020-06-10 15:37:41 -0700 |
---|---|---|
committer | Tobias Thierer <tobiast@google.com> | 2020-06-11 18:59:03 +0100 |
commit | 4c0218e8aaada338305e70f486af95134744b92c (patch) | |
tree | d4241f08da145a36458099015890dbbd13606a15 | |
parent | 323e46bc26bdc77ce5210f32f620f065e87c65f5 (diff) | |
download | base-4c0218e8aaada338305e70f486af95134744b92c.tar.gz |
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
(cherry picked from commit 427f4f67a716d95ba337dccc5f6bc52596bc82cf)
-rw-r--r-- | services/core/java/com/android/server/slice/SliceClientPermissions.java | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/slice/SliceClientPermissions.java b/services/core/java/com/android/server/slice/SliceClientPermissions.java index e461e0d43735..9562f2f8b339 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 { |