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

QQmlComponentPrivate::doBeginCreate can crash in some scenarios

    XMLWordPrintable

Details

    • 710d650d0 (dev), 73b2e33d7 (6.7), 08596ea03 (tqtc/lts-6.5)

    Description

      QQmlEnginePrivate::rootContext

      can be null in some cases when calling:

      QObject *QQmlComponentPrivate::doBeginCreate(QQmlComponent *q, QQmlContext *context)

      https://github.com/qt/qtdeclarative/blob/4ddbef67357275ba6f100ce028a81c92405720b7/src/qml/qml/qqmlcomponent.cpp#L335

      Causing this line to crash:

      https://github.com/qt/qtdeclarative/blob/4ddbef67357275ba6f100ce028a81c92405720b7/src/qml/qml/qqmlcomponent.cpp#L1014

       

      One example of this flow is as follows:

      QQmlEngine deletes the rootContext in its destructor and invalidates the typeLoader:

      https://github.com/qt/qtdeclarative/blob/4ddbef67357275ba6f100ce028a81c92405720b7/src/qml/qml/qqmlengine.cpp#L565
       
      Which calls:

      void QQmlTypeLoader::shutdownThread()
      {    
          if (m_thread && !m_thread->isShutdown())
              m_thread->shutdown(); //QQmlThread::shutdown()
      } 

       
      The QmlThread processes any events left in the list, some of which can be related to asynchronous component creation e.g.

      QQmlComponentPrivate::typeDataReady(QQmlTypeData *) override;

      Which triggers a "QQmlComponent::statusChanged" signal to "QQmlComponent::Ready"

      If the end user is still connected, they may attempt to finish creating the component with "QQmlComponent::create(nullptr)" (use rootContext as context) leading us to the crash described at the start.

       

      Example project of the crash is attached

      Attachments

        Issue Links

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

          Activity

            People

              ulherman Ulf Hermann
              ctummon Cathal Tummon
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes