From 69fbe0ab906fe877a3aac8863492bf66f4e6073a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 7 Oct 2021 10:23:34 +0200 Subject: [PATCH] ImageViewer: Fix crash when opening invalid movie MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Alessandro Portale Reviewed-by: Qt CI Bot --- src/plugins/imageviewer/imageviewerfile.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/imageviewer/imageviewerfile.cpp b/src/plugins/imageviewer/imageviewerfile.cpp index 2a6204e11d8..3fe26890d0d 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