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

Commit ef597508 authored by Nathan Harold's avatar Nathan Harold Committed by android-build-merger
Browse files

Merge "Merge "Improve Range Checks on CellIdentity Classes" am: 7b2d8029 am:...

Merge "Merge "Improve Range Checks on CellIdentity Classes" am: 7b2d8029 am: 684cc952" into qt-dev-plus-aosp
am: 42d72683

Change-Id: Ieb4b7619ade9ae2b3d15eebb55d2b9b85a5bb462
parents 44f793fc 42d72683
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -243,4 +243,23 @@ public abstract class CellIdentity implements Parcelable {
    protected void log(String 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 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 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
    private final int mNetworkId;

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

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

    /**
     * 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
@@ -41,6 +54,7 @@ public final class CellIdentityCdma extends CellIdentity {
     * to +180 degrees).
     */
    private final int mLongitude;

    /**
     * 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
@@ -78,9 +92,12 @@ public final class CellIdentityCdma extends CellIdentity {
    public CellIdentityCdma(
            int nid, int sid, int bid, int lon, int lat, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_CDMA, null, null, alphal, alphas);
        mNetworkId = nid;
        mSystemId = sid;
        mBasestationId = bid;
        mNetworkId = inRangeOrUnavailable(nid, 0, NETWORK_ID_MAX);
        mSystemId = inRangeOrUnavailable(sid, 0, SYSTEM_ID_MAX);
        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)) {
            mLongitude = lon;
            mLatitude = lat;
+9 −4
Original line number 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 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
    private final int mLac;
    // 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,
                            String mncStr, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_GSM, mccStr, mncStr, alphal, alphas);
        mLac = lac;
        mCid = cid;
        mArfcn = arfcn;
        mBsic = bsic;
        mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
        mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
        mArfcn = inRangeOrUnavailable(arfcn, 0, MAX_ARFCN);
        mBsic = inRangeOrUnavailable(bsic, 0, MAX_BSIC);
    }

    /** @hide */
+11 −5
Original line number 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 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
    private final int mCi;
    // 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,
            String mncStr, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_LTE, mccStr, mncStr, alphal, alphas);
        mCi = ci;
        mPci = pci;
        mTac = tac;
        mEarfcn = earfcn;
        mBandwidth = bandwidth;
        mCi = inRangeOrUnavailable(ci, 0, MAX_CI);
        mPci = inRangeOrUnavailable(pci, 0, MAX_PCI);
        mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
        mEarfcn = inRangeOrUnavailable(earfcn, 0, MAX_EARFCN);
        mBandwidth = inRangeOrUnavailable(bandwidth, 0, MAX_BANDWIDTH);
    }

    /** @hide */
+10 −4
Original line number Diff line number Diff line
@@ -29,6 +29,11 @@ import java.util.Objects;
public final class CellIdentityNr extends CellIdentity {
    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 mPci;
    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 mccStr 3-digit Mobile Country 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 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,
            long nci, String alphal, String alphas) {
        super(TAG, CellInfo.TYPE_NR, mccStr, mncStr, alphal, alphas);
        mPci = pci;
        mTac = tac;
        mNrArfcn = nrArfcn;
        mNci = nci;
        mPci = inRangeOrUnavailable(pci, 0, MAX_PCI);
        mTac = inRangeOrUnavailable(tac, 0, MAX_TAC);
        mNrArfcn = inRangeOrUnavailable(nrArfcn, 0, MAX_NRARFCN);
        mNci = inRangeOrUnavailable(nci, 0, MAX_NCI);
    }

    /** @hide */
Loading