Fix QTgaHandler::canRead() not obeying image plugin specs

This commit is contained in:
Than Ngo 2012-03-30 22:05:31 +02:00
parent 6e276638e1
commit 215aa5fd08
2 changed files with 60 additions and 1 deletions

View File

@ -0,0 +1,53 @@
diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp
--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me 2012-03-30 21:54:59.921331145 +0200
+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp 2012-03-30 21:58:14.516042067 +0200
@@ -41,6 +41,7 @@
#include "qtgafile.h"
+#include <QtCore/QBuffer>
#include <QtCore/QIODevice>
#include <QtCore/QDebug>
#include <QtCore/QDateTime>
@@ -264,3 +265,16 @@ QImage QTgaFile::readImage()
// TODO: add processing of TGA extension information - ie TGA 2.0 files
return im;
}
+/**
+ * Checks if device contains a valid tga image, *without* changing device
+ * position.
+ */
+bool QTgaFile::canRead(QIODevice *device)
+{
+ QByteArray header = device->peek(HeaderSize);
+ if (header.size() < HeaderSize)
+ return false;
+ QBuffer buffer(&header);
+ QTgaFile tga(&buffer);
+ return tga.isValid();
+}
diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h
--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me 2012-03-30 21:58:39.670023189 +0200
+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h 2012-03-30 21:59:06.202317384 +0200
@@ -93,6 +93,8 @@ public:
inline QSize size() const;
inline Compression compression() const;
+ static bool canRead(QIODevice *device);
+
private:
static inline quint16 littleEndianInt(const unsigned char *d);
diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp
--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me 2012-03-30 21:59:17.373303356 +0200
+++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp 2012-03-30 22:00:13.817226439 +0200
@@ -77,8 +77,7 @@ bool QTgaHandler::canRead(QIODevice *dev
qWarning("QTgaHandler::canRead() called with no device");
return false;
}
- QTgaFile tga(device);
- return tga.isValid();
+ return QTgaFile::canRead(device);
}
bool QTgaHandler::read(QImage *image)

View File

@ -11,7 +11,7 @@ Summary: Qt toolkit
Name: qt
Epoch: 1
Version: 4.8.1
Release: 3%{?dist}
Release: 4%{?dist}
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
@ -106,6 +106,8 @@ Patch80: qt-everywhere-opensource-src-4.8.0-ld-gold.patch
Patch81: qt-everywhere-opensource-src-4.8.0-gcc-4.7.patch
# upstream patches
# http://codereview.qt-project.org/#change,22006
Patch100: qt-everywhere-opensource-src-4.8.1-qtgahandle.patch
# security patches
# CVE-2011-3922 qt: Stack-based buffer overflow in embedded harfbuzz code
@ -436,6 +438,7 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
%patch81 -p1 -b .gcc-4.7
# upstream patches
%patch100 -p1 -b .QTgaHandler
# security fixes
%patch200 -p1 -b .CVE-2011-3922
@ -1060,6 +1063,9 @@ fi
%changelog
* Fri Mar 30 2012 Than Ngo <than@redhat.com> - 4.8.1-4
- Fix QTgaHandler::canRead() not obeying image plugin specs
* Thu Mar 29 2012 Rex Dieter <rdieter@fedoraproject.org> 4.8.1-3
- Header file name mismatch in qt-devel i686 (#808087)