Control: reassign -1 libqt5widgets5
Control: affects -1 virtualbox-qt

Hello,

Samuel Thibault, on Sun 27 Nov 2016 18:29:07 +0100, wrote:
> > On a Debian testing with upstream repo's package:
> > 
> > 1.    Install qt-at-spi
> > 2.    Enable accessibility in the Desktop.
> > 3.    Run VirtualBox.
> > 4.    Arrow keys, opening dialogs, crash the graphical interface.
> > 5.     Run without Orca running.
> > 6.    Arrow keys work. Run again screen reader, it crashes as soon as you 
> > press an arrow key..
> 
> More precisely, I had to enter File->Preferences a couple of times to
> get the segfault.

Here is the corresponding backtrace. This is running version
5.7.1~20161021-dfsg-6 of qtbase.

The segfault is on the callq assembly instruction:

0x00007f8317db0bf1 <+65>: callq *0x18(%r8)

(gdb) p/x ($r8+0x18)
0x20002c003e0085
(gdb) p/x *(unsigned long*)($r8+0x18)
Cannot access memory at address 0x20002c003e0085
(gdb) p index
<optimized out>
(gdb) p role
11
(gdb) up
(gdb) p/x m_index
{r = 0xd, c = 0, i = 0x556f56c43340, m = 0x556f56c2c770}
(gdb) p/x *((QTreeWidgetItem*) (m_index->i))
{_vptr.QTreeWidgetItem = 0x20002c003e006d, rtti = 0x61004d, values = {d = 
0x20006f006c0065}, view = 0x6c0065006f0043, 
  d = 0x3c0020006f0068, par = 0x6300720061006d, children = 
{<QListSpecialMethods<QTreeWidgetItem*>> = {<No data fields>}, {
      p = {static shared_null = {ref = {atomic = {_q_value = 
{<std::__atomic_base<int>> = {static _S_alignment = 0x4, 
                  _M_i = 0xffffffff}, <No data fields>}}}, alloc = 0x0, begin = 
0x0, end = 0x0, array = {0x0}}, 
        d = 0x63006f006c0065}, d = 0x63006f006c0065}}, itemFlags = {i = 
0x65006f}}

that looks a very bogus object to me indeed. From the backtrace, it
looks like it was obtained in AtSpiAdaptor::handleMessage by calling
AtSpiAdaptor::interfaceFromPath, i.e. using
QAccessible::accessibleInterface, i.e. using
QAccessibleCache::interfaceForId, i.e. using the
QAccessibleCache::idToInterface hashtable.

It should be noted that virtualbox uses threads. It could be that there
is a race in qaccessiblecache.cpp between a thread that is trying to
remove a widget, and a thread which is trying to access it as requested
by the screen reader. Is that handled somehow in the accessibility layer
of Qt5?

Samuel
(gdb) bt
#0  0x00007f8317db0bf1 in QTreeModel::data (this=<optimized out>, index=..., 
role=11) at itemviews/qtreewidget.cpp:371
#1  0x00007f8317d2e235 in QAccessibleTableCell::text (this=0x556f56c6e370, 
t=<optimized out>)
    at accessible/itemviews.cpp:1078
#2  0x00007f8314b05bcb in AtSpiAdaptor::accessibleInterface 
(this=this@entry=0x556f56913c50, interface=interface@entry=
    0x556f56c6e370, function=..., message=..., connection=...) at 
linuxaccessibility/atspiadaptor.cpp:1414
#3  0x00007f8314b06919 in AtSpiAdaptor::accessibleInterface 
(this=0x556f56913c50, interface=0x556f56c6e370, function=..., 
    message=..., connection=...) at linuxaccessibility/atspiadaptor.cpp:1368
#4  0x00007f8314b0ad2c in AtSpiAdaptor::handleMessage (this=0x556f56913c50, 
message=..., connection=...)
    at linuxaccessibility/atspiadaptor.cpp:1282
#5  0x00007f831c07be88 in QDBusConnectionPrivate::activateObject 
(this=0x7f82f800fc20, node=..., msg=..., pathStartPos=27)
    at qdbusintegrator.cpp:1449
