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

Commit 006a6bb2 authored by Abhijeet Kaur's avatar Abhijeet Kaur
Browse files

Use dev/null instead of tmp file

Use dev/null fd (instead of using fd from temporary file) when
screenshot fd is passed as null, as file deletion does not need
to be handled for dev/null.

Test: Take interactive bugreport (which does not need screenshot)
manually using shell (which calls bugreport API)

Change-Id: I1719899e6cf3bffe1a96849691c051ff4f3a05ec
parent 899f3971
Loading
Loading
Loading
Loading
+6 −29
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ import com.android.internal.util.Preconditions;
import libcore.io.IoUtils;

import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.Executor;
@@ -146,7 +146,6 @@ public final class BugreportManager {
            @NonNull BugreportParams params,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull BugreportCallback callback) {
        File tmpScreenshotFile = null;
        try {
            Preconditions.checkNotNull(bugreportFd);
            Preconditions.checkNotNull(params);
@@ -155,13 +154,10 @@ public final class BugreportManager {

            if (screenshotFd == null) {
                // Binder needs a valid File Descriptor to be passed
                tmpScreenshotFile = File.createTempFile("tmp", ".png");
                screenshotFd = ParcelFileDescriptor.open(tmpScreenshotFile,
                screenshotFd = ParcelFileDescriptor.open(new File("/dev/null"),
                        ParcelFileDescriptor.MODE_READ_ONLY);
            }
            DumpstateListener dsListener = new DumpstateListener(executor,
                    callback, tmpScreenshotFile);

            DumpstateListener dsListener = new DumpstateListener(executor, callback);
            // Note: mBinder can get callingUid from the binder transaction.
            mBinder.startBugreport(-1 /* callingUid */,
                    mContext.getOpPackageName(),
@@ -169,13 +165,9 @@ public final class BugreportManager {
                    screenshotFd.getFileDescriptor(),
                    params.getMode(), dsListener);
        } catch (RemoteException e) {
            deleteFile(tmpScreenshotFile);
            throw e.rethrowFromSystemServer();
        } catch (IOException e) {
            // Need to delete the file if it was created but failed while trying to get fd
            deleteFile(tmpScreenshotFile);
            Log.e(TAG, "Not able to create/open temporary screenshot file ", e);
            callback.onError(BugreportCallback.BUGREPORT_ERROR_RUNTIME);
        } catch (FileNotFoundException e) {
            Log.wtf(TAG, "Not able to find /dev/null file: ", e);
        } finally {
            // We can close the file descriptors here because binder would have duped them.
            IoUtils.closeQuietly(bugreportFd);
@@ -197,26 +189,13 @@ public final class BugreportManager {
        }
    }

    private void deleteFile(@Nullable File tmpScreenshotFile) {
        try {
            if (tmpScreenshotFile != null && tmpScreenshotFile.exists()) {
                tmpScreenshotFile.delete();
            }
        } catch (SecurityException e) {
            Log.e(TAG, "Not able to delete temporary screenshot file ", e);
        }
    }

    private final class DumpstateListener extends IDumpstateListener.Stub {
        private final Executor mExecutor;
        private final BugreportCallback mCallback;
        private final File mTmpScreenshotFile;

        DumpstateListener(Executor executor, BugreportCallback callback,
                @Nullable File tmpScreenshotFile) {
        DumpstateListener(Executor executor, BugreportCallback callback) {
            mExecutor = executor;
            mCallback = callback;
            mTmpScreenshotFile = tmpScreenshotFile;
        }

        @Override
@@ -240,7 +219,6 @@ public final class BugreportManager {
                });
            } finally {
                Binder.restoreCallingIdentity(identity);
                deleteFile(mTmpScreenshotFile);
            }
        }

@@ -253,7 +231,6 @@ public final class BugreportManager {
                });
            } finally {
                Binder.restoreCallingIdentity(identity);
                deleteFile(mTmpScreenshotFile);
            }
        }