Loading src/java/com/android/internal/telephony/SmsDispatchersController.java +16 −2 Original line number Diff line number Diff line Loading @@ -466,12 +466,18 @@ public class SmsDispatchersController extends Handler { } String scAddr = (String) map.get("scAddr"); String destAddr = (String) map.get("destAddr"); if (destAddr == null) { Rlog.e(TAG, "sendRetrySms failed due to null destAddr"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); return; } SmsMessageBase.SubmitPduBase pdu = null; // figure out from tracker if this was sendText/Data if (map.containsKey("text")) { Rlog.d(TAG, "sms failed was text"); String text = (String) map.get("text"); Rlog.d(TAG, "sms failed was text with length: " + (text == null ? null : text.length())); if (isCdmaFormat(newFormat)) { pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( Loading @@ -481,9 +487,10 @@ public class SmsDispatchersController extends Handler { scAddr, destAddr, text, (tracker.mDeliveryIntent != null), null); } } else if (map.containsKey("data")) { Rlog.d(TAG, "sms failed was data"); byte[] data = (byte[]) map.get("data"); Integer destPort = (Integer) map.get("destPort"); Rlog.d(TAG, "sms failed was data with length: " + (data == null ? null : data.length)); if (isCdmaFormat(newFormat)) { pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( Loading @@ -496,6 +503,13 @@ public class SmsDispatchersController extends Handler { } } if (pdu == null) { Rlog.e(TAG, String.format("sendRetrySms failed to encode message." + "scAddr: %s, " + "destPort: %s", scAddr, map.get("destPort"))); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); return; } // replace old smsc and pdu with newly encoded ones map.put("smsc", pdu.encodedScAddress); map.put("pdu", pdu.encodedMessage); Loading tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; Loading @@ -27,10 +29,12 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.os.Message; import android.provider.Telephony.Sms.Intents; import android.telephony.SmsManager; import android.test.FlakyTest; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; Loading @@ -44,6 +48,8 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import java.util.HashMap; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class SmsDispatchersControllerTest extends TelephonyTest { Loading Loading @@ -137,6 +143,22 @@ public class SmsDispatchersControllerTest extends TelephonyTest { eq(0), any(Message.class)); } @Test @SmallTest public void testSendRetrySmsNullPdu() throws Exception { HashMap<String, Object> map = new HashMap<>(); map.put("scAddr", ""); map.put("destAddr", ""); map.put("text", null); map.put("destPort", 0); switchImsSmsFormat(PhoneConstants.PHONE_TYPE_GSM); replaceInstance(SMSDispatcher.SmsTracker.class, "mFormat", mTracker, SmsConstants.FORMAT_3GPP2); when(mTracker.getData()).thenReturn(map); mSmsDispatchersController.sendRetrySms(mTracker); verify(mTracker).onFailed(eq(mContext), eq(SmsManager.RESULT_SMS_SEND_RETRY_FAILED), eq(NO_ERROR_CODE)); } @Test @SmallTest public void testInjectNullSmsPdu() throws Exception { // unmock ActivityManager to be able to register receiver, create real PendingIntent and Loading Loading
src/java/com/android/internal/telephony/SmsDispatchersController.java +16 −2 Original line number Diff line number Diff line Loading @@ -466,12 +466,18 @@ public class SmsDispatchersController extends Handler { } String scAddr = (String) map.get("scAddr"); String destAddr = (String) map.get("destAddr"); if (destAddr == null) { Rlog.e(TAG, "sendRetrySms failed due to null destAddr"); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); return; } SmsMessageBase.SubmitPduBase pdu = null; // figure out from tracker if this was sendText/Data if (map.containsKey("text")) { Rlog.d(TAG, "sms failed was text"); String text = (String) map.get("text"); Rlog.d(TAG, "sms failed was text with length: " + (text == null ? null : text.length())); if (isCdmaFormat(newFormat)) { pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( Loading @@ -481,9 +487,10 @@ public class SmsDispatchersController extends Handler { scAddr, destAddr, text, (tracker.mDeliveryIntent != null), null); } } else if (map.containsKey("data")) { Rlog.d(TAG, "sms failed was data"); byte[] data = (byte[]) map.get("data"); Integer destPort = (Integer) map.get("destPort"); Rlog.d(TAG, "sms failed was data with length: " + (data == null ? null : data.length)); if (isCdmaFormat(newFormat)) { pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( Loading @@ -496,6 +503,13 @@ public class SmsDispatchersController extends Handler { } } if (pdu == null) { Rlog.e(TAG, String.format("sendRetrySms failed to encode message." + "scAddr: %s, " + "destPort: %s", scAddr, map.get("destPort"))); tracker.onFailed(mContext, SmsManager.RESULT_SMS_SEND_RETRY_FAILED, NO_ERROR_CODE); return; } // replace old smsc and pdu with newly encoded ones map.put("smsc", pdu.encodedScAddress); map.put("pdu", pdu.encodedMessage); Loading
tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; Loading @@ -27,10 +29,12 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.os.Message; import android.provider.Telephony.Sms.Intents; import android.telephony.SmsManager; import android.test.FlakyTest; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; Loading @@ -44,6 +48,8 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import java.util.HashMap; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class SmsDispatchersControllerTest extends TelephonyTest { Loading Loading @@ -137,6 +143,22 @@ public class SmsDispatchersControllerTest extends TelephonyTest { eq(0), any(Message.class)); } @Test @SmallTest public void testSendRetrySmsNullPdu() throws Exception { HashMap<String, Object> map = new HashMap<>(); map.put("scAddr", ""); map.put("destAddr", ""); map.put("text", null); map.put("destPort", 0); switchImsSmsFormat(PhoneConstants.PHONE_TYPE_GSM); replaceInstance(SMSDispatcher.SmsTracker.class, "mFormat", mTracker, SmsConstants.FORMAT_3GPP2); when(mTracker.getData()).thenReturn(map); mSmsDispatchersController.sendRetrySms(mTracker); verify(mTracker).onFailed(eq(mContext), eq(SmsManager.RESULT_SMS_SEND_RETRY_FAILED), eq(NO_ERROR_CODE)); } @Test @SmallTest public void testInjectNullSmsPdu() throws Exception { // unmock ActivityManager to be able to register receiver, create real PendingIntent and Loading