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

Commit c63e08ec authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Fix stringIndexOutOfBoundException in getPhoneNumberBasedCarrier

Bug: 386836886
Test: atest SatelliteControllerTest
Flag: EXEMPT bugfix
Change-Id: I8cc2adbdf288ffadf60d41b5209c6600a5707e94
parent f4fb1eb4
Loading
Loading
Loading
Loading
+34 −6
Original line number Diff line number Diff line
@@ -7228,22 +7228,50 @@ public class SatelliteController extends Handler {
        return new Pair<>(subscriberId, subscriberIdType);
    }

    private String getPhoneNumberBasedCarrier(int subId) {
    /** Get subscriberId from phone number and carrier information. */
    @VisibleForTesting(visibility =  VisibleForTesting.Visibility.PRIVATE)
    public String getPhoneNumberBasedCarrier(int subId) {
        String subscriberId = "";
        SubscriptionInfoInternal internal = mSubscriptionManagerService.getSubscriptionInfoInternal(
                subId);
        if (internal == null) {
            plogd("getPhoneNumberBasedCarrier: subscriptionInfoInternal is null.");
            return subscriberId;
        }

        SubscriptionManager subscriptionManager = mContext.getSystemService(
                SubscriptionManager.class);
        if (mInjectSubscriptionManager != null) {
            logd("getPhoneNumberBasedCarrier: InjectSubscriptionManager");
            plogd("getPhoneNumberBasedCarrier: InjectSubscriptionManager");
            subscriptionManager = mInjectSubscriptionManager;
        }

        if (subscriptionManager == null) {
            plogd("getPhoneNumberBasedCarrier: subscriptionManager is null");
            return subscriberId;
        }

        String phoneNumber = subscriptionManager.getPhoneNumber(subId);
        if (phoneNumber == null) {
            logd("getPhoneNumberBasedCarrier: phoneNumber null");
            return "";
        if (TextUtils.isEmpty(phoneNumber)) {
            plogd("getPhoneNumberBasedCarrier: phoneNumber is empty.");
            return subscriberId;
        }

        String imsi = internal.getImsi();
        if (TextUtils.isEmpty(imsi)) {
            plogd("getPhoneNumberBasedCarrier: imsi is empty");
            return subscriberId;
        }
        return internal.getImsi() == null ? "" : internal.getImsi().substring(0, 6)

        if (imsi.length() < 6) {
            plogd("getPhoneNumberBasedCarrier: imsi length is less than 6");
            return subscriberId;
        }

        subscriberId = internal.getImsi().substring(0, 6)
                + phoneNumber.replaceFirst("^\\+", "");
        plogd("getPhoneNumberBasedCarrier: subscriberId=" + subscriberId);
        return subscriberId;
    }

    private boolean isPriorityChanged(Map<Integer, List<SubscriptionInfo>> currentMap,
+41 −0
Original line number Diff line number Diff line
@@ -6836,4 +6836,45 @@ public class SatelliteControllerTest extends TelephonyTest {
        verify(mPhone, times(2)).notifyCarrierRoamingNtnAvailableServicesChanged(
                (int[]) ArgumentMatchers.any());
    }

    @Test
    public void testGetPhoneNumberBasedCarrier() throws Exception {
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(-1));

        int carrierId_subID = 0;
        SubscriptionInfoInternal subInfoInternal =
                new SubscriptionInfoInternal.Builder().setCarrierId(
                        carrierId_subID).setImsi("").setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));

        // subscriptionManager is null
        Field field = SatelliteController.class.getDeclaredField("mInjectSubscriptionManager");
        field.setAccessible(true);
        field.set(mSatelliteControllerUT, null);
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // phoneNumber is empty
        field.set(mSatelliteControllerUT, mSubscriptionManager);
        doReturn("").when(mSubscriptionManager).getPhoneNumber(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // IMSI is empty
        doReturn(mMsisdn).when(mSubscriptionManager).getPhoneNumber(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        // IMSI length is less than 6
        subInfoInternal = new SubscriptionInfoInternal.Builder().setCarrierId(
                        carrierId_subID).setImsi("12345").setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));
        assertEquals("", mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));

        subInfoInternal = new SubscriptionInfoInternal.Builder().setCarrierId(
                carrierId_subID).setImsi(mImsi).setIccId(mIccId).build();
        doReturn(subInfoInternal).when(mMockSubscriptionManagerService)
                .getSubscriptionInfoInternal(eq(SUB_ID));
        String expectedResult = "123456" + "0987654321";
        assertEquals(expectedResult, mSatelliteControllerUT.getPhoneNumberBasedCarrier(SUB_ID));
    }
}