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

Commit 3f6c77b7 authored by Christopher Tate's avatar Christopher Tate
Browse files

Fix embedded spaces in tar stream EVEN HARDER

Change-Id: I97ac586ff3541a05d73e1e53f680517c15e6c662
parent 65abc453
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -503,10 +503,10 @@ int write_tarfile(const String8& packageName, const String8& domain,
        needExtended = true;
    }

    // Non-7bit-clean path or embedded spaces also mean needing pax extended format
    // Non-7bit-clean path also means needing pax extended format
    if (!needExtended) {
        for (size_t i = 0; i < filepath.length(); i++) {
            if ((filepath[i] & 0x80) != 0 || filepath[i] == ' ') {
            if ((filepath[i] & 0x80) != 0) {
                needExtended = true;
                break;
            }
+3 −2
Original line number Diff line number Diff line
@@ -2859,6 +2859,7 @@ class BackupManagerService extends IBackupManager.Stub {
            final int end = offset + maxChars;
            for (int i = offset; i < end; i++) {
                final byte b = data[i];
                // Numeric fields in tar can terminate with either NUL or SPC
                if (b == 0 || b == ' ') break;
                if (b < '0' || b > ('0' + radix - 1)) {
                    throw new IOException("Invalid number in header");
@@ -2871,8 +2872,8 @@ class BackupManagerService extends IBackupManager.Stub {
        String extractString(byte[] data, int offset, int maxChars) throws IOException {
            final int end = offset + maxChars;
            int eos = offset;
            // tar string fields can end with either NUL or SPC
            while (eos < end && data[eos] != 0 && data[eos] != ' ') eos++;
            // tar string fields terminate early with a NUL
            while (eos < end && data[eos] != 0) eos++;
            return new String(data, offset, eos-offset, "US-ASCII");
        }