From a28408b29f1a0086bcc3cfec57b4ee8987821187 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Mon, 13 Apr 2015 10:56:41 -0700 Subject: [PATCH] enforce NonNull on incoming MMS content location Fixes #2959 Closes #2975 // FREEBIE --- .../securesms/jobs/MmsDownloadJob.java | 18 +++++++++++------- .../mms/IncomingLegacyMmsConnection.java | 6 +++++- .../mms/IncomingLollipopMmsConnection.java | 5 ++++- .../securesms/mms/IncomingMmsConnection.java | 3 ++- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/src/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java index 0214962c83..81d3ac9252 100644 --- a/src/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java @@ -77,14 +77,18 @@ public class MmsDownloadJob extends MasterSecretJob { return; } - database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_CONNECTING); - - String contentLocation = new String(notification.get().getContentLocation()); - byte[] transactionId = notification.get().getTransactionId(); - - Log.w(TAG, "Downloading mms at " + Uri.parse(contentLocation).getHost()); - try { + if (notification.get().getContentLocation() == null) { + throw new MmsException("Notification content location was null."); + } + + database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_CONNECTING); + + String contentLocation = new String(notification.get().getContentLocation()); + byte[] transactionId = notification.get().getTransactionId(); + + Log.w(TAG, "Downloading mms at " + Uri.parse(contentLocation).getHost()); + RetrieveConf retrieveConf = getMmsConnection(context).retrieve(contentLocation, transactionId); if (retrieveConf == null) { throw new MmsException("RetrieveConf was null"); diff --git a/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java b/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java index 6839c73f5e..505e6f03bb 100644 --- a/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java @@ -18,6 +18,7 @@ package org.thoughtcrime.securesms.mms; import android.content.Context; import android.net.Uri; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; @@ -58,7 +59,10 @@ public class IncomingLegacyMmsConnection extends LegacyMmsConnection implements } @Override - public @Nullable RetrieveConf retrieve(String contentLocation, byte[] transactionId) throws MmsRadioException, ApnUnavailableException, IOException { + public @Nullable RetrieveConf retrieve(@NonNull String contentLocation, + byte[] transactionId) + throws MmsRadioException, ApnUnavailableException, IOException + { MmsRadio radio = MmsRadio.getInstance(context); Apn contentApn = new Apn(contentLocation, apn.getProxy(), Integer.toString(apn.getPort()), apn.getUsername(), apn.getPassword()); if (isCdmaDevice()) { diff --git a/src/org/thoughtcrime/securesms/mms/IncomingLollipopMmsConnection.java b/src/org/thoughtcrime/securesms/mms/IncomingLollipopMmsConnection.java index b9bfafce0b..7305120e4b 100644 --- a/src/org/thoughtcrime/securesms/mms/IncomingLollipopMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/IncomingLollipopMmsConnection.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.telephony.SmsManager; import android.util.Log; @@ -56,7 +57,9 @@ public class IncomingLollipopMmsConnection extends LollipopMmsConnection impleme @Override @TargetApi(VERSION_CODES.LOLLIPOP) - public synchronized @Nullable RetrieveConf retrieve(String contentLocation, byte[] transactionId) throws MmsException { + public synchronized @Nullable RetrieveConf retrieve(@NonNull String contentLocation, + byte[] transactionId) throws MmsException + { beginTransaction(); try { diff --git a/src/org/thoughtcrime/securesms/mms/IncomingMmsConnection.java b/src/org/thoughtcrime/securesms/mms/IncomingMmsConnection.java index 1d036a0580..0b42fcac18 100644 --- a/src/org/thoughtcrime/securesms/mms/IncomingMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/IncomingMmsConnection.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.mms; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import java.io.IOException; @@ -8,5 +9,5 @@ import ws.com.google.android.mms.MmsException; import ws.com.google.android.mms.pdu.RetrieveConf; public interface IncomingMmsConnection { - @Nullable RetrieveConf retrieve(String contentLocation, byte[] transactionId) throws MmsException, MmsRadioException, ApnUnavailableException, IOException; + @Nullable RetrieveConf retrieve(@NonNull String contentLocation, byte[] transactionId) throws MmsException, MmsRadioException, ApnUnavailableException, IOException; }