aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/imageviewer
diff options
context:
space:
mode:
authorNikita Baryshnikov <nib952051@gmail.com>2015-06-23 18:13:00 +0300
committerNikita Baryshnikov <nib952051@gmail.com>2015-06-24 10:26:01 +0000
commit3c1b1496d43d41e6a628b14abe0172f34a866151 (patch)
treeccc27e2cc415b03d0ca63677e896fb578849d5c9 /src/plugins/imageviewer
parent7c9ffe4ab87aa36942ec27f15b41a1a437a7d996 (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.cpp12
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)