From 72fe9f1d0df9bf2cb49306aea571a88056591f6d Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Thu, 20 Feb 2014 16:50:15 +0100 Subject: [PATCH] Fix a crash of accessing deleted paintengine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When painting to QPixmap with QBlitterPaintEngine and dfb PaintEngine have PaintDevice (pdev) as QImage. Painter code uses PaintDevice::paintEngine() to refer to paintEngine. This will became dangling pointer since QDirectFbBlitter::doLock() will delete QImage. Instead return QPixmap as PaintDevice. Change-Id: Idfac919b6438a82b412020e441e0a102e4a2a052 Reviewed-by: Jørgen Lind --- src/gui/painting/qpaintengine_blitter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index e356a3a36a..26eacacd49 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -494,11 +494,12 @@ void QBlitterPaintEngine::clipEnabledChanged() bool QBlitterPaintEngine::begin(QPaintDevice *pdev) { + Q_D(QBlitterPaintEngine); bool ok = QRasterPaintEngine::begin(pdev); #ifdef QT_BLITTER_RASTEROVERLAY - Q_D(QBlitterPaintEngine); d->pmData->unmergeOverlay(); #endif + d->pdev = pdev; return ok; }