diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2010-09-17 17:47:56 (GMT) |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2010-09-17 17:58:16 (GMT) |
commit | dd14f5ea568ce647638993da90112e71cffc9cc9 (patch) | |
tree | 6289ae3951898a7b3d9fc218cb6355a98ac4135c /src/gui/image | |
parent | 4f33dbd5361c0875f39518b762a764478f04dd30 (diff) | |
download | Qt-dd14f5ea568ce647638993da90112e71cffc9cc9.zip Qt-dd14f5ea568ce647638993da90112e71cffc9cc9.tar.gz Qt-dd14f5ea568ce647638993da90112e71cffc9cc9.tar.bz2 |
Fixed memory corruption issue in qt_blurImage for Indexed8 images.
If transposed was set to 0 we did not check the color depth of the image
and ended up with a buffer overflow.
Reviewed-by: Jens Bache-Wiig
Diffstat (limited to 'src/gui/image')
-rw-r--r-- | src/gui/image/qpixmapfilter.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index 70770c4..26bffcc 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -764,10 +764,17 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp } if (transposed == 0) { - qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()), - temp.width(), temp.height(), temp.bytesPerLine(), - reinterpret_cast<quint32*>(img.bits()), - img.bytesPerLine()); + if (img.depth() == 8) { + qt_memrotate90(reinterpret_cast<const quint8*>(temp.bits()), + temp.width(), temp.height(), temp.bytesPerLine(), + reinterpret_cast<quint8*>(img.bits()), + img.bytesPerLine()); + } else { + qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()), + temp.width(), temp.height(), temp.bytesPerLine(), + reinterpret_cast<quint32*>(img.bits()), + img.bytesPerLine()); + } } else { img = temp; } |