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

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