summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@theqtcompany.com>2015-03-03 09:39:22 +0100
committeraavit <eirik.aavitsland@theqtcompany.com>2015-03-04 10:53:00 +0000
commit509bc7e59c69937900cf258e64889a6e88edbcf0 (patch)
tree787951c2d0886d6569c5767bcb9d014bb2a5a851 /tests
parent227bb20dedc4156c1a4653d55252b0790fd1ae75 (diff)
Fix another crash when converting format of buffer-created QImage
This continues 68762151dbf45fbb44e140ac2ad13dbe8d357352 When doing format conversion, the optimized inplace codepath did not check if the image data was external, i.e. if the QImage had been created by the constructor taking an existing external buffer. The previous commit fixed the readonly case. But in the case of the QImage constructor taking non-const uchar*, data will be read-write, but still external. This would of course crash if the converter tries to realloc it. Task-number: QTBUG-44610 Change-Id: I94d275d464e8af221682b538fc3e4897a59c061e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index e8da3263ae..309d3a80c5 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -2456,6 +2456,7 @@ void tst_QImage::inplaceConversion_data()
QTest::addColumn<QImage::Format>("format");
QTest::addColumn<QImage::Format>("dest_format");
+ QTest::newRow("Format_RGB32 -> RGB16") << QImage::Format_RGB32 << QImage::Format_RGB16;
QTest::newRow("Format_ARGB32 -> Format_RGBA8888") << QImage::Format_ARGB32 << QImage::Format_RGBA8888;
QTest::newRow("Format_RGB888 -> Format_ARGB6666_Premultiplied") << QImage::Format_RGB888 << QImage::Format_ARGB6666_Premultiplied;
QTest::newRow("Format_RGB16 -> Format_RGB555") << QImage::Format_RGB16 << QImage::Format_RGB555;
@@ -2494,16 +2495,21 @@ void tst_QImage::inplaceConversion()
QCOMPARE(imageConverted.constScanLine(0), originalPtr);
{
- // Test attempted inplace conversion of images created on existing, readonly buffer
+ // Test attempted inplace conversion of images created on existing buffer
static const quint32 readOnlyData[] = { 0x00010203U, 0x04050607U, 0x08091011U, 0x12131415U };
+ quint32 readWriteData[] = { 0x00010203U, 0x04050607U, 0x08091011U, 0x12131415U };
QImage roImage((const uchar *)readOnlyData, 2, 2, format);
- QImage inplaceConverted = std::move(roImage).convertToFormat(dest_format);
+ QImage roInplaceConverted = std::move(roImage).convertToFormat(dest_format);
+
+ QImage rwImage((uchar *)readWriteData, 2, 2, format);
+ QImage rwInplaceConverted = std::move(rwImage).convertToFormat(dest_format);
QImage roImage2((const uchar *)readOnlyData, 2, 2, format);
QImage normalConverted = roImage2.convertToFormat(dest_format);
- QCOMPARE(normalConverted, inplaceConverted);
+ QCOMPARE(normalConverted, roInplaceConverted);
+ QCOMPARE(normalConverted, rwInplaceConverted);
}
#endif
}