diff options
| author | 2023-03-29 03:52:02 +0000 | |
|---|---|---|
| committer | 2023-03-29 03:52:02 +0000 | |
| commit | ba8c9b4f2de29be14b5648fb1b437a747fcc445d (patch) | |
| tree | 382f8d254269c0b05ef74203641c86563ab6e712 | |
| parent | e6ffbc91fbd1f3e04f7c388b65e0f68659d55576 (diff) | |
| parent | a9d54c2d90cb67cf982073b40a85b886fef70f2e (diff) | |
Merge "Handle invalid data during job loading." into qt-dev
| -rw-r--r-- | services/core/java/com/android/server/job/JobStore.java | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 4ef37a2e484d..d17f8cb3f74a 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -459,6 +459,10 @@ public final class JobStore { if (DEBUG) { Slog.d(TAG, "Error persisting bundle.", e); } + } catch (Exception e) { + // Crashing at this point would result in a boot loop, so live with a general + // Exception for system stability's sake. + Slog.wtf(TAG, "Unexpected exception", e); } finally { mPersistInfo.countAllJobsSaved = numJobs; mPersistInfo.countSystemServerJobsSaved = numSystemJobs; @@ -807,6 +811,15 @@ public final class JobStore { } catch (NumberFormatException e) { Slog.d(TAG, "Error reading constraints, skipping."); return null; + } catch (XmlPullParserException e) { + Slog.d(TAG, "Error Parser Exception.", e); + return null; + } catch (IOException e) { + Slog.d(TAG, "Error I/O Exception.", e); + return null; + } catch (IllegalArgumentException e) { + Slog.e(TAG, "Constraints contained invalid data", e); + return null; } parser.next(); // Consume </constraints> @@ -902,8 +915,14 @@ public final class JobStore { return null; } - PersistableBundle extras = PersistableBundle.restoreFromXml(parser); - jobBuilder.setExtras(extras); + final PersistableBundle extras; + try { + extras = PersistableBundle.restoreFromXml(parser); + jobBuilder.setExtras(extras); + } catch (IllegalArgumentException e) { + Slog.e(TAG, "Persisted extras contained invalid data", e); + return null; + } parser.nextTag(); // Consume </extras> final JobInfo builtJob; @@ -950,7 +969,8 @@ public final class JobStore { return new JobInfo.Builder(jobId, cname); } - private void buildConstraintsFromXml(JobInfo.Builder jobBuilder, XmlPullParser parser) { + private void buildConstraintsFromXml(JobInfo.Builder jobBuilder, XmlPullParser parser) + throws XmlPullParserException, IOException { String val; final String netCapabilities = parser.getAttributeValue(null, "net-capabilities"); |