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

Commit 40936b30 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Ensure file modes passed to PFD are valid." into main

parents 1ad94356 2edcf7a4
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -1538,6 +1538,22 @@ public final class FileUtils {

    /** @hide */
    public static int translateModeStringToPosix(String mode) {
        if (Flags.enforceStrictFileModeCheck()) {
            // Note: since the list of supported modes have been documented already in
            // ParcelFileDescriptor#parseMode(), this change is not protected by a compat change.
            // Also, we're explicitly checking the permutations of the supported modes here to avoid
            // throwing an exception for malformed mode strings (see b/414387646 for context).
            return switch (mode) {
                case "r" -> O_RDONLY;
                case "w" -> O_WRONLY | O_CREAT;
                case "wt", "tw" -> O_WRONLY | O_CREAT | O_TRUNC;
                case "wa", "aw" -> O_WRONLY | O_CREAT | O_APPEND;
                case "rw", "wr" -> O_RDWR | O_CREAT;
                case "rwt", "rtw", "wrt", "wtr", "trw", "twr" -> O_RDWR | O_CREAT | O_TRUNC;
                default -> throw new IllegalArgumentException("Bad mode: " + mode);
            };
        }

        // Quick check for invalid chars
        for (int i = 0; i < mode.length(); i++) {
            switch (mode.charAt(i)) {
+10 −0
Original line number Diff line number Diff line
@@ -252,6 +252,16 @@ flag {
    bug: "440630034"
}

flag {
    name: "enforce_strict_file_mode_check"
    namespace: "backstage_power"
    description: "Throw an IllegalArgumentException if the file mode passed to ParcelFileDescriptor#parseMode is unknown."
    bug: "414387646"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "get_private_space_settings"
    namespace: "profile_experiences"
+27 −1
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ import static org.junit.Assert.fail;

import android.os.FileUtils.MemoryPipe;
import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.ravenwood.RavenwoodRule;
import android.provider.DocumentsContract.Document;
import android.system.Os;
@@ -88,6 +92,9 @@ public class FileUtilsTest {
    @Rule
    public final RavenwoodRule mRavenwood = new RavenwoodRule();

    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    private static final String TEST_DATA =
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

@@ -675,7 +682,8 @@ public class FileUtilsTest {
    }

    @Test
    public void testTranslateMode() {
    @RequiresFlagsDisabled(Flags.FLAG_ENFORCE_STRICT_FILE_MODE_CHECK)
    public void testTranslateMode_noStrictModeCheck() {
        assertTranslate("r", O_RDONLY, MODE_READ_ONLY);

        assertTranslate("rw", O_RDWR | O_CREAT,
@@ -693,6 +701,24 @@ public class FileUtilsTest {
                MODE_WRITE_ONLY | MODE_CREATE | MODE_APPEND);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ENFORCE_STRICT_FILE_MODE_CHECK)
    public void testTranslateMode() {
        assertTranslate("r", O_RDONLY, MODE_READ_ONLY);

        assertTranslate("rw", O_RDWR | O_CREAT,
                MODE_READ_WRITE | MODE_CREATE);
        assertTranslate("rwt", O_RDWR | O_CREAT | O_TRUNC,
                MODE_READ_WRITE | MODE_CREATE | MODE_TRUNCATE);

        assertTranslate("w", O_WRONLY | O_CREAT,
                MODE_WRITE_ONLY | MODE_CREATE | MODE_CREATE);
        assertTranslate("wt", O_WRONLY | O_CREAT | O_TRUNC,
                MODE_WRITE_ONLY | MODE_CREATE | MODE_TRUNCATE);
        assertTranslate("wa", O_WRONLY | O_CREAT | O_APPEND,
                MODE_WRITE_ONLY | MODE_CREATE | MODE_APPEND);
    }

    @Test
    public void testMalformedTransate_int() {
        try {