Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.4
qt3
limit-image-size.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File limit-image-size.diff of Package qt3
Index: kernel/qasyncimageio.cpp ================================================================================ --- src/kernel/qasyncimageio.cpp +++ src/kernel/qasyncimageio.cpp @@ -901,7 +901,12 @@ sheight = newtop + newheight; if (img.isNull()) { - img.create(swidth, sheight, 32); + bool ok = img.create(swidth, sheight, 32); + if (!ok) + { + state = Error; + break; + } memset( img.bits(), 0, img.numBytes() ); if (consumer) consumer->setSize(swidth, sheight); } @@ -956,9 +961,15 @@ if (backingstore.width() < w || backingstore.height() < h) { // We just use the backing store as a byte array - backingstore.create( QMAX(backingstore.width(), w), + bool ok = backingstore.create( + QMAX(backingstore.width(), w), QMAX(backingstore.height(), h), 32); + if (!ok) + { + state = Error; + break; + } memset( img.bits(), 0, img.numBytes() ); } for (int ln=0; ln<h; ln++) { --- src/kernel/qimage.cpp +++ src/kernel/qimage.cpp @@ -65,6 +65,8 @@ #define QT_NO_IMAGE_16_BIT #endif +int qt_max_image_height = 0; +int qt_max_image_width = 0; /*! \class QImage @@ -1201,6 +1203,28 @@ data->alpha = enable; } +QSize QImage::maxImageSize() +{ + if (!qt_max_image_height || !qt_max_image_width) + return QSize(); + return QSize(qt_max_image_height, qt_max_image_width); +} + +void QImage::setMaxImageSize(const QSize &size) +{ + if (size.isValid()) + { + qt_max_image_height = size.height(); + qt_max_image_width = size.width(); + } + else + { + qt_max_image_height = 0; + qt_max_image_width = 0; + } +} + + /*! Sets the image \a width, \a height, \a depth, its number of colors @@ -1230,6 +1254,14 @@ reset(); // reset old data if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 ) return FALSE; // invalid parameter(s) + if ( qt_max_image_height && (height > qt_max_image_height * 4)) + return FALSE; // Too high + if ( qt_max_image_width && (width > qt_max_image_width * 4)) + return FALSE; // Too wide + if ( qt_max_image_height && qt_max_image_width && + (height * width > qt_max_image_height * qt_max_image_width)) + return FALSE; // Too large + if ( depth == 1 && bitOrder == IgnoreEndian ) { #if defined(QT_CHECK_RANGE) qWarning( "QImage::create: Bit order is required for 1 bpp images" ); --- src/kernel/qimage.h +++ src/kernel/qimage.h @@ -194,6 +194,10 @@ int quality=-1 ) const; bool save( QIODevice * device, const char* format, int quality=-1 ) const; + +#define QT_HAVE_MAX_IMAGE_SIZE + static QSize maxImageSize(); + static void setMaxImageSize(const QSize &size); #endif //QT_NO_IMAGEIO bool valid( int x, int y ) const;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor