From 8bd48a1c335b404ebbeb7c09c859e0715e6b5cd4 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 14 Aug 2019 10:29:21 +0200 Subject: Fix crash in optimized solid fills on RGBA64PM Was expecting destStore64 to be non-null. Change-Id: I4fc827256630a35e0669d405c04f9b5b7e71580e Reviewed-by: Eirik Aavitsland --- src/gui/painting/qdrawhelper.cpp | 2 +- tests/auto/other/lancelot/tst_lancelot.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 36fb091ff8..533ad39b86 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -4491,7 +4491,7 @@ void blend_color_generic_rgb64(int count, const QSpan *spans, void *userData) while (count--) { int x = spans->x; int length = spans->len; - if (solidFill && bpp >= QPixelLayout::BPP8 && spans->coverage == 255 && length) { + if (solidFill && bpp >= QPixelLayout::BPP8 && spans->coverage == 255 && length && op.destStore64) { // If dest doesn't matter we don't need to bother with blending or converting all the identical pixels op.destStore64(data->rasterBuffer, x, spans->y, &color, 1); spanfill_from_first(data->rasterBuffer, bpp, x, spans->y, length); diff --git a/tests/auto/other/lancelot/tst_lancelot.cpp b/tests/auto/other/lancelot/tst_lancelot.cpp index 15267d256e..ba04802a26 100644 --- a/tests/auto/other/lancelot/tst_lancelot.cpp +++ b/tests/auto/other/lancelot/tst_lancelot.cpp @@ -85,6 +85,8 @@ private slots: void testRasterARGB8565PM(); void testRasterGrayscale8_data(); void testRasterGrayscale8(); + void testRasterRGBA64PM_data(); + void testRasterRGBA64PM(); #ifndef QT_NO_OPENGL void testOpenGL_data(); @@ -226,6 +228,17 @@ void tst_Lancelot::testRasterGrayscale8() } +void tst_Lancelot::testRasterRGBA64PM_data() +{ + setupTestSuite(); +} + +void tst_Lancelot::testRasterRGBA64PM() +{ + runTestSuite(Raster, QImage::Format_RGBA64_Premultiplied); +} + + #ifndef QT_NO_OPENGL bool tst_Lancelot::checkSystemGLSupport() { -- cgit v1.2.3