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

Commit bcebf786 authored by Adam Lesinski's avatar Adam Lesinski Committed by The Android Automerger
Browse files

UsageStats: Gracefully handle corrupt filenames

Not sure how useful this is, since renames should be atomic. If the filesystem
is corrupt I'm sure other parts of the system will break. Good to be safe though!

Bug:22172659
Change-Id: Iad339be2869d170bcf736c59feb93830a51905e1
parent 019c689e
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -191,7 +191,11 @@ class UsageStatsDatabase {

                for (File f : files) {
                    final AtomicFile af = new AtomicFile(f);
                    try {
                        mSortedStatFiles[i].put(UsageStatsXml.parseBeginTime(af), af);
                    } catch (IOException e) {
                        Slog.e(TAG, "failed to index file: " + f, e);
                    }
                }
            }
        }
@@ -506,7 +510,14 @@ class UsageStatsDatabase {
                if (path.endsWith(BAK_SUFFIX)) {
                    f = new File(path.substring(0, path.length() - BAK_SUFFIX.length()));
                }
                long beginTime = UsageStatsXml.parseBeginTime(f);

                long beginTime;
                try {
                    beginTime = UsageStatsXml.parseBeginTime(f);
                } catch (IOException e) {
                    beginTime = 0;
                }

                if (beginTime < expiryTime) {
                    new AtomicFile(f).delete();
                }
+8 −3
Original line number Diff line number Diff line
@@ -33,11 +33,11 @@ public class UsageStatsXml {
    private static final String VERSION_ATTR = "version";
    static final String CHECKED_IN_SUFFIX = "-c";

    public static long parseBeginTime(AtomicFile file) {
    public static long parseBeginTime(AtomicFile file) throws IOException {
        return parseBeginTime(file.getBaseFile());
    }

    public static long parseBeginTime(File file) {
    public static long parseBeginTime(File file) throws IOException {
        String name = file.getName();

        // Eat as many occurrences of -c as possible. This is due to a bug where -c
@@ -47,7 +47,12 @@ public class UsageStatsXml {
        while (name.endsWith(CHECKED_IN_SUFFIX)) {
            name = name.substring(0, name.length() - CHECKED_IN_SUFFIX.length());
        }

        try {
            return Long.parseLong(name);
        } catch (NumberFormatException e) {
            throw new IOException(e);
        }
    }

    public static void read(AtomicFile file, IntervalStats statsOut) throws IOException {