From f85a2e9220cb523dcb8c05d04a7bcb8b2cfcaf6d Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Thu, 26 Mar 2020 13:08:32 -0700 Subject: [PATCH] Check HIDL Discriminator for CSG Info ART throws an exception if an unpopulated safe union element is accessed at runtime, so instead we have to check the hidl_discriminator to see whether the element is populated before trying to access it (and thus we skip the null check). Bug: 152486447 Test: atest testCellIdentityLte_1_5_CsgInfo \ testCellIdentityWcdma_1_5_CsgInfo \ testCellIdentityTdscdma_1_5_CsgInfo Change-Id: I08dc0d2050a9f4d4b574178e1c68a23d015768e4 --- telephony/java/android/telephony/CellIdentityLte.java | 6 ++++-- telephony/java/android/telephony/CellIdentityTdscdma.java | 7 +++++-- telephony/java/android/telephony/CellIdentityWcdma.java | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index b4ce162274fba..e2e7145833732 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -151,8 +151,10 @@ public final class CellIdentityLte extends CellIdentity { cid.bands.stream().mapToInt(Integer::intValue).toArray(), cid.base.bandwidth, cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong, cid.base.operatorNames.alphaShort, cid.additionalPlmns, - cid.optionalCsgInfo.csgInfo() != null - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) : null); + cid.optionalCsgInfo.getDiscriminator() + == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo + ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) + : null); } private CellIdentityLte(@NonNull CellIdentityLte cid) { diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java index 30f98bc57458c..a9e36242c3b84 100644 --- a/telephony/java/android/telephony/CellIdentityTdscdma.java +++ b/telephony/java/android/telephony/CellIdentityTdscdma.java @@ -126,8 +126,11 @@ public final class CellIdentityTdscdma extends CellIdentity { this(cid.base.base.mcc, cid.base.base.mnc, cid.base.base.lac, cid.base.base.cid, cid.base.base.cpid, cid.base.uarfcn, cid.base.operatorNames.alphaLong, cid.base.operatorNames.alphaShort, - cid.additionalPlmns, cid.optionalCsgInfo.csgInfo() != null - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) : null); + cid.additionalPlmns, + cid.optionalCsgInfo.getDiscriminator() + == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo + ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) + : null); } /** @hide */ diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java index 9d2cb74bac235..1a9c04c816553 100644 --- a/telephony/java/android/telephony/CellIdentityWcdma.java +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -121,8 +121,10 @@ public final class CellIdentityWcdma extends CellIdentity { this(cid.base.base.lac, cid.base.base.cid, cid.base.base.psc, cid.base.base.uarfcn, cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong, cid.base.operatorNames.alphaShort, cid.additionalPlmns, - cid.optionalCsgInfo.csgInfo() != null - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) : null); + cid.optionalCsgInfo.getDiscriminator() + == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo + ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) + : null); } private CellIdentityWcdma(@NonNull CellIdentityWcdma cid) {