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

Commit 20e8406c authored by Nan Wu's avatar Nan Wu Committed by Android (Google) Code Review
Browse files

Merge "Log instances where ParcelFileDescriptor.open is called with mode w,...

Merge "Log instances where ParcelFileDescriptor.open is called with mode w, but without a or t. Starting in Android Q, the ParcelFileDescriptor#parseMode method no longer implicitly adds the truncate flag to mode "w". This commit adds logging to the central location where the result of parseMode would typically be passed to identify apps potentially affected by this change. Test: manual test."
parents 6046c68a 40a001d5
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import static android.system.OsConstants.S_IWOTH;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.ContentProvider;
@@ -45,6 +46,7 @@ import android.system.Os;
import android.system.OsConstants;
import android.system.StructStat;
import android.util.Log;
import android.util.Slog;

import dalvik.system.CloseGuard;
import dalvik.system.VMRuntime;
@@ -329,6 +331,17 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
    }

    private static FileDescriptor openInternal(File file, int mode) throws FileNotFoundException {
        if ((mode & MODE_WRITE_ONLY) != 0 && (mode & MODE_APPEND) == 0
                && (mode & MODE_TRUNCATE) == 0 && ((mode & MODE_READ_ONLY) == 0)
                && file.exists()) {
            String packageName = ActivityThread.currentApplication().getApplicationContext()
                    .getPackageName();
            Slog.wtfQuiet(TAG, "ParcelFileDescriptor.open is called with w without t or a or r, "
                    + "which will have a different behavior beginning in Android Q."
                    + "\nPackage Name: " + packageName + "\nMode: " + mode
                    + "\nFilename: " + file.getPath());
        }

        final int flags = FileUtils.translateModePfdToPosix(mode) | ifAtLeastQ(O_CLOEXEC);

        int realMode = S_IRWXU | S_IRWXG;