diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-10-07 10:23:34 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-10-07 13:26:58 +0000 |
commit | 69fbe0ab906fe877a3aac8863492bf66f4e6073a (patch) | |
tree | 8505f9956cfb19d0d70c862f046288b6d6102e75 /src/plugins/imageviewer | |
parent | cbc9f4c4e1f4a64b33d8f516f25cf2ba21d2716e (diff) | |
download | qt-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.cpp | 10 |
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 |