summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2023-03-03 01:26:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-03-03 01:26:57 +0000
commitd470717be90c4a56bdd95988a5ff11d89a233afd (patch)
tree1a025d5de6238c2116be109e3efe1c79c2ecf7e3
parent1bcc280abe1521fd80cb74fe83d999ab56df01ee (diff)
parent5112cfef2a2023a2629a426154547444593e9f9b (diff)
Merge "Stop processing on IOException." into udc-dev
-rw-r--r--services/core/java/com/android/server/pm/ShortcutPackage.java3
-rw-r--r--services/tests/servicestests/Android.bp1
-rw-r--r--services/tests/servicestests/AndroidTest.xml2
-rw-r--r--services/tests/servicestests/data/broken_shortcut.xmlbin0 -> 851 bytes
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java12
5 files changed, 18 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index 67639fbef124..28cb7f0b03a6 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -2048,6 +2048,9 @@ class ShortcutPackage extends ShortcutPackageItem {
shortcutUser.getUserId(), fromBackup);
// Don't use addShortcut(), we don't need to save the icon.
ret.mShortcuts.put(si.getId(), si);
+ } catch (IOException e) {
+ // Don't ignore IO exceptions.
+ throw e;
} catch (Exception e) {
// b/246540168 malformed shortcuts should be ignored
Slog.e(TAG, "Failed parsing shortcut.", e);
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index 3a7b9a49f161..90dbd539f029 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -115,6 +115,7 @@ android_test {
":StubTestApp",
":SuspendTestApp",
":MediaButtonReceiverHolderTestHelperApp",
+ "data/broken_shortcut.xml",
],
java_resources: [
diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml
index d9676470aca3..b304968f3e69 100644
--- a/services/tests/servicestests/AndroidTest.xml
+++ b/services/tests/servicestests/AndroidTest.xml
@@ -21,6 +21,8 @@
<option name="cleanup" value="true" />
<option name="push-file" key="SimpleServiceTestApp3.apk"
value="/data/local/tmp/cts/content/SimpleServiceTestApp3.apk" />
+ <option name="push-file" key="broken_shortcut.xml"
+ value="/data/local/tmp/cts/content/broken_shortcut.xml" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/services/tests/servicestests/data/broken_shortcut.xml b/services/tests/servicestests/data/broken_shortcut.xml
new file mode 100644
index 000000000000..f2b083ddc3a0
--- /dev/null
+++ b/services/tests/servicestests/data/broken_shortcut.xml
Binary files differ
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 861087a5ab54..e65f8cf2a199 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -4007,6 +4007,18 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
// TODO Check all other fields
}
+ public void testLoadCorruptedShortcuts() throws Exception {
+ initService();
+
+ addPackage("com.android.chrome", 0, 0);
+
+ ShortcutUser user = new ShortcutUser(mService, 0);
+
+ File corruptedShortcutPackage = new File("/data/local/tmp/cts/content/",
+ "broken_shortcut.xml");
+ assertNull(ShortcutPackage.loadFromFile(mService, user, corruptedShortcutPackage, false));
+ }
+
public void testSaveCorruptAndLoadUser() throws Exception {
// First, create some shortcuts and save.
runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> {