From eeaa4d65447bc1245339be6b7d909dd828f7622a Mon Sep 17 00:00:00 2001 From: Amy Zhang Date: Thu, 19 Nov 2020 12:43:37 -0800 Subject: [PATCH] Add a Descrambler KeyToken validator Test: make services Bug: 173712256 Bug: 173713008 Change-Id: I9754b8d57c7bd5da3647a57ec8db6f3b5e621c88 --- .../android/media/tv/tuner/Descrambler.java | 23 ++++++++++++++++--- .../media/tv/tuner/filter/RecordSettings.java | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/media/java/android/media/tv/tuner/Descrambler.java b/media/java/android/media/tv/tuner/Descrambler.java index 5f79dc52a2f1b..2217eb3a1dc11 100644 --- a/media/java/android/media/tv/tuner/Descrambler.java +++ b/media/java/android/media/tv/tuner/Descrambler.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.SystemApi; import android.media.tv.tuner.Tuner.Result; import android.media.tv.tuner.filter.Filter; +import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -115,9 +116,9 @@ public class Descrambler implements AutoCloseable { * keys for different purposes. * * @param keyToken the token to be used to link the key slot. Use {@link Tuner.INVALID_KEYTOKEN} - * to remove the to remove the current key from descrambler. If the current keyToken - * comes from MediaCas session, use {@link Tuner.INVALID_KEYTOKEN} to remove current key - * before close MediaCas session. + * to remove the current key from descrambler. If the current keyToken comes from a + * MediaCas session, use {@link Tuner.INVALID_KEYTOKEN} to remove current key before + * closing the MediaCas session. * @return result status of the operation. */ @Result @@ -125,6 +126,9 @@ public class Descrambler implements AutoCloseable { synchronized (mLock) { TunerUtils.checkResourceState(TAG, mIsClosed); Objects.requireNonNull(keyToken, "key token must not be null"); + if (!isValidKeyToken(keyToken)) { + return Tuner.RESULT_INVALID_ARGUMENT; + } return nativeSetKeyToken(keyToken); } } @@ -147,4 +151,17 @@ public class Descrambler implements AutoCloseable { } } + private boolean isValidKeyToken(byte[] keyToken) { + if (keyToken.length == 0 || keyToken.length > 16) { + Log.d(TAG, "Invalid key token size: " + (keyToken.length * 8) + " bit."); + return false; + } + for (int i = 0; i < keyToken.length; i++) { + if (keyToken[i] < 0) { + Log.d(TAG, "Invalid key token."); + return false; + } + } + return true; + } } diff --git a/media/java/android/media/tv/tuner/filter/RecordSettings.java b/media/java/android/media/tv/tuner/filter/RecordSettings.java index 52ce208f251e5..91992afadb3e3 100644 --- a/media/java/android/media/tv/tuner/filter/RecordSettings.java +++ b/media/java/android/media/tv/tuner/filter/RecordSettings.java @@ -51,7 +51,7 @@ public class RecordSettings extends Settings { public @interface TsIndexMask {} /** - * Invalid TS index. + * Invalid Transport Stream (TS) index. */ public static final int TS_INDEX_INVALID = 0; /**