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

[REG 6.9.1->6.9.2] QQuickStackElement::initialize null dereference

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P1: Critical P1: Critical
    • None
    • 6.9.2
    • Quick: Controls 2
    • None
    • Linux/Wayland

      Users on KDE Plasma 6.4.4 are experiencing random crashes due to a null dereference in QQuickStackElement::initialize.

      (gdb) f 7
      #7  QQuickStackElement::initialize (this=this@entry=0x6283e859d020, requiredProperties=requiredProperties@entry=0x0)
          at /usr/src/debug/qt6-declarative/qtdeclarative/src/quicktemplates/qquickstackelement.cpp:210
      210             QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
      
      (gdb) l -
      195     void QQuickStackElement::initialize(RequiredProperties *requiredProperties)
      196     {
      197         if (!item || init)
      198             return;
      199
      200         QQuickItemPrivate *p = QQuickItemPrivate::get(item);
      201         if (!(widthValid = p->widthValid()))
      202             item->setWidth(view->width());
      203         if (!(heightValid = p->heightValid()))
      204             item->setHeight(view->height());
      (gdb) l +
      205         item->setParentItem(view);
      206
      207         if (!properties.isUndefined()) {
      208             QQmlEngine *engine = qmlEngine(view);
      209             Q_ASSERT(engine);
      210             QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
      211             Q_ASSERT(v4);
      212             QV4::Scope scope(v4);
      213             QV4::ScopedValue ipv(scope, properties.value());
      214             QV4::Scoped<QV4::QmlContext> qmlContext(scope, qmlCallingContext.value());
      (gdb) l +
      215             QV4::ScopedValue qmlObject(scope, QV4::QObjectWrapper::wrap(v4, item));
      216             QQmlComponentPrivate::setInitialProperties(
      217                 v4, qmlContext, qmlObject, ipv, requiredProperties, item,
      218                 component ? QQmlComponentPrivate::get(component)->state.creator() : nullptr);
      219             properties.clear();
      220         }
      221
      222         if (requiredProperties && !requiredProperties->empty()) {
      223             QString error;
      224             for (const auto &property: *requiredProperties) {
      
      (gdb) p view
      $47 = (QQuickStackView *) 0x6283e87b14b0
      (gdb) p engine
      $46 = (QQmlEngine *) 0x0
      
      (gdb) disassemble/s $pc-64, $pc+64
      Dump of assembler code from 0x7d56e33393b8 to 0x7d56e3339438:
      /usr/src/debug/qt6-declarative/qtdeclarative/src/quicktemplates/qquickstackelement.cpp:
      203         if (!(heightValid = p->heightValid()))
         0x00007d56e33393b8 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+104>:  imul   $0x24748b49,(%rcx),%eax
      
      204             item->setHeight(view->height());
      205         item->setParentItem(view);
         0x00007d56e33393be <_ZN18QQuickStackElement10initializeEP18RequiredProperties+110>:  js     0x7d56e3339409 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+185>
         0x00007d56e33393c0 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+112>:  mov    0x40(%rsp),%edi
         0x00007d56e33393c4 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+116>:  call   *0x132bbe(%rip)        # 0x7d56e346bf88
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4persistent_p.h:
      113         bool isUndefined() const { return !val || val->isUndefined(); }
         0x00007d56e33393ca <_ZN18QQuickStackElement10initializeEP18RequiredProperties+122>:  mov    0x98(%r12),%rax
         0x00007d56e33393d2 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+130>:  test   %rax,%rax
         0x00007d56e33393d5 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+133>:  je     0x7d56e3339507 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+439>
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/common/qv4staticvalue_p.h:
      287         inline bool isUndefined() const { return _val == 0; }
         0x00007d56e33393db <_ZN18QQuickStackElement10initializeEP18RequiredProperties+139>:  cmpq   $0x0,(%rax)
         0x00007d56e33393df <_ZN18QQuickStackElement10initializeEP18RequiredProperties+143>:  je     0x7d56e3339507 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+439>
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/quicktemplates/qquickstackelement.cpp:
      208             QQmlEngine *engine = qmlEngine(view);
         0x00007d56e33393e5 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+149>:  mov    0x78(%r12),%rdi
         0x00007d56e33393ea <_ZN18QQuickStackElement10initializeEP18RequiredProperties+154>:  call   *0x132900(%rip)        # 0x7d56e346bcf0
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsapi/qjsengine.h:
      320         QV4::ExecutionEngine *handle() const { return m_v4Engine; }
         0x00007d56e33393f0 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+160>:  mov    0x98(%r12),%rdx
      => 0x00007d56e33393f8 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+168>:  mov    0x10(%rax),%r13
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4scopedvalue_p.h:
      66          explicit Scope(ExecutionEngine *e)
         0x00007d56e33393fc <_ZN18QQuickStackElement10initializeEP18RequiredProperties+172>:  xor    %eax,%eax
      
      67              : engine(e)
      68              , mark(engine->jsStackTop)
         0x00007d56e33393fe <_ZN18QQuickStackElement10initializeEP18RequiredProperties+174>:  mov    0x8(%r13),%r15
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4persistent_p.h:
      90              return (val ? val->asReturnedValue() : Encode::undefined());
         0x00007d56e3339402 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+178>:  test   %rdx,%rdx
         0x00007d56e3339405 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+181>:  je     0x7d56e333940a <_ZN18QQuickStackElement10initializeEP18RequiredProperties+186>
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/common/qv4staticvalue_p.h:
      452         constexpr ReturnedValue asReturnedValue() const { return _val; }
         0x00007d56e3339407 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+183>:  mov    (%rdx),%rax
      
      130         QV4_NEARLY_ALWAYS_INLINE constexpr void setRawValue(quint64 raw) { _val = raw; }
         0x00007d56e333940a <_ZN18QQuickStackElement10initializeEP18RequiredProperties+186>:  mov    %rax,(%r15)
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4persistent_p.h:
      90              return (val ? val->asReturnedValue() : Encode::undefined());
         0x00007d56e333940d <_ZN18QQuickStackElement10initializeEP18RequiredProperties+189>:  mov    0xa0(%r12),%rax
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4engine_p.h:
      167             jsStackTop = ptr + nValues;
         0x00007d56e3339415 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+197>:  lea    0x10(%r15),%rdx
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4persistent_p.h:
      90              return (val ? val->asReturnedValue() : Encode::undefined());
         0x00007d56e3339419 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+201>:  test   %rax,%rax
         0x00007d56e333941c <_ZN18QQuickStackElement10initializeEP18RequiredProperties+204>:  je     0x7d56e3339c0f <_ZN18QQuickStackElement10initializeEP18RequiredProperties+2239>
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/common/qv4staticvalue_p.h:
      452         constexpr ReturnedValue asReturnedValue() const { return _val; }
         0x00007d56e3339422 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+210>:  mov    (%rax),%rax
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4engine_p.h:
      167             jsStackTop = ptr + nValues;
         0x00007d56e3339425 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+213>:  mov    %rdx,0x8(%r13)
      
      /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/common/qv4staticvalue_p.h:
      315         inline bool isManagedOrUndefined() const { return (_val & ManagedMask) == 0; }
         0x00007d56e3339429 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+217>:  movabs $0x7ff1000000000000,%rdx
         0x00007d56e3339433 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+227>:  test   %rdx,%rax
         0x00007d56e3339436 <_ZN18QQuickStackElement10initializeEP18RequiredProperties+230>:  jne    0x7d56e333945d <_ZN18QQuickStackElement10initializeEP18RequiredProperties+269>
      End of assembler dump.
      

      We are doing MOV 0x10(%rax), %r13 with %rax = 0x0.

      I'm not sure why qmlEngine(view) returned null, as I'm working from coredumps.

      All reported crashes have in common that Qt Version 6.9.2 is used.
      All reported crashes occur due to a QQuickImage usage.

      See the original KDE Plasma bug report(s) here:
      https://bugs.kde.org/show_bug.cgi?id=509192

      I am attaching the full kcrash backtrace. Please let me know what further information to provide.

      This is my first Qt report.

        1. plasmashell-20250906.kcrash
          236 kB
        2. backtrace-full.log
          57 kB
        3. 140018.zip
          1 kB
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            qt.team.quick.subscriptions Qt Quick and Widgets Team
            mydarkstar mydarkstar
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes