libcamera: ipa_manager: Fix handling of unset LIBCAMERA_IPA_MODULE_PATH
If the environment variable LIBCAMERA_IPA_MODULE_PATH is not set
utils::secure_getenv() will return a nullptr. Assigning a nullptr to a
std::string is not valid and results in a crash,
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Fix this by operating directly on the returned char array instead of
turning it into a std::string.
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
@@ -34,19 +34,23 @@ IPAManager::IPAManager()
|
||||
{
|
||||
addDir(IPA_MODULE_DIR);
|
||||
|
||||
std::string modulePaths = utils::secure_getenv("LIBCAMERA_IPA_MODULE_PATH");
|
||||
if (modulePaths.empty())
|
||||
const char *modulePaths = utils::secure_getenv("LIBCAMERA_IPA_MODULE_PATH");
|
||||
if (!modulePaths)
|
||||
return;
|
||||
|
||||
for (size_t pos = 0, delim = 0; delim != std::string::npos;
|
||||
pos = delim + 1) {
|
||||
delim = modulePaths.find(':', pos);
|
||||
size_t count = delim == std::string::npos ? delim : delim - pos;
|
||||
std::string path = modulePaths.substr(pos, count);
|
||||
if (path.empty())
|
||||
continue;
|
||||
while (1) {
|
||||
const char *delim = strchrnul(modulePaths, ':');
|
||||
size_t count = delim - modulePaths;
|
||||
|
||||
addDir(path.c_str());
|
||||
if (count) {
|
||||
std::string path(modulePaths, count);
|
||||
addDir(path.c_str());
|
||||
}
|
||||
|
||||
if (*delim == '\0')
|
||||
break;
|
||||
|
||||
modulePaths += count + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user