Details
-
Bug
-
Resolution: Fixed
-
P1: Critical
-
6.6.1
-
None
-
Fedora 39
-
15051e205 (dev), 993db3ee9 (6.7), 4c674c8bd (6.6), 1fb4dd5d4 (tqtc/lts-6.5)
Description
The following program crashes. See attachment for the input image
#include <QImage> int main(int argc, char *argv[]) { QImage img("img.png"); img.setDevicePixelRatio(2); img.scaled(QSize(320, 320), Qt::KeepAspectRatio, Qt::SmoothTransformation); }
See also https://bugs.kde.org/show_bug.cgi?id=477342
Backtrace:
Thread 4 (Thread 0x7fffee9976c0 (LWP 162088) "Thread (pooled)"): #0 fetchIndexedToARGB32PM<(QPixelLayout::BPP)3>(uint*, uchar const*, int, int, QList<unsigned int> const*, QDitherInfo*) (buffer=buffer@entry=0x7fffee9899b0, src=0x7ff fef9eb010 '\361' <repeats 199 times>, <incomplete sequence \361>..., index=index@entry=0, count=count@entry=512, clut=clut@entry=0x0) at /home/nico/workspace/qt6/qtbase /src/gui/painting/qpixellayout.cpp:758 #1 0x00007ffff7cf5759 in fetchTransformedBilinear_simple_scale_helper<(TextureBlendType)4>(uint*, uint*, QTextureData const&, int&, int, int, int&) (b=b@entry=0x7fffee 994b70, end=end@entry=0x7fffee995070, image=<optimized out>, fx=@0x7fffee98e2c0: 19659, fdx=104857, fy=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/paint ing/qdrawhelper.cpp:2075 #2 0x00007ffff7d16ab8 in fetchTransformedBilinear<(TextureBlendType)4, (QPixelLayout::BPP)0>(uint*, Operator const*, QSpanData const*, int, int, int) (buffer=0x7fffee9 94b70, data=<optimized out>, y=<optimized out>, x=<optimized out>, length=320) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:2340 #3 0x00007ffff7d22507 in BlendSrcGeneric::fetch(int, int, int, bool) (fetchDest=false, len=<optimized out>, y=<optimized out>, x=0, this=0x7fffee992b50) at /home/nico/ workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4041 #4 handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda(int, int)#1}::operator()(int, int) const (__closure=0x7fffffffbca0 , cStart=<optimized out>, cEnd=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:3993 #5 0x00007ffff7d226f1 in handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}::operator()() const (__closure=0x4780f8 ) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4015 #6 QRunnable::QGenericRunnable::Helper<handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}>::impl(QRunnable::QGeneri cRunnable::HelperBase::Op, QRunnable::QGenericRunnable::HelperBase*, void*) (op=<optimized out>, that=0x4780f0, arg=<optimized out>) at /home/nico/workspace/qt6/qtbase/ include/QtCore/../../src/corelib/thread/qrunnable.h:73 #7 0x00007ffff70f5314 in QThreadPoolThread::run() (this=0x478120) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthreadpool.cpp:66 #8 0x00007ffff70f0797 in operator() (__closure=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:324 #9 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/q thread_unix.cpp:260 #10 QThreadPrivate::start(void*) (arg=0x478120) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:283 #11 0x00007ffff68ac897 in start_thread (arg=<optimized out>) at pthread_create.c:444 #12 0x00007ffff69336fc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Thread 3 (Thread 0x7fffef1986c0 (LWP 162087) "Thread (pooled)"): #0 0x00007ffff7982f4e in QArrayDataPointer<unsigned int>::data() const (this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qarraydatapointer.h: 114 #1 QList<unsigned int>::data() const (this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qlist.h:415 #2 QList<unsigned int>::at(long long) const (i=<optimized out>, this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qlist.h:432 #3 fetchIndexedToARGB32PM<(QPixelLayout::BPP)3>(uint*, uchar const*, int, int, QList<unsigned int> const*, QDitherInfo*) (buffer=buffer@entry=0x7fffef18a9b0, src=0x7ff fef9df010 '\361' <repeats 199 times>, <incomplete sequence \361>..., index=index@entry=0, count=count@entry=512, clut=clut@entry=0x0) at /home/nico/workspace/qt6/qtbase /src/gui/painting/qpixellayout.cpp:758 #4 0x00007ffff7cf5759 in fetchTransformedBilinear_simple_scale_helper<(TextureBlendType)4>(uint*, uint*, QTextureData const&, int&, int, int, int&) (b=b@entry=0x7fffef 195b70, end=end@entry=0x7fffef196070, image=<optimized out>, fx=@0x7fffef18f2c0: 19659, fdx=104857, fy=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/paint ing/qdrawhelper.cpp:2075 #5 0x00007ffff7d16ab8 in fetchTransformedBilinear<(TextureBlendType)4, (QPixelLayout::BPP)0>(uint*, Operator const*, QSpanData const*, int, int, int) (buffer=0x7fffef1 95b70, data=<optimized out>, y=<optimized out>, x=<optimized out>, length=320) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:2340 #6 0x00007ffff7d22507 in BlendSrcGeneric::fetch(int, int, int, bool) (fetchDest=false, len=<optimized out>, y=<optimized out>, x=0, this=0x7fffef193b50) at /home/nico/ workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4041 #7 handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda(int, int)#1}::operator()(int, int) const (__closure=0x7fffffffbca0 , cStart=<optimized out>, cEnd=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:3993 #8 0x00007ffff7d226f1 in handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}::operator()() const (__closure=0x432908 ) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4015 --Type <RET> for more, q to quit, c to continue without paging--c #9 QRunnable::QGenericRunnable::Helper<handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}>::impl(QRunnable::QGeneri cRunnable::HelperBase::Op, QRunnable::QGenericRunnable::HelperBase*, void*) (op=<optimized out>, that=0x432900, arg=<optimized out>) at /home/nico/workspace/qt6/qtbase/ include/QtCore/../../src/corelib/thread/qrunnable.h:73 #10 0x00007ffff70f5314 in QThreadPoolThread::run() (this=0x432930) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthreadpool.cpp:66 #11 0x00007ffff70f0797 in operator() (__closure=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:324 #12 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/q thread_unix.cpp:260 #13 QThreadPrivate::start(void*) (arg=0x432930) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:283 #14 0x00007ffff68ac897 in start_thread (arg=<optimized out>) at pthread_create.c:444 #15 0x00007ffff69336fc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Thread 2 (Thread 0x7fffef9996c0 (LWP 162086) "Thread (pooled)"): #0 0x00007ffff7982f4e in QArrayDataPointer<unsigned int>::data() const (this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qarraydatapointer.h: 114 #1 QList<unsigned int>::data() const (this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qlist.h:415 #2 QList<unsigned int>::at(long long) const (i=<optimized out>, this=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qlist.h:432 #3 fetchIndexedToARGB32PM<(QPixelLayout::BPP)3>(uint*, uchar const*, int, int, QList<unsigned int> const*, QDitherInfo*) (buffer=buffer@entry=0x7fffef98b9b0, src=0x7ff fef9d3010 'd' <repeats 200 times>..., index=index@entry=0, count=count@entry=512, clut=clut@entry=0x0) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qpixellayout. cpp:758 #4 0x00007ffff7cf5759 in fetchTransformedBilinear_simple_scale_helper<(TextureBlendType)4>(uint*, uint*, QTextureData const&, int&, int, int, int&) (b=b@entry=0x7fffef 996b70, end=end@entry=0x7fffef997070, image=<optimized out>, fx=@0x7fffef9902c0: 19659, fdx=104857, fy=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/paint ing/qdrawhelper.cpp:2075 #5 0x00007ffff7d16ab8 in fetchTransformedBilinear<(TextureBlendType)4, (QPixelLayout::BPP)0>(uint*, Operator const*, QSpanData const*, int, int, int) (buffer=0x7fffef9 96b70, data=<optimized out>, y=<optimized out>, x=<optimized out>, length=320) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:2340 #6 0x00007ffff7d22507 in BlendSrcGeneric::fetch(int, int, int, bool) (fetchDest=false, len=<optimized out>, y=<optimized out>, x=0, this=0x7fffef994b50) at /home/nico/ workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4041 #7 handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda(int, int)#1}::operator()(int, int) const (__closure=0x7fffffffbca0 , cStart=<optimized out>, cEnd=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:3993 #8 0x00007ffff7d226f1 in handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}::operator()() const (__closure=0x433138 ) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4015 #9 QRunnable::QGenericRunnable::Helper<handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&)::{lambda()#1}>::impl(QRunnable::QGeneri cRunnable::HelperBase::Op, QRunnable::QGenericRunnable::HelperBase*, void*) (op=<optimized out>, that=0x433130, arg=<optimized out>) at /home/nico/workspace/qt6/qtbase/ include/QtCore/../../src/corelib/thread/qrunnable.h:73 #10 0x00007ffff70f5314 in QThreadPoolThread::run() (this=0x4627d0) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthreadpool.cpp:66 #11 0x00007ffff70f0797 in operator() (__closure=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:324 #12 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/q thread_unix.cpp:260 #13 QThreadPrivate::start(void*) (arg=0x4627d0) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qthread_unix.cpp:283 #14 0x00007ffff68ac897 in start_thread (arg=<optimized out>) at pthread_create.c:444 #15 0x00007ffff69336fc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Thread 1 (Thread 0x7ffff5e23e00 (LWP 162083) "imgtest"): #0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38 #1 0x00007ffff70f226a in QtLinuxFutex::_q_futex(int*, int, int, unsigned long long, int*, int) (val3=0, addr2=0x0, val2=0, val=<optimized out>, op=0, addr=<optimized o ut>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qfutex_p.h:64 #2 QtLinuxFutex::futexWait<QBasicAtomicInteger<unsigned int> >(QBasicAtomicInteger<unsigned int>&, QBasicAtomicInteger<unsigned int>::Type) (expectedValue=<optimized o ut>, futex=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qfutex_p.h:83 #3 futexSemaphoreTryAcquire_loop<false>(QBasicAtomicInteger<unsigned long long>&, unsigned long long, unsigned long long, QDeadlineTimer) (timer=..., nn=17179869187, c urValue=<optimized out>, u=...) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qsemaphore.cpp:174 #4 futexSemaphoreTryAcquire<QDeadlineTimer::ForeverConstant>(QBasicAtomicInteger<unsigned long long>&, int, QDeadlineTimer::ForeverConstant) (timeout=QDeadlineTimer::F oreverConstant::Forever, n=n@entry=3, u=...) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qsemaphore.cpp:241 #5 QSemaphore::acquire(int) (this=this@entry=0x7fffffffbc98, n=n@entry=3) at /home/nico/workspace/qt6/qtbase/src/corelib/thread/qsemaphore.cpp:312 #6 0x00007ffff7d22897 in handleSpans<BlendSrcGeneric>(int, QT_FT_Span_ const*, QSpanData const*, Operator const&) (count=count@entry=180, spans=<optimized out>, data=< optimized out>, op=...) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qdrawhelper.cpp:4015 #7 0x00007ffff7d20240 in blend_src_generic(int, QT_FT_Span const*, void*) (count=180, spans=<optimized out>, userData=<optimized out>) at /home/nico/workspace/qt6/qtba se/src/gui/painting/qdrawhelper.cpp:4138 #8 0x00007ffff799ab04 in QSpanBuffer::flushSpans() (this=0x7fffffffbfb0) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qrasterizer.cpp:83 #9 QSpanBuffer::~QSpanBuffer() (this=0x7fffffffbfb0, __in_chrg=<optimized out>) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qrasterizer.cpp:57 #10 QRasterizer::rasterizeLine(QPointF const&, QPointF const&, double, bool) (this=<optimized out>, a=..., b=..., width=<optimized out>, width@entry=0.5625, squareCap=s quareCap@entry=false) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qrasterizer.cpp:1164 #11 0x00007ffff78ed935 in QRasterPaintEngine::drawImage(QRectF const&, QImage const&, QRectF const&, QFlags<Qt::ImageConversionFlag>) (this=this@entry=0x42d1a0, r=..., img=..., sr=...) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qscopedpointer.h:90 #12 0x00007ffff78eeb6c in QRasterPaintEngine::drawImage(QRectF const&, QImage const&, QRectF const&, QFlags<Qt::ImageConversionFlag>) (sr=..., img=..., r=..., this=0x42 d1a0) at /home/nico/workspace/qt6/qtbase/src/corelib/tools/qrect.h:648 #13 QRasterPaintEngine::drawImage(QPointF const&, QImage const&) (this=0x42d1a0, p=..., img=...) at /home/nico/workspace/qt6/qtbase/src/gui/painting/qpaintengine_raster .cpp:2107 #14 0x00007ffff776156b in QPainter::drawImage(QPoint const&, QImage const&) (image=..., p=<optimized out>, this=0x7fffffffd2c0) at /home/nico/workspace/qt6/qtbase/src/g ui/painting/qpainter.h:801 #15 QImage::transformed(QTransform const&, Qt::TransformationMode) const (this=this@entry=0x7fffffffd4d0, matrix=..., mode=mode@entry=Qt::SmoothTransformation) at /home /nico/workspace/qt6/qtbase/src/gui/image/qimage.cpp:4935 #16 0x00007ffff7762085 in QImage::scaled(QSize const&, Qt::AspectRatioMode, Qt::TransformationMode) const (this=0x7fffffffd4d0, s=<optimized out>, aspectMode=<optimized out>, mode=Qt::SmoothTransformation) at /home/nico/workspace/qt6/qtbase/src/gui/image/qimage.cpp:3014 #17 0x000000000040123d in main(int, char**) (argc=1, argv=0x7fffffffd668) at /home/nico/imgtest/main.cpp:7
Attachments
For Gerrit Dashboard: QTBUG-119902 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
525992,1 | Copy color table in QImage::transform paint path | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: NEW | 0 | 0 |
524301,5 | Copy color table in QImage::transform paint path | dev | qt/qtbase | Status: MERGED | +2 | 0 |
525537,2 | Copy color table in QImage::transform paint path | 6.7 | qt/qtbase | Status: MERGED | +2 | 0 |
525707,2 | Copy color table in QImage::transform paint path | 6.6 | qt/qtbase | Status: MERGED | +2 | 0 |
525910,2 | Copy color table in QImage::transform paint path | tqtc/lts-6.5 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |