Blame SOURCES/0012-QQuickItemAnimation-close-potential-memory-leak.patch

03bb49
From c3804f86e0a75c0c8402127a5b01bc7a858e6492 Mon Sep 17 00:00:00 2001
03bb49
From: Volker Hilsheimer <volker.hilsheimer@qt.io>
03bb49
Date: Wed, 17 Mar 2021 16:52:21 +0100
03bb49
Subject: [PATCH 12/20] QQuickItemAnimation: close potential memory leak
03bb49
03bb49
Fix static analyzer warning bff6cb4333f531d5a72f7bf6dc1485f6.
03bb49
03bb49
If ownership of viaData is not passed to the viaAction, then the object
03bb49
might be leaked. Use std::unique_ptr to make ownership transfer explicit
03bb49
and implicitly delete unowned objects.
03bb49
03bb49
Pick-to: 6.1 5.15
03bb49
Change-Id: I89f2a6b630941a98a74db302bc1ab08055c71974
03bb49
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
03bb49
(cherry picked from commit 78aea267209c34abeb4895712dc76c923aa46165)
03bb49
---
03bb49
 src/quick/items/qquickitemanimation.cpp | 11 ++++-------
03bb49
 1 file changed, 4 insertions(+), 7 deletions(-)
03bb49
03bb49
diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp
03bb49
index 23694e2de3..dfb56ccc00 100644
03bb49
--- a/src/quick/items/qquickitemanimation.cpp
03bb49
+++ b/src/quick/items/qquickitemanimation.cpp
03bb49
@@ -230,8 +230,8 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act
03bb49
 {
03bb49
     Q_D(QQuickParentAnimation);
03bb49
 
03bb49
-    QQuickParentAnimationData *data = new QQuickParentAnimationData;
03bb49
-    QQuickParentAnimationData *viaData = new QQuickParentAnimationData;
03bb49
+    std::unique_ptr<QQuickParentAnimationData> data(new QQuickParentAnimationData);
03bb49
+    std::unique_ptr<QQuickParentAnimationData> viaData(new QQuickParentAnimationData);
03bb49
 
03bb49
     bool hasExplicit = false;
03bb49
     if (d->target && d->newParent) {
03bb49
@@ -377,8 +377,8 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act
03bb49
         QParallelAnimationGroupJob *ag = new QParallelAnimationGroupJob;
03bb49
 
03bb49
         if (d->via)
03bb49
-            viaAction->setAnimAction(viaData);
03bb49
-        targetAction->setAnimAction(data);
03bb49
+            viaAction->setAnimAction(viaData.release());
03bb49
+        targetAction->setAnimAction(data.release());
03bb49
 
03bb49
         //take care of any child animations
03bb49
         bool valid = d->defaultProperty.isValid();
03bb49
@@ -405,9 +405,6 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act
03bb49
             topLevelGroup->appendAnimation(d->via ? viaAction : targetAction);
03bb49
         }
03bb49
         return initInstance(topLevelGroup);
03bb49
-    } else {
03bb49
-        delete data;
03bb49
-        delete viaData;
03bb49
     }
03bb49
     return nullptr;
03bb49
 }
03bb49
-- 
03bb49
2.35.1
03bb49