From 24d4234f6b86095d5ab84fa2071d0890be2154d5 Mon Sep 17 00:00:00 2001 From: Fabian Bumberger Date: Fri, 24 Aug 2012 14:36:16 -0400 Subject: 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. Qt5 SHA1: b4075c8ea31b235cdbb61fcd6290105b9914d627 Change-Id: I842fd81f284d9ca58760bce7e1adfea84da0a788 Reviewed-by: Peter Hartmann --- src/corelib/tools/qcontiguouscache.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/corelib/tools') diff --git a/src/corelib/tools/qcontiguouscache.h b/src/corelib/tools/qcontiguouscache.h index b3608507fe..9a6b9e3d62 100644 --- a/src/corelib/tools/qcontiguouscache.h +++ b/src/corelib/tools/qcontiguouscache.h @@ -392,10 +392,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) -- cgit v1.2.3