#6  0x00007f831c07e8ee in QDBusActivateObjectEvent::placeMetaCall 
(this=0x7f82f80139c0) at qdbusintegrator.cpp:1608
#7  0x00007f831cba1b39 in QObject::event (this=0x556f56913c50, e=<optimized 
out>) at kernel/qobject.cpp:1263
#8  0x00007f8317af6b2c in QApplicationPrivate::notify_helper (this=<optimized 
out>, receiver=0x556f56913c50, 
    e=0x7f82f80139c0) at kernel/qapplication.cpp:3799
#9  0x00007f8317afe2e1 in QApplication::notify (this=0x7ffedd52b320, 
receiver=0x556f56913c50, e=0x7f82f80139c0)
    at kernel/qapplication.cpp:3556
#10 0x00007f831cb75090 in QCoreApplication::notifyInternal2 
(receiver=0x556f56913c50, event=event@entry=0x7f82f80139c0)
    at kernel/qcoreapplication.cpp:988
#11 0x00007f831cb7781d in QCoreApplication::sendEvent (event=0x7f82f80139c0, 
receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#12 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, 
event_type=event_type@entry=0, 
    data=0x556f564f0640) at kernel/qcoreapplication.cpp:1649
#13 0x00007f831cb77c88 in QCoreApplication::sendPostedEvents 
(receiver=receiver@entry=0x0, event_type=event_type@entry=0)
    at kernel/qcoreapplication.cpp:1503
#14 0x00007f831cbc92d3 in postEventSourceDispatch (s=0x556f565b1ef0) at 
kernel/qeventdispatcher_glib.cpp:276
#15 0x00007f83157bc7f7 in g_main_context_dispatch () from 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#16 0x00007f83157bca60 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#17 0x00007f83157bcb0c in g_main_context_iteration () from 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007f831cbc96df in QEventDispatcherGlib::processEvents 
(this=0x556f565b1e20, flags=...)
    at kernel/qeventdispatcher_glib.cpp:423
#19 0x00007f831cb7307a in QEventLoop::exec (this=this@entry=0x7ffedd52a6e0, 
flags=..., flags@entry=...)
    at kernel/qeventloop.cpp:212
#20 0x00007f831e0102c7 in QIMainDialog::exec (this=this@entry=0x7ffedd52a750, 
    fApplicationModal=fApplicationModal@entry=true)
    at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp:86
#21 0x00007f831e14e14b in UISettingsDialog::execute 
(this=this@entry=0x7ffedd52a750)
    at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp:171
#22 0x00007f831e108b76 in UISelectorWindow::sltOpenPreferencesDialog 
(this=0x556f56915fe0)
    at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp:483
#23 0x00007f831e34dcd5 in UISelectorWindow::qt_static_metacall 
(_o=0x556f56915fe0, _c=<optimized out>, _id=<optimized out>, 
    _a=<optimized out>) at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/out/obj/VirtualBox/qtmoc/UISelectorWindow.cpp:246
#24 0x00007f831cba0c89 in QMetaObject::activate 
(sender=sender@entry=0x556f569d8c00, signalOffset=<optimized out>, 
    local_signal_index=local_signal_index@entry=1, 
argv=argv@entry=0x7ffedd52a9f0) at kernel/qobject.cpp:3740
#25 0x00007f831cba15a7 in QMetaObject::activate 
(sender=sender@entry=0x556f569d8c00, 
    m=m@entry=0x7f8317fcff60 <QAction::staticMetaObject>, 
local_signal_index=local_signal_index@entry=1, 
    argv=argv@entry=0x7ffedd52a9f0) at kernel/qobject.cpp:3602
#26 0x00007f8317af0162 in QAction::triggered (this=this@entry=0x556f569d8c00, 
_t1=<optimized out>)
    at .moc/moc_qaction.cpp:369
