summaryrefslogtreecommitdiff
path: root/src/plugins/imageviewer
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-10-07 10:23:34 +0200
committerEike Ziller <eike.ziller@qt.io>2021-10-07 13:26:58 +0000
commit69fbe0ab906fe877a3aac8863492bf66f4e6073a (patch)
tree8505f9956cfb19d0d70c862f046288b6d6102e75 /src/plugins/imageviewer
parentcbc9f4c4e1f4a64b33d8f516f25cf2ba21d2716e (diff)
downloadqt-creator-69fbe0ab906fe877a3aac8863492bf66f4e6073a.tar.gz
ImageViewer: Fix crash when opening invalid movie
Qt 6 sends the finished signal directly from QMovie::start, so if we connect QMovie::finished directly to QMovie::start, we end up in an endless recursion and stack exhaustion. Use a queued connection, and do not restart a movie if it went invalid. Fixes: QTCREATORBUG-26377 Change-Id: I9980615f44d0cf7e92f85c010427bd6b67046949 Reviewed-by: Robert Löhning <robert.loehning@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/imageviewer')
-rw-r--r--src/plugins/imageviewer/imageviewerfile.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/plugins/imageviewer/imageviewerfile.cpp b/src/plugins/imageviewer/imageviewerfile.cpp
index 2a6204e11d..3fe26890d0 100644
--- a/src/plugins/imageviewer/imageviewerfile.cpp
+++ b/src/plugins/imageviewer/imageviewerfile.cpp
@@ -126,7 +126,15 @@ Core::IDocument::OpenResult ImageViewerFile::openImpl(QString *errorString,
m_type = TypeMovie;
m_movie = new QMovie(fileName, QByteArray(), this);
m_movie->setCacheMode(QMovie::CacheAll);
- connect(m_movie, &QMovie::finished, m_movie, &QMovie::start);
+ connect(
+ m_movie,
+ &QMovie::finished,
+ m_movie,
+ [this] {
+ if (m_movie->isValid())
+ m_movie->start();
+ },
+ Qt::QueuedConnection);
connect(m_movie, &QMovie::resized, this, &ImageViewerFile::imageSizeChanged);
m_movie->start();
m_isPaused = false; // force update