From 20c7ece35666fef26b902c0b02ece1c927e853a9 Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Wed, 8 Mar 2017 18:27:28 -0800 Subject: [PATCH] Avoid calling non-exist set_mode hal function Add gating condition before calling the hal function pointers for set_mode and inject_sensor_data. Bug: 36073404 Test: compiles Change-Id: I9c194c1a286fb64304b4329f43c3de2a3d6ae939 --- sensors/1.0/default/Sensors.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sensors/1.0/default/Sensors.cpp b/sensors/1.0/default/Sensors.cpp index 24573109c2..1100dd6a2a 100644 --- a/sensors/1.0/default/Sensors.cpp +++ b/sensors/1.0/default/Sensors.cpp @@ -97,6 +97,15 @@ Sensors::Sensors() // is considered optional. CHECK_GE(getHalDeviceVersion(), SENSORS_DEVICE_API_VERSION_1_3); + if (getHalDeviceVersion() == SENSORS_DEVICE_API_VERSION_1_4) { + if (mSensorDevice->inject_sensor_data == nullptr) { + LOG(ERROR) << "HAL specifies version 1.4, but does not implement inject_sensor_data()"; + } + if (mSensorModule->set_operation_mode == nullptr) { + LOG(ERROR) << "HAL specifies version 1.4, but does not implement set_operation_mode()"; + } + } + mInitCheck = OK; } @@ -132,6 +141,10 @@ int Sensors::getHalDeviceVersion() const { } Return Sensors::setOperationMode(OperationMode mode) { + if (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_4 + || mSensorModule->set_operation_mode == nullptr) { + return Result::INVALID_OPERATION; + } return ResultFromStatus(mSensorModule->set_operation_mode((uint32_t)mode)); } @@ -236,7 +249,8 @@ Return Sensors::flush(int32_t sensor_handle) { } Return Sensors::injectSensorData(const Event& event) { - if (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_4) { + if (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_4 + || mSensorDevice->inject_sensor_data == nullptr) { return Result::INVALID_OPERATION; }