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

Commit 105633d9 authored by Jeff Tinker's avatar Jeff Tinker Committed by Android Git Automerger
Browse files

am 6826b25c: Merge "Report specific exception type on decrypt with invalid session" into mnc-dev

* commit '6826b25c':
  Report specific exception type on decrypt with invalid session
parents e89c65fb 6826b25c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -15401,6 +15401,7 @@ package android.media {
    field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
    field public static final int ERROR_NO_KEY = 1; // 0x1
    field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
  }
  public static final class MediaCodec.CryptoInfo {
+1 −0
Original line number Diff line number Diff line
@@ -16664,6 +16664,7 @@ package android.media {
    field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
    field public static final int ERROR_NO_KEY = 1; // 0x1
    field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
  }
  public static final class MediaCodec.CryptoInfo {
+9 −0
Original line number Diff line number Diff line
@@ -2029,12 +2029,21 @@ final public class MediaCodec {
         */
        public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4;

        /**
         * This indicates that decryption was attempted on a session that is
         * not opened, which could be due to a failure to open the session,
         * closing the session prematurely, or the session being reclaimed
         * by the resource manager.
         */
        public static final int ERROR_SESSION_NOT_OPENED = 5;

        /** @hide */
        @IntDef({
            ERROR_NO_KEY,
            ERROR_KEY_EXPIRED,
            ERROR_RESOURCE_BUSY,
            ERROR_INSUFFICIENT_OUTPUT_PROTECTION,
            ERROR_SESSION_NOT_OPENED,
        })
        @Retention(RetentionPolicy.SOURCE)
        public @interface CryptoErrorCode {}
+9 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ static struct CryptoErrorCodes {
    jint cryptoErrorKeyExpired;
    jint cryptoErrorResourceBusy;
    jint cryptoErrorInsufficientOutputProtection;
    jint cryptoErrorSessionNotOpened;
} gCryptoErrorCodes;

static struct CodecActionCodes {
@@ -843,6 +844,9 @@ static void throwCryptoException(JNIEnv *env, status_t err, const char *msg) {
        case ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
            err = gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection;
            break;
        case ERROR_DRM_SESSION_NOT_OPENED:
            err = gCryptoErrorCodes.cryptoErrorSessionNotOpened;
            break;
        default:  /* Other negative DRM error codes go out as is. */
            break;
    }
@@ -1689,6 +1693,11 @@ static void android_media_MediaCodec_native_init(JNIEnv *env) {
    gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection =
        env->GetStaticIntField(clazz.get(), field);

    field = env->GetStaticFieldID(clazz.get(), "ERROR_SESSION_NOT_OPENED", "I");
    CHECK(field != NULL);
    gCryptoErrorCodes.cryptoErrorSessionNotOpened =
        env->GetStaticIntField(clazz.get(), field);

    clazz.reset(env->FindClass("android/media/MediaCodec$CodecException"));
    CHECK(clazz.get() != NULL);
    field = env->GetStaticFieldID(clazz.get(), "ACTION_TRANSIENT", "I");