diff options
author | 2019-10-22 00:26:34 +0000 | |
---|---|---|
committer | 2019-10-22 00:26:34 +0000 | |
commit | 64d536717b64b0db252e242ddea2e0e7b53b697f (patch) | |
tree | 7c043be4fa7c2e966a56fa9c4f1e6d205bcd1922 /vulkan/libvulkan/driver.cpp | |
parent | 8ba0cadc7de8f7c65d58eac5878ca0a18d363c96 (diff) | |
parent | a70447192bd04c77f4380a37f5a56a94d41488b5 (diff) |
Merge "[frameworks][native][vulkan] fix -Walloca"
Diffstat (limited to 'vulkan/libvulkan/driver.cpp')
-rw-r--r-- | vulkan/libvulkan/driver.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index c77fa064e6..85e1c923e7 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -24,7 +24,10 @@ #include <dlfcn.h> #include <algorithm> #include <array> +#include <climits> #include <new> +#include <sstream> +#include <string> #include <log/log.h> @@ -153,15 +156,12 @@ class CreateInfoWrapper { Hal Hal::hal_; void* LoadLibrary(const android_dlextinfo& dlextinfo, - const char* subname, - int subname_len) { + const std::string_view subname) { ATRACE_CALL(); - const char kLibFormat[] = "vulkan.%*s.so"; - char* name = static_cast<char*>( - alloca(sizeof(kLibFormat) + static_cast<size_t>(subname_len))); - sprintf(name, kLibFormat, subname_len, subname); - return android_dlopen_ext(name, RTLD_LOCAL | RTLD_NOW, &dlextinfo); + std::stringstream ss; + ss << "vulkan." << subname << ".so"; + return android_dlopen_ext(ss.str().c_str(), RTLD_LOCAL | RTLD_NOW, &dlextinfo); } const std::array<const char*, 2> HAL_SUBNAME_KEY_PROPERTIES = {{ @@ -181,8 +181,9 @@ int LoadDriver(android_namespace_t* library_namespace, char prop[PROPERTY_VALUE_MAX]; for (auto key : HAL_SUBNAME_KEY_PROPERTIES) { int prop_len = property_get(key, prop, nullptr); - if (prop_len > 0) { - so = LoadLibrary(dlextinfo, prop, prop_len); + if (prop_len > 0 && prop_len <= UINT_MAX) { + std::string_view lib_name(prop, static_cast<unsigned int>(prop_len)); + so = LoadLibrary(dlextinfo, lib_name); if (so) break; } |