From 48c90655370026d1df5eaa586888a3e67eca893b Mon Sep 17 00:00:00 2001 From: Zero Fanker Date: Sun, 19 May 2024 11:37:40 -0400 Subject: [PATCH] fixed bug that INI group might already been destroyed while iterating the group --- MissionEditor/INIMeta.h | 11 ++++++++--- UnitTest/CIni_Meta_Test.cpp | 8 +++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/MissionEditor/INIMeta.h b/MissionEditor/INIMeta.h index 57528b5..6339d69 100644 --- a/MissionEditor/INIMeta.h +++ b/MissionEditor/INIMeta.h @@ -103,12 +103,17 @@ public: const CString& m_section; }; - IniSectionGroup(const IniFileGroup& source, const CString& secName) : - m_source(source), + IniSectionGroup(IniFileGroup&& source, const CString& secName) : + m_source(std::move(source)), m_section(secName) { } + IniSectionGroup(const IniFileGroup& source, const CString& secName) : + IniSectionGroup(IniFileGroup(source), secName) + { + } + Iterator begin() const { auto groupBeg = m_source.begin(); auto [secItBeg, secItEnd] = acquireNextKvGroup(groupBeg); @@ -146,6 +151,6 @@ private: return acquireNextKvGroup(m_section, beg, m_source.end()); } - const IniFileGroup& m_source; + const IniFileGroup m_source; CString m_section; }; diff --git a/UnitTest/CIni_Meta_Test.cpp b/UnitTest/CIni_Meta_Test.cpp index 41a6142..c20d274 100644 --- a/UnitTest/CIni_Meta_Test.cpp +++ b/UnitTest/CIni_Meta_Test.cpp @@ -29,12 +29,18 @@ TEST(IniFileGroup, ValidIniWithValidContentTest) { auto const bldTypes = group.GetSection("BuildingTypes"); auto idx = 0; - //for (auto const& [key, val] : bldTypes) { + for (auto it = bldTypes.begin(); it != bldTypes.end(); ++it) { auto const& [key, val] = *it; EXPECT_EQ(val, referenceList[idx++]); } + // This is to test RHS issue + idx = 0; + for (auto const& [key, val] : group.GetSection("BuildingTypes")) { + EXPECT_EQ(val, referenceList[idx++]); + } + EXPECT_EQ(group.GetString("GACNST", "Strength"), "2000"); } #endif