From d84b055e07d05789bd5af2098dfa26feedae6547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= Date: Thu, 5 Jun 2025 22:01:16 +0200 Subject: [PATCH] Config::mapGetBool causes segmentation fault when value_out is nullptr (#1471) Signed-off-by: Alejandro Hernandez Cordero (cherry picked from commit 72813d17395dc84a61c15f89305b0799bc1536b0) --- rviz_common/src/rviz_common/config.cpp | 4 ++++ rviz_common/test/config_test.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/rviz_common/src/rviz_common/config.cpp b/rviz_common/src/rviz_common/config.cpp index d3a06501d..00009443b 100644 --- a/rviz_common/src/rviz_common/config.cpp +++ b/rviz_common/src/rviz_common/config.cpp @@ -262,6 +262,10 @@ bool Config::mapGetFloat(const QString & key, float * value_out) const bool Config::mapGetBool(const QString & key, bool * value_out) const { + if (value_out == nullptr) { + return false; + } + QVariant v; if (mapGetValue(key, &v) && (v.type() == QVariant::Bool || v.type() == QVariant::String)) { *value_out = v.toBool(); diff --git a/rviz_common/test/config_test.cpp b/rviz_common/test/config_test.cpp index cef31c638..6cb774633 100644 --- a/rviz_common/test/config_test.cpp +++ b/rviz_common/test/config_test.cpp @@ -76,6 +76,17 @@ TEST(Config, mapGetValue_key_not_found_null_check) { EXPECT_EQ(s_default, "my_default_value"); } +TEST(Config, handle_mixed_type_values_for_keys) { + rviz_common::Config c; + c.mapSetValue("mixed_key", "123abc"); + EXPECT_FALSE(c.mapGetInt("mixed_key", nullptr)); + EXPECT_FALSE(c.mapGetBool("mixed_key", nullptr)); + EXPECT_FALSE(c.mapGetFloat("mixed_key", nullptr)); + QString string_value; + EXPECT_TRUE(c.mapGetString("mixed_key", &string_value)); + EXPECT_EQ(string_value, "123abc"); +} + int main(int argc, char ** argv) { testing::InitGoogleTest(&argc, argv);