From 8f19e4f21f858ef31075f6163b4ffff43a4420c9 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 Merged-In: I08dc0d2050a9f4d4b574178e1c68a23d015768e4 Change-Id: I08dc0d2050a9f4d4b574178e1c68a23d015768e4 (cherry picked from commit f85a2e9220cb523dcb8c05d04a7bcb8b2cfcaf6d) --- 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 c37735c729a29..13a8273d64d48 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -153,8 +153,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 3f95596a076e2..6dffe922ffd16 100644 --- a/telephony/java/android/telephony/CellIdentityTdscdma.java +++ b/telephony/java/android/telephony/CellIdentityTdscdma.java @@ -128,8 +128,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 38c4ed482e146..eab174ade3b7f 100644 --- a/telephony/java/android/telephony/CellIdentityWcdma.java +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -123,8 +123,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) {