summaryrefslogtreecommitdiff
path: root/src/libcamera/ipa_manager.cpp
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-06-10 15:37:25 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-06-11 15:56:36 +0200
commitcefe067c5bdb4098fae3858289d629b74a3d9236 (patch)
treefe05d8d0f537dfc08c6a2d2472c20f9afed6529e /src/libcamera/ipa_manager.cpp
parentd9a468aaac2a58d36d0f65ac54aae29e72f2482a (diff)
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>
Diffstat (limited to 'src/libcamera/ipa_manager.cpp')
-rw-r--r--src/libcamera/ipa_manager.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index f689aa69..532b77d3 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -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;
+
+ if (count) {
+ std::string path(modulePaths, count);
+ addDir(path.c_str());
+ }
+
+ if (*delim == '\0')
+ break;
- addDir(path.c_str());
+ modulePaths += count + 1;
}
}