fix deletion order in QImageReader/Writer destructors
authorDebian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Thu, 12 Jan 2023 11:43:32 +0000 (11:43 +0000)
committerDmitry Shachnev <mitya57@debian.org>
Thu, 12 Jan 2023 11:43:32 +0000 (11:43 +0000)
Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=f091026be1deb4b4
Last-Update: 2023-01-12

The device would be deleted before the image format handler, and hence
be a dangling pointer that could easily cause a crash if the handler
or codec would access it on destruction, e.g. for cleanup.

Gbp-Pq: Name image_deletion_order.diff

src/gui/image/qimagereader.cpp
src/gui/image/qimagewriter.cpp

index 5cb7e1328e83418d0197735a39ad0632974d6ed1..2e6b364a98d0e8c7f135159acb69355517b0b8b5 100644 (file)
@@ -515,9 +515,9 @@ QImageReaderPrivate::QImageReaderPrivate(QImageReader *qq)
 */
 QImageReaderPrivate::~QImageReaderPrivate()
 {
+    delete handler;
     if (deleteDevice)
         delete device;
-    delete handler;
 }
 
 /*!
index 33f5e491c7ea0d1ef9f25388b7329297761cfd5a..c4654d18e83bd4d7def7dcc38a91d27f272895b8 100644 (file)
@@ -349,9 +349,9 @@ QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format)
 */
 QImageWriter::~QImageWriter()
 {
+    delete d->handler;
     if (d->deleteDevice)
         delete d->device;
-    delete d->handler;
     delete d;
 }