From ef34c990779cfcb068f86dd5dacfc4a7e7b58743 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 3 Mar 2021 18:02:32 +0100 Subject: [PATCH] QMetaType::create: don't leak memory if copy can't be made QMetaType::construct will return nullptr if a copy is requested but if there is no copy constructor. In that case, the memory allocated in QMetaType::create will be leaked. This case is covered in the unit tests in template<> void testCreateHelper() so we can't assert in construct that a copy constructor is present if a copy is requested. Fixes static analyzer warning 618b1e6877f737df57c39fd35ad91cd4. Change-Id: Ic439b36b1f120b9d0f888efaeab2801d8acc13de Reviewed-by: Fabian Kosmale (cherry picked from commit 90b51219ddc75c4dd2d171f2dba644e67d1e4a62) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qmetatype.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index a2e28b2d22d..4e3aa48dbe7 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -571,7 +571,7 @@ int QMetaType::id() const */ void *QMetaType::create(const void *copy) const { - if (d_ptr) { + if (d_ptr && (copy ? !!d_ptr->copyCtr : !!d_ptr->defaultCtr)) { void *where = #ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__ d_ptr->alignment > __STDCPP_DEFAULT_NEW_ALIGNMENT__ ?