Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-4887

QImage::setAlphaChannel null pointer crash on OOM

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 4.6.3
    • 4.6.0
    • None
    • None
    • 71df6edab122730c38ac238e168a4cc35b6f4857

    Description

      OOM testing Qt with tst_exceptionsafety_objects, widgets(QToolBar) test, QImage::setAlphaChannel crashed with a null d pointer. The call stack is below.

      setAlphaChannel is implemented as follows, which makes me think that the problem is in detach or convertToFormat, or their use.

      void QImage::setAlphaChannel(const QImage &alphaChannel)
      {
      if (!d)
      return;

      ...
      detach();

      *this = convertToFormat(QImage::Format_ARGB32_Premultiplied);

      // Slight optimization since alphachannels are returned as 8-bit grays.
      if (alphaChannel.d->depth == 8 && alphaChannel.isGrayscale()) {
      const uchar *src_data = alphaChannel.d->data;
      const uchar dest_data = d->data; // ****crash is here***
      ...

      51 ThreadPanicBreakPoint() I:\sf\os\kernelhwsrv\kernel\eka\kernel\win32\cutils.cpp:156 0x0096bab6
      50 DJitCrashHandler::HandleEvent() I:\sf\os\kernelhwsrv\kernel\eka\kernel\win32\cutils.cpp:204 0x0096bcce
      49 DKernelEventHandler::Dispatch() I:\sf\os\kernelhwsrv\kernel\eka\kernel\skernel.cpp:1924 0x00982f44
      48 DThread::Exit() I:\sf\os\kernelhwsrv\kernel\eka\kernel\sthread.cpp:695 0x0099f480
      47 DThread::EpocThreadExitHandler() I:\sf\os\kernelhwsrv\kernel\eka\kernel\sthread.cpp:636 0x0099f282
      46 NThreadBase::Exit() I:\sf\os\kernelhwsrv\kernel\eka\nkern\nkern.cpp:1101 0x00962348
      45 NThreadBase::DoCsFunction() I:\sf\os\kernelhwsrv\kernel\eka\nkern\nkern.cpp:682 0x00961acc
      44 NFastMutex::Signal() I:\sf\os\kernelhwsrv\kernel\eka\nkern\nkern.cpp:121 0x009611f8
      43 NKern::ThreadKill() I:\sf\os\kernelhwsrv\kernel\eka\nkern\nkern.cpp:1542 0x00962914
      42 DThread::Die() I:\sf\os\kernelhwsrv\kernel\eka\kernel\sthread.cpp:794 0x0099f724
      41 K::PanicCurrentThread() I:\sf\os\kernelhwsrv\kernel\eka\kernel\server.cpp:905 0x00992be4
      40 K::PanicKernExec() I:\sf\os\kernelhwsrv\kernel\eka\kernel\server.cpp:898 0x00992bb0
      39 Exc::Dispatch() I:\sf\os\kernelhwsrv\kernel\eka\kernel\win32\ckernel.cpp:227 0x0096b1ff
      38 NThread__HandleException() I:\sf\os\kernelhwsrv\kernel\eka\nkern\win32\ncthrd.cpp:299 0x009698f7
      37 NThread::Exception() I:\sf\os\kernelhwsrv\kernel\eka\nkern\win32\ncthrd.cpp:348 0x00969965
      36 QImage::setAlphaChannel() I:\qt\src\gui\image\qimage.cpp:5621 0x7126ea26
      35 QS60StyleModeSpecifics::fromFbsBitmap() I:\qt\src\gui\styles\qs60style_s60.cpp:607 0x7153ba53
      34 QS60StyleModeSpecifics::createSkinnedGraphicsLX() I:\qt\src\gui\styles\qs60style_s60.cpp:690 0x7153c011
      33 QS60StyleModeSpecifics::skinnedGraphics() I:\qt\src\gui\styles\qs60style_s60.cpp:339 0x7153a963
      32 QS60StylePrivate::part() I:\qt\src\gui\styles\qs60style_s60.cpp:1151 0x7153d942
      31 QS60StylePrivate::cachedPart() I:\qt\src\gui\styles\qs60style.cpp:603 0x71531284
      30 QS60Style::standardIconImplementation() I:\qt\src\gui\styles\qs60style.cpp:2855 0x71539c16
      29 QS60Style::qt_metacall() I:\qt\src\gui\tmp\moc\debug_shared\moc_qs60style.cpp:80 0x71602013
      28 QMetaObject::metacall() I:\qt\src\corelib\kernel\qmetaobject.cpp:237 0x6bbf1f64
      27 QMetaMethod::invoke() I:\qt\src\corelib\kernel\qmetaobject.cpp:1533 0x6bbf45a0
      26 QMetaObject::invokeMethod() I:\qt\src\corelib\kernel\qmetaobject.cpp:1112 0x6bbf3b7b
      25 QStyle::standardIcon() I:\qt\src\gui\styles\qstyle.cpp:2274 0x714c269b
      24 QToolBarExtension::setOrientation() I:\qt\src\gui\widgets\qtoolbarextension.cpp:67 0x716f8323
      23 QToolBarExtension::QToolBarExtension() I:\qt\src\gui\widgets\qtoolbarextension.cpp:58 0x716f8257
      22 QToolBarLayout::QToolBarLayout() I:\qt\src\gui\widgets\qtoolbarlayout.cpp:86 0x716f4986
      21 QToolBarPrivate::init() I:\qt\src\gui\widgets\qtoolbar.cpp:101 0x716f16d9
      20 QToolBar::QToolBar() I:\qt\src\gui\widgets\qtoolbar.cpp:528 0x716f24c1
      19 WidgetCreator<QToolBar>::operator() I:\qt\tests\auto\exceptionsafety_objects\tst_exceptionsafety_objects.cpp:387 0x2fd6aada
      18 doOOMTest<AbstractTester>() I:\qt\tests\auto\exceptionsafety_objects\tst_exceptionsafety_objects.cpp:201 0x2fd650be
      17 tst_ExceptionSafetyObjects::widgets() I:\qt\tests\auto\exceptionsafety_objects\tst_exceptionsafety_objects.cpp:481 0x2fd6387a
      16 tst_ExceptionSafetyObjects::qt_metacall() I:\qt\tests\auto\exceptionsafety_objects\tmp\moc\debug_shared\tst_exceptionsafety_objects.moc:91 0x2fd63e36
      15 QMetaObject::metacall() I:\qt\src\corelib\kernel\qmetaobject.cpp:237 0x6bbf1f64
      14 QMetaMethod::invoke() I:\qt\src\corelib\kernel\qmetaobject.cpp:1533 0x6bbf45a0
      13 QMetaObject::invokeMethod() I:\qt\src\corelib\kernel\qmetaobject.cpp:1112 0x6bbf3b7b
      12 QMetaObject::invokeMethod() I:\qt\src\corelib\kernel\qobjectdefs.h:395 0x6bb4b71d
      11 QTest::qInvokeTestMethodDataEntry() I:\qt\src\testlib\qtestcase.cpp:1212 0x2fe32a1e
      10 QTest::qInvokeTestMethod() I:\qt\src\testlib\qtestcase.cpp:1308 0x2fe331f8
      9 QTest::qInvokeTestMethods() I:\qt\src\testlib\qtestcase.cpp:1463 0x2fe339ae
      8 QTest::qExec() I:\qt\src\testlib\qtestcase.cpp:1666 0x2fe33bf6
      7 main() I:\qt\tests\auto\exceptionsafety_objects\tst_exceptionsafety_objects.cpp:782 0x2fd63c21
      6 QtMainWrapper() I:\qt\src\s60main\qts60main_mcrt0.cpp:90 0x2fd7ca82
      5 E32Main() I:\qt\src\s60main\qts60main.cpp:57 0x2fd7c61c
      4 _E32Startup() M:\sf\os\kernelhwsrv\kernel\eka\euser\epoc\win32\uc_exe.cpp:87 0x2fd7bfac
      3 DThread::EpocThreadFunction() I:\sf\os\kernelhwsrv\kernel\eka\kernel\win32\ckernel.cpp:84 0x0096ac23
      2 NThread::StartThread() I:\sf\os\kernelhwsrv\kernel\eka\nkern\win32\ncthrd.cpp:187 0x009695b7
      1 0x7C80B729( KERNEL32.dll )() 0x7c80b729

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            mread Murray Read
            mread Murray Read
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes