From b4075c8ea31b235cdbb61fcd6290105b9914d627 Mon Sep 17 00:00:00 2001 From: Fabian Bumberger Date: Mon, 27 Aug 2012 17:29:18 -0400 Subject: [PATCH] Fixes possible memory leak in QContiguousCache When inserting an item on a position that is already occupied, the destructor of the old item was never invoked. Change-Id: I01dc4ec9f2da5027284eba94e1a9ad36b062a50d Reviewed-by: Thomas McGuire Reviewed-by: Thiago Macieira --- src/corelib/tools/qcontiguouscache.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qcontiguouscache.h b/src/corelib/tools/qcontiguouscache.h index 248a8e580e..469160bff2 100644 --- a/src/corelib/tools/qcontiguouscache.h +++ b/src/corelib/tools/qcontiguouscache.h @@ -387,10 +387,12 @@ void QContiguousCache::insert(int pos, const T &value) Q_ASSERT_X(pos >= 0 && pos < INT_MAX, "QContiguousCache::insert", "index out of range"); detach(); if (containsIndex(pos)) { - if(QTypeInfo::isComplex) + if (QTypeInfo::isComplex) { + (p->array + pos % d->alloc)->~T(); new (p->array + pos % d->alloc) T(value); - else + } else { p->array[pos % d->alloc] = value; + } } else if (pos == d->offset-1) prepend(value); else if (pos == d->offset+d->count)