#27 0x00007f8317af2b50 in QAction::activate (this=0x556f569d8c00, 
event=<optimized out>) at kernel/qaction.cpp:1170
#28 0x00007f8317c61eaa in QMenuPrivate::activateCausedStack 
(this=this@entry=0x556f56983480, causedStack=..., 
    action=action@entry=0x556f569d8c00, 
action_e=action_e@entry=QAction::Trigger, self=self@entry=true)
    at widgets/qmenu.cpp:1140
#29 0x00007f8317c6950c in QMenuPrivate::activateAction (this=0x556f56983480, 
action=0x556f569d8c00, 
    action_e=QAction::Trigger, self=<optimized out>) at widgets/qmenu.cpp:1217
#30 0x00007f8317c6bfd3 in QMenu::keyPressEvent (this=<optimized out>, 
e=<optimized out>) at widgets/qmenu.cpp:3145
#31 0x00007f8317b3e8d7 in QWidget::event (this=this@entry=0x556f56917320, 
event=event@entry=0x556f56b7f0f0)
    at kernel/qwidget.cpp:8815
#32 0x00007f8317c6c833 in QMenu::event (this=this@entry=0x556f56917320, 
e=e@entry=0x556f56b7f0f0) at widgets/qmenu.cpp:2799
#33 0x00007f831e02df60 in UIMenu::event (this=0x556f56917320, 
pEvent=0x556f56b7f0f0)
    at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp:96
#34 0x00007f8317af6b2c in QApplicationPrivate::notify_helper (this=<optimized 
out>, receiver=0x556f56917320, 
    e=0x556f56b7f0f0) at kernel/qapplication.cpp:3799
#35 0x00007f8317affcb6 in QApplication::notify (this=<optimized out>, 
receiver=0x556f56917320, e=0x556f56b7f0f0)
    at kernel/qapplication.cpp:3181
#36 0x00007f831cb75090 in QCoreApplication::notifyInternal2 
(receiver=0x556f56917320, event=event@entry=0x556f56b7f0f0)
    at kernel/qcoreapplication.cpp:988
#37 0x00007f831cb7781d in QCoreApplication::sendEvent (event=0x556f56b7f0f0, 
receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#38 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, 
event_type=event_type@entry=0, 
    data=0x556f564f0640) at kernel/qcoreapplication.cpp:1649
#39 0x00007f831cb77c88 in QCoreApplication::sendPostedEvents 
(receiver=receiver@entry=0x0, event_type=event_type@entry=0)
    at kernel/qcoreapplication.cpp:1503
#40 0x00007f831cbc92d3 in postEventSourceDispatch (s=0x556f565b1ef0) at 
kernel/qeventdispatcher_glib.cpp:276
#41 0x00007f83157bc7f7 in g_main_context_dispatch () from 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#42 0x00007f83157bca60 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#43 0x00007f83157bcb0c in g_main_context_iteration () from 
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#44 0x00007f831cbc96df in QEventDispatcherGlib::processEvents 
(this=0x556f565b1e20, flags=...)
    at kernel/qeventdispatcher_glib.cpp:423
#45 0x00007f831cb7307a in QEventLoop::exec (this=this@entry=0x7ffedd52b200, 
flags=..., flags@entry=...)
    at kernel/qeventloop.cpp:212
#46 0x00007f831cb7b7ec in QCoreApplication::exec () at 
kernel/qcoreapplication.cpp:1261
#47 0x00007f831c4a12dc in QGuiApplication::exec () at 
kernel/qguiapplication.cpp:1633
#48 0x00007f8317af6a85 in QApplication::exec () at kernel/qapplication.cpp:2975
#49 0x00007f831dfdbddb in TrustedMain (argc=<optimized out>, argv=<optimized 
out>)
    at 
/build/virtualbox-suc2Rj/virtualbox-5.1.8-dfsg/src/VBox/Frontends/VirtualBox/src/main.cpp:547
#50 0x00007f83274c42b1 in __libc_start_main (main=0x556f55aee520 <main(int, 
char**, char**)>, argc=1, argv=0x7ffedd52b468, 
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
stack_end=0x7ffedd52b458)
    at ../csu/libc-start.c:291
#51 0x0000556f55aee68a in _start ()

Reply via email to