Prevent DiagnosticHalService from crashing if the OBD2_*_FRAME configuration array is empty.
Test: TARGET_USES_CAR_FUTURE_FEATURES=true runtest -x packages/services/Car/tests/carservice_test/src/com/android/car/test/CarDiagnosticManagerTest.java
For O-MR1
Change-Id: I15fa0ebc15ea8302f971b3ec38cd563a8fe2b646
diff --git a/service/src/com/android/car/hal/DiagnosticHalService.java b/service/src/com/android/car/hal/DiagnosticHalService.java
index f64e49c..84e3678 100644
--- a/service/src/com/android/car/hal/DiagnosticHalService.java
+++ b/service/src/com/android/car/hal/DiagnosticHalService.java
@@ -33,7 +33,10 @@
import com.android.car.CarServiceUtils;
import com.android.car.vehiclehal.VehiclePropValueBuilder;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.BitSet;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -120,15 +123,36 @@
return mVehiclePropertyToConfig.get(halPropId, null);
}
+ private List<Integer> getPropConfigArray(int halPropId) {
+ VehiclePropConfig propConfig = getPropConfig(halPropId);
+ return propConfig.configArray;
+ }
+
private int getNumIntegerSensors(int halPropId) {
int count = Obd2IntegerSensorIndex.LAST_SYSTEM_INDEX + 1;
- count = count + getPropConfig(halPropId).configArray.get(0);
+ List<Integer> configArray = getPropConfigArray(halPropId);
+ if(configArray.size() < 2) {
+ Log.e(CarLog.TAG_DIAGNOSTIC, String.format(
+ "property 0x%x does not specify the number of vendor-specific properties." +
+ "assuming 0.", halPropId));
+ }
+ else {
+ count += configArray.get(0);
+ }
return count;
}
private int getNumFloatSensors(int halPropId) {
int count = Obd2FloatSensorIndex.LAST_SYSTEM_INDEX + 1;
- count = count + getPropConfig(halPropId).configArray.get(1);
+ List<Integer> configArray = getPropConfigArray(halPropId);
+ if(configArray.size() < 2) {
+ Log.e(CarLog.TAG_DIAGNOSTIC, String.format(
+ "property 0x%x does not specify the number of vendor-specific properties." +
+ "assuming 0.", halPropId));
+ }
+ else {
+ count += configArray.get(1);
+ }
return count;
}