[libcamera-devel] [PATCH v2] libcamera: ipa_manager: Fix handling of unset LIBCAMERA_IPA_MODULE_PATH
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jun 11 12:17:10 CEST 2019
Hi Niklas,
Thank you for the patch.
On Mon, Jun 10, 2019 at 11:00:23PM +0200, Niklas Söderlund wrote:
> 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 at ragnatech.se>
> ---
> src/libcamera/ipa_manager.cpp | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
> index f689aa69b7284092..b9b772d1d5e7795f 100644
> --- a/src/libcamera/ipa_manager.cpp
> +++ b/src/libcamera/ipa_manager.cpp
> @@ -34,19 +34,22 @@ 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());
> + std::string path(modulePaths, count);
> + if (!path.empty())
> + addDir(path.c_str());
Small improvement, to avoid constructing an empty string,
if (count) {
std::string path(modulePaths, count);
addDir(path.c_str());
}
Could you test this with a LIBCAMERA_IPA_MODULE_PATH that contains "::"
and that ends with ":" ?
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +
> + if (*delim == '\0')
> + break;
> +
> + modulePaths += count + 1;
> }
> }
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list