diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java index 810bd636de074..7ad1735210c50 100644 --- a/core/java/android/os/ParcelFileDescriptor.java +++ b/core/java/android/os/ParcelFileDescriptor.java @@ -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;