From 72acca4b9e3db4d4e2e862adbf39ffcc76e7cfb6 Mon Sep 17 00:00:00 2001 From: Kyle Sanderson Date: Mon, 16 Jul 2018 08:34:49 -0700 Subject: [PATCH] Fix DataPack memory leak regression from #848. (#850) * Fix memory leak regression from https://github.com/alliedmodders/sourcemod/pull/848. --- core/logic/CDataPack.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/core/logic/CDataPack.cpp b/core/logic/CDataPack.cpp index ba971756..79b88b32 100644 --- a/core/logic/CDataPack.cpp +++ b/core/logic/CDataPack.cpp @@ -65,25 +65,9 @@ CDataPack::Free(IDataPack *pack) void CDataPack::Initialize() { - for (size_t index = 0; index < elements.length(); ++index) + do { - switch (elements[index].type) - { - case CDataPackType::Raw: - { - delete elements[index].pData.vval; - elements.remove(index--); - break; - } - - case CDataPackType::String: - { - delete elements[index].pData.sval; - elements.remove(index--); - break; - } - } - } + } while (this->RemoveItem()); elements.clear(); position = 0; @@ -235,11 +219,27 @@ bool CDataPack::RemoveItem(size_t pos) { pos = position; } + if (pos >= elements.length()) { return false; } + switch (elements[pos].type) + { + case CDataPackType::Raw: + { + delete elements[pos].pData.vval; + break; + } + + case CDataPackType::String: + { + delete elements[pos].pData.sval; + break; + } + } + elements.remove(pos); --position; return true;