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

Commit fce84f03 authored by Svet Ganov's avatar Svet Ganov Committed by Svetoslav Ganov
Browse files

Crash apps that print malformed or password protected PDFs.

If apps are writing malformed content (typically not a PDF file) or if the
PDF content they provide to the print system is password protected, are now
crashed as both of these are app bugs.

bug:17636435

Change-Id: Ifce6a3199e587448dd38f6a84290a965c24b698b
parent e1678ddf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,4 +37,5 @@ oneway interface IPrintDocumentAdapter {
    void write(in PageRange[] pages, in ParcelFileDescriptor fd,
            IWriteResultCallback callback, int sequence);
    void finish();
    void kill(String reason);
}
+21 −0
Original line number Diff line number Diff line
@@ -633,6 +633,17 @@ public final class PrintManager {
            }
        }

        @Override
        public void kill(String reason) {
            synchronized (mLock) {
                // If destroyed the handler is null.
                if (!isDestroyedLocked()) {
                    mHandler.obtainMessage(MyHandler.MSG_ON_KILL,
                            reason).sendToTarget();
                }
            }
        }

        @Override
        public void onActivityPaused(Activity activity) {
            /* do nothing */
@@ -719,6 +730,7 @@ public final class PrintManager {
            public static final int MSG_ON_LAYOUT = 2;
            public static final int MSG_ON_WRITE = 3;
            public static final int MSG_ON_FINISH = 4;
            public static final int MSG_ON_KILL = 5;

            public MyHandler(Looper looper) {
                super(looper, null, true);
@@ -794,6 +806,15 @@ public final class PrintManager {
                        }
                    } break;

                    case MSG_ON_KILL: {
                        if (DEBUG) {
                            Log.i(LOG_TAG, "onKill()");
                        }

                        String reason = (String) message.obj;
                        throw new RuntimeException(reason);
                    }

                    default: {
                        throw new IllegalArgumentException("Unknown message: "
                                + message.what);
+11 −2
Original line number Diff line number Diff line
@@ -89,8 +89,17 @@ static jlong nativeOpen(JNIEnv* env, jclass thiz, jint fd, jlong size) {

    if (!document) {
        const long error = FPDF_GetLastError();
        switch (error) {
            case FPDF_ERR_PASSWORD:
            case FPDF_ERR_SECURITY: {
                jniThrowException(env, "java/lang/SecurityException",
                        "cannot create document. Error:" + error);
            } break;
            default: {
                jniThrowException(env, "java/io/IOException",
                        "cannot create document. Error:" + error);
            } break;
        }
        destroyLibraryIfNeeded();
        return -1;
    }
+11 −2
Original line number Diff line number Diff line
@@ -82,8 +82,17 @@ static jlong nativeCreate(JNIEnv* env, jclass thiz, jint fd, jlong size) {

    if (!document) {
        const long error = FPDF_GetLastError();
        switch (error) {
            case FPDF_ERR_PASSWORD:
            case FPDF_ERR_SECURITY: {
                jniThrowException(env, "java/lang/SecurityException",
                        "cannot create document. Error:" + error);
            } break;
            default: {
                jniThrowException(env, "java/io/IOException",
                        "cannot create document. Error:" + error);
            } break;
        }
        destroyLibraryIfNeeded();
        return -1;
    }
+4 −0
Original line number Diff line number Diff line
@@ -59,6 +59,10 @@ public final class PdfEditor {
     *
     * @param input Seekable file descriptor to read from.
     *
     * @throws java.io.IOException If an error occurs while reading the file.
     * @throws java.lang.SecurityException If the file requires a password or
     *         the security scheme is not supported.
     *
     * @see #close()
     */
    public PdfEditor(@NonNull ParcelFileDescriptor input) throws IOException {
Loading