diff --git a/audio/2.0/default/DevicesFactory.cpp b/audio/2.0/default/DevicesFactory.cpp index 8825107bbd..b913bc799d 100644 --- a/audio/2.0/default/DevicesFactory.cpp +++ b/audio/2.0/default/DevicesFactory.cpp @@ -39,6 +39,7 @@ const char* DevicesFactory::deviceToString(IDevicesFactory::Device device) { case IDevicesFactory::Device::R_SUBMIX: return AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX; case IDevicesFactory::Device::STUB: return AUDIO_HARDWARE_MODULE_ID_STUB; } + return nullptr; } // static @@ -75,19 +76,22 @@ out: // Methods from ::android::hardware::audio::V2_0::IDevicesFactory follow. Return DevicesFactory::openDevice(IDevicesFactory::Device device, openDevice_cb _hidl_cb) { audio_hw_device_t *halDevice; - int halStatus = loadAudioInterface(deviceToString(device), &halDevice); - Result retval(Result::OK); + Result retval(Result::INVALID_ARGUMENTS); sp result; - if (halStatus == OK) { - if (device == IDevicesFactory::Device::PRIMARY) { - result = new PrimaryDevice(halDevice); - } else { - result = new ::android::hardware::audio::V2_0::implementation::Device(halDevice); + const char* moduleName = deviceToString(device); + if (moduleName != nullptr) { + int halStatus = loadAudioInterface(moduleName, &halDevice); + if (halStatus == OK) { + if (device == IDevicesFactory::Device::PRIMARY) { + result = new PrimaryDevice(halDevice); + } else { + result = new ::android::hardware::audio::V2_0::implementation:: + Device(halDevice); + } + retval = Result::OK; + } else if (halStatus == -EINVAL) { + retval = Result::NOT_INITIALIZED; } - } else if (halStatus == -EINVAL) { - retval = Result::NOT_INITIALIZED; - } else { - retval = Result::INVALID_ARGUMENTS; } _hidl_cb(retval, result); return Void(); diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp index 711a8d927a..074903f665 100644 --- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp +++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp @@ -155,6 +155,16 @@ TEST_F(AudioHidlTest, GetAudioDevicesFactoryService) { doc::test("test the getService (called in SetUp)"); } +TEST_F(AudioHidlTest, OpenDeviceInvalidParameter) { + doc::test("test passing an invalid parameter to openDevice"); + IDevicesFactory::Result result; + sp device; + ASSERT_OK(devicesFactory->openDevice(IDevicesFactory::Device(-1), + returnIn(result, device))); + ASSERT_EQ(IDevicesFactory::Result::INVALID_ARGUMENTS, result); + ASSERT_TRUE(device == nullptr); +} + ////////////////////////////////////////////////////////////////////////////// /////////////////////////////// openDevice primary /////////////////////////// //////////////////////////////////////////////////////////////////////////////