From eb0743f6831d4c3da3eae1b9837b249ea607f75f Mon Sep 17 00:00:00 2001 From: tt2468 Date: Thu, 26 Aug 2021 17:56:13 -0700 Subject: [PATCH] Requests: Fix GetProfileParameter on Windows If either return value was not defined in the profile config, it would cause OBS to crash on Windows due to assigning a nullptr to an std::string. --- src/requesthandler/RequestHandler_Config.cpp | 21 ++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/requesthandler/RequestHandler_Config.cpp b/src/requesthandler/RequestHandler_Config.cpp index 6446be09..b5476302 100644 --- a/src/requesthandler/RequestHandler_Config.cpp +++ b/src/requesthandler/RequestHandler_Config.cpp @@ -80,18 +80,19 @@ RequestResult RequestHandler::GetProfileParameter(const Request& request) config_t* profile = obs_frontend_get_profile_config(); if (!profile) - blog(LOG_ERROR, "Profile invalid."); - - std::string parameterValue = config_get_string(profile, parameterCategory.c_str(), parameterName.c_str()); - std::string defaultParameterValue = config_get_default_string(profile, parameterCategory.c_str(), parameterName.c_str()); - if (parameterValue.empty()) - blog(LOG_INFO, "Parameter value is empty."); - if (defaultParameterValue.empty()) - blog(LOG_INFO, "Default parameter value is empty."); + blog(LOG_ERROR, "[RequestHandler::GetProfileParameter] Profile is invalid."); json responseData; - responseData["parameterValue"] = parameterValue; - responseData["defaultParameterValue"] = defaultParameterValue; + if (config_has_default_value(profile, parameterCategory.c_str(), parameterName.c_str())) { + responseData["parameterValue"] = config_get_string(profile, parameterCategory.c_str(), parameterName.c_str()); + responseData["defaultParameterValue"] = config_get_default_string(profile, parameterCategory.c_str(), parameterName.c_str()); + } else if (config_has_user_value(profile, parameterCategory.c_str(), parameterName.c_str())) { + responseData["parameterValue"] = config_get_string(profile, parameterCategory.c_str(), parameterName.c_str()); + responseData["defaultParameterValue"] = nullptr; + } else { + responseData["parameterValue"] = nullptr; + responseData["defaultParameterValue"] = nullptr; + } return RequestResult::Success(responseData); }