From 40b0b9ab7703a165295b008f47df14d2ec076fb1 Mon Sep 17 00:00:00 2001 From: Mark Hung Date: Fri, 13 May 2016 19:58:18 +0800 Subject: Ensure that OpenCL device id returned from getDeviceSelection() is valid. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I756bb57d471db3d3ca1d9c3733d359c7c16b4e66 Reviewed-on: https://gerrit.libreoffice.org/24959 Tested-by: Jenkins Reviewed-by: Mark Page Reviewed-by: Tomaž Vajngerl --- opencl/source/opencl_device.cxx | 11 ++++++++--- opencl/source/openclwrapper.cxx | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/opencl/source/opencl_device.cxx b/opencl/source/opencl_device.cxx index bfe81b5dee23..a653ac71016c 100644 --- a/opencl/source/opencl_device.cxx +++ b/opencl/source/opencl_device.cxx @@ -636,10 +636,15 @@ ds_device getDeviceSelection( } /* Final device selection */ - selectedDevice = aProfile->devices[bestDeviceIdx]; - bIsDeviceSelected = true; + if (bestDeviceIdx >=0 && static_cast< std::vector::size_type> ( bestDeviceIdx ) < aProfile->devices.size() ) + { + selectedDevice = aProfile->devices[bestDeviceIdx]; + bIsDeviceSelected = true; - writeDevicesLog(aProfile, sProfilePath, bestDeviceIdx); + writeDevicesLog(aProfile, sProfilePath, bestDeviceIdx); + } else { + selectedDevice.eType = DeviceType::NativeCPU; + } } return selectedDevice; } diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx index 1655cb61c84c..ab65091d3e66 100644 --- a/opencl/source/openclwrapper.cxx +++ b/opencl/source/openclwrapper.cxx @@ -703,6 +703,8 @@ bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEv OUString path; osl::FileBase::getSystemPathFromFileURL(url,path); ds_device aSelectedDevice = getDeviceSelection(path, bForceEvaluation); + if ( aSelectedDevice.eType != DeviceType::OpenCLDevice) + return false; pDeviceId = aSelectedDevice.aDeviceID; } -- cgit v1.2.3