diff options
author | Nikita Baryshnikov <nib952051@gmail.com> | 2015-06-23 18:13:00 +0300 |
---|---|---|
committer | Nikita Baryshnikov <nib952051@gmail.com> | 2015-06-24 10:26:01 +0000 |
commit | 3c1b1496d43d41e6a628b14abe0172f34a866151 (patch) | |
tree | ccc27e2cc415b03d0ca63677e896fb578849d5c9 /src/plugins/imageviewer | |
parent | 7c9ffe4ab87aa36942ec27f15b41a1a437a7d996 (diff) |
ImageViewer: fix crash
steps to reproduce:
- open 'TestQtcCrash.jpg'
- truncate -s 0 ./TestQtcCrash.jpg
- write valid image back to 'TestQtcCrash.jpg'
Change-Id: I76aed9379098c323f8434e0ab53b6561996fa281
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/imageviewer')
-rw-r--r-- | src/plugins/imageviewer/imageviewerfile.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/plugins/imageviewer/imageviewerfile.cpp b/src/plugins/imageviewer/imageviewerfile.cpp index 479dfa94f9a..663f94a1f7b 100644 --- a/src/plugins/imageviewer/imageviewerfile.cpp +++ b/src/plugins/imageviewer/imageviewerfile.cpp @@ -97,7 +97,6 @@ Core::IDocument::OpenResult ImageViewerFile::open(QString *errorString, const QS Core::IDocument::OpenResult ImageViewerFile::openImpl(QString *errorString, const QString &fileName) { cleanUp(); - m_type = TypeInvalid; if (!QFileInfo(fileName).isReadable()) return OpenResult::ReadError; @@ -112,14 +111,16 @@ Core::IDocument::OpenResult ImageViewerFile::openImpl(QString *errorString, cons #ifndef QT_NO_SVG if (format.startsWith("svg")) { - m_type = TypeSvg; m_tempSvgItem = new QGraphicsSvgItem(fileName); QRectF bound = m_tempSvgItem->boundingRect(); if (bound.width() == 0 && bound.height() == 0) { + delete m_tempSvgItem; + m_tempSvgItem = 0; if (errorString) *errorString = tr("Failed to read SVG image."); return OpenResult::CannotHandle; } + m_type = TypeSvg; emit imageSizeChanged(QSize()); } else #endif @@ -133,14 +134,15 @@ Core::IDocument::OpenResult ImageViewerFile::openImpl(QString *errorString, cons m_isPaused = false; // force update setPaused(true); } else { - m_type = TypePixmap; m_pixmap = new QPixmap(fileName); if (m_pixmap->isNull()) { if (errorString) *errorString = tr("Failed to read image."); delete m_pixmap; + m_pixmap = 0; return OpenResult::CannotHandle; } + m_type = TypePixmap; emit imageSizeChanged(m_pixmap->size()); } @@ -242,10 +244,14 @@ void ImageViewerFile::updateVisibility() void ImageViewerFile::cleanUp() { delete m_pixmap; + m_pixmap = 0; delete m_movie; + m_movie = 0; #ifndef QT_NO_SVG delete m_tempSvgItem; + m_tempSvgItem = 0; #endif + m_type = TypeInvalid; } bool ImageViewerFile::save(QString *errorString, const QString &fileName, bool autoSave) |