Skip to content

Add a virtual destructor to ContextPrivate

Waqar Ahmed requested to merge work/fix-context-pvt into master

Kdevelop was crashing as soon as I tried to open a project. Asan reported the following issue:

  object passed to delete has wrong type:
  size of the allocated type:   8 bytes;
  size of the deallocated type: 1 bytes.
    #0 0x7fc9380e6009 in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:172
    #1 0x7fc9361ef3c8 in QScopedPointerDeleter<KDevelop::ContextPrivate>::cleanup(KDevelop::ContextPrivate*) /usr/include/qt/QtCore/qscopedpointer.h:60
    #2 0x7fc9361ef3c8 in QScopedPointer<KDevelop::ContextPrivate, QScopedPointerDeleter<KDevelop::ContextPrivate> >::~QScopedPointer() /usr/include/qt/QtCore/qscopedpointer.h:107
    #3 0x7fc9361ef3c8 in KDevelop::Context::~Context() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:50
    #4 0x7fc9361ef546 in KDevelop::ProjectItemContext::~ProjectItemContext() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:99
    #5 0x7fc8f9f629e8 in KDevelop::ProjectItemContextImpl::~ProjectItemContextImpl() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/project/projectutils.h:40
    #6 0x7fc8f9f629e8 in ProjectTreeView::popupContextMenu(QPoint const&) /home/waqar/kde/src/kdevelop/kdevelop/plugins/projectmanagerview/projecttreeview.cpp:339
    #7 0x7fc8f9f65cd1 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QPoint const&>, void, void (ProjectTreeView::*)(QPoint const&)>::call(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:152
    #8 0x7fc8f9f65cd1 in void QtPrivate::FunctionPointer<void (ProjectTreeView::*)(QPoint const&)>::call<QtPrivate::List<QPoint const&>, void>(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:185
    #9 0x7fc8f9f65cd1 in QtPrivate::QSlotObject<void (ProjectTreeView::*)(QPoint const&), QtPrivate::List<QPoint const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt/QtCore/qobjectdefs_impl.h:418
    #10 0x7fc930d419e5  (/usr/lib/libQt5Core.so.5+0x2ed9e5)
    #11 0x7fc93200bff5 in QWidget::customContextMenuRequested(QPoint const&) (/usr/lib/libQt5Widgets.so.5+0x180ff5)
    #12 0x7fc9320279b6 in QWidget::event(QEvent*) (/usr/lib/libQt5Widgets.so.5+0x19c9b6)
    #13 0x7fc9320d225e in QFrame::event(QEvent*) (/usr/lib/libQt5Widgets.so.5+0x24725e)
    #14 0x7fc930d0a3f2 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b63f2)
    #15 0x7fc931fe5750 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x15a750)
    #16 0x7fc931fed534 in QApplication::notify(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x162534)
    #17 0x7fc930d0a689 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b6689)
    #18 0x7fc93203fe80  (/usr/lib/libQt5Widgets.so.5+0x1b4e80)
    #19 0x7fc93204270e  (/usr/lib/libQt5Widgets.so.5+0x1b770e)
    #20 0x7fc931fe5761 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x15a761)
    #21 0x7fc930d0a689 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b6689)
    #22 0x7fc9316c5593 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (/usr/lib/libQt5Gui.so.5+0x13a593)
    #23 0x7fc93169abb4 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Gui.so.5+0x10fbb4)
    #24 0x7fc91aaf019b  (/usr/lib/libQt5XcbQpa.so.5+0x5f19b)
    #25 0x7fc92df2b02b in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x5402b)
    #26 0x7fc92df7eb58  (/usr/lib/libglib-2.0.so.0+0xa7b58)
    #27 0x7fc92df28780 in g_main_context_iteration (/usr/lib/libglib-2.0.so.0+0x51780)
    #28 0x7fc930d63190 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Core.so.5+0x30f190)
    #29 0x7fc930d08feb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Core.so.5+0x2b4feb)
    #30 0x7fc930d114a3 in QCoreApplication::exec() (/usr/lib/libQt5Core.so.5+0x2bd4a3)
    #31 0x55558c363ae4 in main /home/waqar/kde/src/kdevelop/kdevelop/app/main.cpp:855
    #32 0x7fc930572b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #33 0x55558c3681ed in _start (/home/waqar/kde/kdevelop/bin/kdevelop+0x291ed)

0x602000246710 is located 0 bytes inside of 8-byte region [0x602000246710,0x602000246718)
allocated by thread T0 here:
    #0 0x7fc9380e4f41 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:99
    #1 0x7fc9361ef74d in KDevelop::ProjectItemContext::ProjectItemContext(QList<KDevelop::ProjectBaseItem*> const&) /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:96
    #2 0x7fc93039bf21 in KDevelop::ProjectItemContextImpl::ProjectItemContextImpl(QList<KDevelop::ProjectBaseItem*> const&) /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/project/projectutils.cpp:29
    #3 0x7fc8f9f6221f in ProjectTreeView::popupContextMenu(QPoint const&) /home/waqar/kde/src/kdevelop/kdevelop/plugins/projectmanagerview/projecttreeview.cpp:339
    #4 0x7fc8f9f65cd1 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QPoint const&>, void, void (ProjectTreeView::*)(QPoint const&)>::call(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:152
    #5 0x7fc8f9f65cd1 in void QtPrivate::FunctionPointer<void (ProjectTreeView::*)(QPoint const&)>::call<QtPrivate::List<QPoint const&>, void>(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:185
    #6 0x7fc8f9f65cd1 in QtPrivate::QSlotObject<void (ProjectTreeView::*)(QPoint const&), QtPrivate::List<QPoint const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt/QtCore/qobjectdefs_impl.h:418
    #7 0x7fc930d419e5  (/usr/lib/libQt5Core.so.5+0x2ed9e5)
    #8 0x7fc93200bff5 in QWidget::customContextMenuRequested(QPoint const&) (/usr/lib/libQt5Widgets.so.5+0x180ff5)

Merge request reports