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

Commit 40a55106 authored by Nathan Harold's avatar Nathan Harold
Browse files

Trim Invalid Pad Characters from EF_IMSI

Remove trailing f's from IMSI records and
ensure that if IMSI is unset that the record
is null by convention.

Bug: 115275742
Test: atest TelephonyManagerTest#testGetForbiddenPlmns
Change-Id: Ia71aaf3e183fc8835e1d62e84ea3f0e7df139986
parent a38578a5
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

@@ -459,7 +460,18 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @param imsi
     */
    public void setImsi(String imsi) {
        mImsi = imsi;
        // Remove trailing F's if present in IMSI.
        mImsi = IccUtils.stripTrailingFs(imsi);
        if (!Objects.equals(mImsi, imsi)) {
            loge("Invalid IMSI padding digits received.");
        }
        if (TextUtils.isEmpty(mImsi)) mImsi = null;

        if (mImsi != null && !mImsi.matches("[0-9]+")) {
            loge("Invalid non-numeric IMSI digits received.");
            mImsi = null;
        }

        mImsiReadyRegistrants.notifyRegistrants();
    }

+14 −3
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;

/**
 * {@hide}
@@ -59,7 +60,6 @@ public class SIMRecords extends IccRecords {

    private int mCallForwardingStatus;


    /**
     * States only used by getSpnFsm FSM
     */
@@ -664,7 +664,18 @@ public class SIMRecords extends IccRecords {
                        break;
                    }

                    mImsi = (String) ar.result;
                    String imsi = (String) ar.result;
                    // Remove trailing F's if present in IMSI.
                    mImsi = IccUtils.stripTrailingFs(imsi);

                    if (!Objects.equals(mImsi, imsi)) {
                        loge("Invalid IMSI padding digits received.");
                    }

                    if (mImsi != null && !mImsi.matches("[0-9]+")) {
                        loge("Invalid non-numeric IMSI digits received.");
                        mImsi = null;
                    }

                    // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more
                    // than 15 (and usually 15).
@@ -680,7 +691,7 @@ public class SIMRecords extends IccRecords {
                                + Rlog.pii(LOG_TAG, mImsi.substring(6)));
                    }

                    String imsi = getIMSI();
                    imsi = getIMSI();

                    if (((mMncLength == UNKNOWN) || (mMncLength == 2))
                            && ((imsi != null) && (imsi.length() >= 6))) {
+19 −7
Original line number Diff line number Diff line
@@ -29,16 +29,16 @@

package com.android.internal.telephony.uicc;

import org.mockito.Mock;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import org.mockito.MockitoAnnotations;

import android.os.HandlerThread;

import com.android.internal.telephony.TelephonyTest;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.android.internal.telephony.TelephonyTest;

import android.content.Context;
import android.os.HandlerThread;

public class IccRecordsTest extends TelephonyTest {

@@ -79,5 +79,17 @@ public class IccRecordsTest extends TelephonyTest {

    }


    @Test
    public void testSetImsiInvalid() {
        mIccRecords.setImsi("0123456789FFFFFF");
        assertEquals(mIccRecords.getIMSI(), "0123456789");
        mIccRecords.setImsi("0123456789ffffff");
        assertEquals(mIccRecords.getIMSI(), "0123456789");
        mIccRecords.setImsi("ffffff");
        assertEquals(mIccRecords.getIMSI(), null);
        mIccRecords.setImsi("12F34F567890");
        assertEquals(mIccRecords.getIMSI(), null);
        mIccRecords.setImsi("123456ABCDEF");
        assertEquals(mIccRecords.getIMSI(), null);
    }
}