From 803225fa694cbf520b6c8e3ab27ee479bf4dc619 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Mon, 27 Jul 2020 10:00:58 +0200 Subject: [PATCH] BUG: potential memory leaks in HashPtrTable::set (#1787) - backported fix from develop --- .../HashTables/HashPtrTable/HashPtrTableI.H | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H index 5c76321ab63..733c11cd067 100644 --- a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H +++ b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018 OpenCFD Ltd. + Copyright (C) 2018-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -86,7 +86,19 @@ inline bool Foam::HashPtrTable<T, Key, Hash>::set T* ptr ) { - return this->parent_type::set(key, ptr); + // Newer: const T* old = this->get(key); + + iterator iter(this->find(key)); + const T* old = (iter.good() ? iter.val() : nullptr); + + const bool ok = this->parent_type::set(key, ptr); + + if (ok && old != ptr) + { + delete const_cast<T*>(old); + } + + return ok; } -- GitLab