Handle invalid data during job loading.
Catch exceptions that may be thrown if invalid data ended up in the persisted job file. Bug: 246541702 Bug: 246542132 Bug: 246542285 Bug: 246542330 Test: install test app with invalid job config, start app to schedule job, then reboot device Change-Id: Id0ceba345942baf21177f687b8dd85ef001c0a9e
This commit is contained in:
@@ -742,6 +742,10 @@ public final class JobStore {
|
||||
}
|
||||
} catch (XmlPullParserException | IOException e) {
|
||||
Slog.wtf(TAG, "Error jobstore xml.", 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 {
|
||||
if (mPersistInfo.countAllJobsLoaded < 0) { // Only set them once.
|
||||
mPersistInfo.countAllJobsLoaded = numJobs;
|
||||
@@ -890,6 +894,9 @@ public final class JobStore {
|
||||
} 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>
|
||||
@@ -986,8 +993,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;
|
||||
|
||||
Reference in New Issue
Block a user