From 5be88e6e1c11486f814a5698dd4e98a65d41d30d Mon Sep 17 00:00:00 2001 From: Nopey Nope Date: Tue, 19 May 2020 23:10:04 +0000 Subject: [PATCH] Fix Double Free in KeyValues `#include` macro I don't know if this is the bug that the [valvesoftware wiki mentions](https://developer.valvesoftware.com/wiki/KeyValues#About_KeyValues_Text_File_Format:), but I have experienced memory corruption and segfaults (in other source games) from this bug. --- src/tier1/KeyValues.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/tier1/KeyValues.cpp b/src/tier1/KeyValues.cpp index ee2c9786f..39214d149 100644 --- a/src/tier1/KeyValues.cpp +++ b/src/tier1/KeyValues.cpp @@ -2306,15 +2306,9 @@ bool KeyValues::LoadFromBuffer( char const *resourceName, CUtlBuffer &buf, IBase } while ( buf.IsValid() ); AppendIncludedKeys( includedKeys ); - { - // delete included keys! - int i; - for ( i = includedKeys.Count() - 1; i > 0; i-- ) - { - KeyValues *kv = includedKeys[ i ]; - kv->deleteThis(); - } - } + // DO NOT delete included keys! + // AppendIncludedKeys tacks them on without allocating. + // Only YOU can stop Fores.. Double Frees! MergeBaseKeys( baseKeys ); {