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

Commit 29ddcbf1 authored by Nathan Harold's avatar Nathan Harold Committed by Android (Google) Code Review
Browse files

Merge "Improve Range Checks on CellIdentity Classes" into qt-dev

parents d21ce79b fe523ccd
Loading
Loading
Loading
Loading
+19 −0
Original line number Original line Diff line number Diff line
@@ -243,4 +243,23 @@ public abstract class CellIdentity implements Parcelable {
    protected void log(String s) {
    protected void log(String s) {
        Rlog.w(mTag, s);
        Rlog.w(mTag, s);
    }
    }

    /** @hide */
    protected static final int inRangeOrUnavailable(int value, int rangeMin, int rangeMax) {
        if (value < rangeMin || value > rangeMax) return CellInfo.UNAVAILABLE;
        return value;
    }

    /** @hide */
    protected static final long inRangeOrUnavailable(long value, long rangeMin, long rangeMax) {
        if (value < rangeMin || value > rangeMax) return CellInfo.UNAVAILABLE_LONG;
        return value;
    }

    /** @hide */
    protected static final int inRangeOrUnavailable(
            int value, int rangeMin, int rangeMax, int special) {
        if ((value < rangeMin || value > rangeMax) && value != special) return CellInfo.UNAVAILABLE;
        return value;
    }
}
}
+20 −3
Original line number Original line Diff line number Diff line
@@ -28,12 +28,25 @@ public final class CellIdentityCdma extends CellIdentity {
    private static final String TAG = CellIdentityCdma.class.getSimpleName();
    private static final String TAG = CellIdentityCdma.class.getSimpleName();
    private static final boolean DBG = false;
    private static final boolean DBG = false;


    private static final int NETWORK_ID_MAX = 65535;
    private static final int SYSTEM_ID_MAX = 32767;
    private static final int BASESTATION_ID_MAX = 65535;

    private static final int LONGITUDE_MIN = -2592000;
    private static final int LONGITUDE_MAX = 2592000;

    private static final int LATITUDE_MIN = -1296000;
    private static final int LATITUDE_MAX = 1296000;

    // Network Id 0..65535
    // Network Id 0..65535
    private final int mNetworkId;
    private final int mNetworkId;

    // CDMA System Id 0..32767
    // CDMA System Id 0..32767
    private final int mSystemId;
    private final int mSystemId;

    // Base Station Id 0..65535
    // Base Station Id 0..65535
    private final int mBasestationId;
    private final int mBasestationId;

    /**
    /**
     * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
     * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
     * It is represented in units of 0.25 seconds and ranges from -2592000
     * It is represented in units of 0.25 seconds and ranges from -2592000
@@ -41,6 +54,7 @@ public final class CellIdentityCdma extends CellIdentity {
     * to +180 degrees).
     * to +180 degrees).
     */
     */
    private final int mLongitude;
    private final int mLongitude;

    /**
    /**
     * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
     * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
     * It is represented in units of 0.25 seconds and ranges from -1296000
     * It is represented in units of 0.25 seconds and ranges from -1296000
@@ -78,9 +92,12 @@ public final class CellIdentityCdma extends CellIdentity {
    public CellIdentityCdma(
    public CellIdentityCdma(
            int nid, int sid, int bid, int lon, int lat, String alphal, String alphas) {
            int nid, int sid, int bid, int lon, int lat, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_CDMA, null, null, alphal, alphas);
        super(TAG, CellInfo.TYPE_CDMA, null, null, alphal, alphas);
        mNetworkId = nid;
        mNetworkId = inRangeOrUnavailable(nid, 0, NETWORK_ID_MAX);
        mSystemId = sid;
        mSystemId = inRangeOrUnavailable(sid, 0, SYSTEM_ID_MAX);
        mBasestationId = bid;
        mBasestationId = inRangeOrUnavailable(bid, 0, BASESTATION_ID_MAX);
        lat = inRangeOrUnavailable(lat, LATITUDE_MIN, LATITUDE_MAX);
        lon = inRangeOrUnavailable(lon, LONGITUDE_MIN, LONGITUDE_MAX);

        if (!isNullIsland(lat, lon)) {
        if (!isNullIsland(lat, lon)) {
            mLongitude = lon;
            mLongitude = lon;
            mLatitude = lat;
            mLatitude = lat;
+9 −4
Original line number Original line Diff line number Diff line
@@ -31,6 +31,11 @@ public final class CellIdentityGsm extends CellIdentity {
    private static final String TAG = CellIdentityGsm.class.getSimpleName();
    private static final String TAG = CellIdentityGsm.class.getSimpleName();
    private static final boolean DBG = false;
    private static final boolean DBG = false;


    private static final int MAX_LAC = 65535;
    private static final int MAX_CID = 65535;
    private static final int MAX_ARFCN = 65535;
    private static final int MAX_BSIC = 63;

    // 16-bit Location Area Code, 0..65535
    // 16-bit Location Area Code, 0..65535
    private final int mLac;
    private final int mLac;
    // 16-bit GSM Cell Identity described in TS 27.007, 0..65535
    // 16-bit GSM Cell Identity described in TS 27.007, 0..65535
@@ -68,10 +73,10 @@ public final class CellIdentityGsm extends CellIdentity {
    public CellIdentityGsm(int lac, int cid, int arfcn, int bsic, String mccStr,
    public CellIdentityGsm(int lac, int cid, int arfcn, int bsic, String mccStr,
                            String mncStr, String alphal, String alphas) {
                            String mncStr, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_GSM, mccStr, mncStr, alphal, alphas);
        super(TAG, CellInfo.TYPE_GSM, mccStr, mncStr, alphal, alphas);
        mLac = lac;
        mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
        mCid = cid;
        mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
        mArfcn = arfcn;
        mArfcn = inRangeOrUnavailable(arfcn, 0, MAX_ARFCN);
        mBsic = bsic;
        mBsic = inRangeOrUnavailable(bsic, 0, MAX_BSIC);
    }
    }


    /** @hide */
    /** @hide */
+11 −5
Original line number Original line Diff line number Diff line
@@ -32,6 +32,12 @@ public final class CellIdentityLte extends CellIdentity {
    private static final String TAG = CellIdentityLte.class.getSimpleName();
    private static final String TAG = CellIdentityLte.class.getSimpleName();
    private static final boolean DBG = false;
    private static final boolean DBG = false;


    private static final int MAX_CI = 268435455;
    private static final int MAX_PCI = 503;
    private static final int MAX_TAC = 65535;
    private static final int MAX_EARFCN = 262143;
    private static final int MAX_BANDWIDTH = 20000;

    // 28-bit cell identity
    // 28-bit cell identity
    private final int mCi;
    private final int mCi;
    // physical cell id 0..503
    // physical cell id 0..503
@@ -89,11 +95,11 @@ public final class CellIdentityLte extends CellIdentity {
    public CellIdentityLte(int ci, int pci, int tac, int earfcn, int bandwidth, String mccStr,
    public CellIdentityLte(int ci, int pci, int tac, int earfcn, int bandwidth, String mccStr,
            String mncStr, String alphal, String alphas) {
            String mncStr, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_LTE, mccStr, mncStr, alphal, alphas);
        super(TAG, CellInfo.TYPE_LTE, mccStr, mncStr, alphal, alphas);
        mCi = ci;
        mCi = inRangeOrUnavailable(ci, 0, MAX_CI);
        mPci = pci;
        mPci = inRangeOrUnavailable(pci, 0, MAX_PCI);
        mTac = tac;
        mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
        mEarfcn = earfcn;
        mEarfcn = inRangeOrUnavailable(earfcn, 0, MAX_EARFCN);
        mBandwidth = bandwidth;
        mBandwidth = inRangeOrUnavailable(bandwidth, 0, MAX_BANDWIDTH);
    }
    }


    /** @hide */
    /** @hide */
+10 −4
Original line number Original line Diff line number Diff line
@@ -29,6 +29,11 @@ import java.util.Objects;
public final class CellIdentityNr extends CellIdentity {
public final class CellIdentityNr extends CellIdentity {
    private static final String TAG = "CellIdentityNr";
    private static final String TAG = "CellIdentityNr";


    private static final int MAX_PCI = 1007;
    private static final int MAX_TAC = 65535;
    private static final int MAX_NRARFCN = 3279165;
    private static final long MAX_NCI = 68719476735L;

    private final int mNrArfcn;
    private final int mNrArfcn;
    private final int mPci;
    private final int mPci;
    private final int mTac;
    private final int mTac;
@@ -41,6 +46,7 @@ public final class CellIdentityNr extends CellIdentity {
     * @param nrArfcn NR Absolute Radio Frequency Channel Number, in range [0, 3279165].
     * @param nrArfcn NR Absolute Radio Frequency Channel Number, in range [0, 3279165].
     * @param mccStr 3-digit Mobile Country Code in string format.
     * @param mccStr 3-digit Mobile Country Code in string format.
     * @param mncStr 2 or 3-digit Mobile Network Code in string format.
     * @param mncStr 2 or 3-digit Mobile Network Code in string format.
     * @param nci The 36-bit NR Cell Identity in range [0, 68719476735].
     * @param alphal long alpha Operator Name String or Enhanced Operator Name String.
     * @param alphal long alpha Operator Name String or Enhanced Operator Name String.
     * @param alphas short alpha Operator Name String or Enhanced Operator Name String.
     * @param alphas short alpha Operator Name String or Enhanced Operator Name String.
     *
     *
@@ -49,10 +55,10 @@ public final class CellIdentityNr extends CellIdentity {
    public CellIdentityNr(int pci, int tac, int nrArfcn, String mccStr, String mncStr,
    public CellIdentityNr(int pci, int tac, int nrArfcn, String mccStr, String mncStr,
            long nci, String alphal, String alphas) {
            long nci, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_NR, mccStr, mncStr, alphal, alphas);
        super(TAG, CellInfo.TYPE_NR, mccStr, mncStr, alphal, alphas);
        mPci = pci;
        mPci = inRangeOrUnavailable(pci, 0, MAX_PCI);
        mTac = tac;
        mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
        mNrArfcn = nrArfcn;
        mNrArfcn = inRangeOrUnavailable(nrArfcn, 0, MAX_NRARFCN);
        mNci = nci;
        mNci = inRangeOrUnavailable(nci, 0, MAX_NCI);
    }
    }


    /** @hide */
    /** @hide */
Loading