Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9d54c2d authored by Kweku Adams's avatar Kweku Adams
Browse files

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
(cherry picked from commit c98fb42b)
Merged-In: Id0ceba345942baf21177f687b8dd85ef001c0a9e
parent da63d3e0
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -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);
            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");