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

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