From kde-commits Thu Jun 30 20:20:49 2016 From: Kevin Funk Date: Thu, 30 Jun 2016 20:20:49 +0000 To: kde-commits Subject: [kdevelop/5.0] projectmanagers/cmake/settings: Fix crash in CMakePreferences::updateCache Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=146731807909046 Git commit 0a3210b880b4231f37abf6921817e95dd228a100 by Kevin Funk. Committed on 30/06/2016 at 20:20. Pushed by kfunk into branch '5.0'. Fix crash in CMakePreferences::updateCache Happened when invoking a solution involving starting up the project config page. Backtrace: SUMMARY: AddressSanitizer: undefined-behavior /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cm= akepreferences.cpp:180:9 in ASAN:DEADLYSIGNAL =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D31850=3D=3DERROR: AddressSanitizer: SEGV on unknown address 0x0000000= 00000 (pc 0x7f10b452f8b7 bp 0x7fff26dce210 sp 0x7fff26dcdd20 T0) #0 0x7f10b452f8b6 in CMakePreferences::updateCache(KDevelop::Path const&) /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cm= akepreferences.cpp:180:9 #1 0x7f10b451a94f in CMakePreferences::buildDirChanged(int) /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cm= akepreferences.cpp:231:5 #2 0x7f10b454f049 in QtPrivate::FunctorCall, QtPrivate::List, void, void (CMakePreferences::*)(int)>::call(void (CMakePreferences::*)(int), CMakePreferences*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:501:13 #3 0x7f10b454eb5d in void QtPrivate::FunctionPointer::call, void>(void (CMakePreferences::*)(int), CMakePreferences*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:520:13 #4 0x7f10b454e5ff in QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:143:17 #5 0x7f10fb4b8e4e in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b4e4e) #6 0x7f10fbe8f380 in QComboBox::currentIndexChanged(int) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x26d380) #7 0x7f10fbe917e0 (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x26f7e0) #8 0x7f10fbe93e0c (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x271e0c) #9 0x7f10fbe9403e in QComboBox::setCurrentIndex(int) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x27203e) #10 0x7f10fbe99678 (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x277678) #11 0x7f10fb4b8fc9 in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b4fc9) #12 0x7f10fb535323 in QAbstractItemModel::rowsInserted(QModelIndex const&, int, int, QAbstractItemModel::QPrivateSignal) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x331323) #13 0x7f10fb432775 in QAbstractItemModel::endInsertRows() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x22e775) #14 0x7f10fbb38f32 (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0x45ef32) #15 0x7f10fbe965bb in QComboBox::insertItems(int, QStringList const&) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2745bb) #16 0x7f10b454148e in QComboBox::addItems(QStringList const&) /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qcombobox.h:174:11 #17 0x7f10b4526a23 in CMakePreferences::reset() /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cm= akepreferences.cpp:108:5 #18 0x7f10b4519e3d in CMakePreferences::CMakePreferences(KDevelop::IPlugin*, KDevelop::ProjectConfigOptions const&, QWidget*) /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cm= akepreferences.cpp:95:5 #19 0x7f10b4479bd7 in CMakeManager::perProjectConfigPage(int, KDevelop::ProjectConfigOptions const&, QWidget*) /home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/cmakemanage= r.cpp:886:20 #20 0x7f11021ecfdc in KDevelop::ProjectControllerPrivate::projectConfig(QObject*) /home/kfunk/devel/src/kf5/kdevplatform-stable/shell/projectcontroller.cpp:1= 43:36 #21 0x7f11021c380f in KDevelop::ProjectController::configureProject(KDevelop::IProject*) /home/kfunk/devel/src/kf5/kdevplatform-stable/shell/projectcontroller.cpp:9= 76:5 #22 0x7f10afe80e42 in DefinesAndIncludesManager::openConfigurationDialog(QString const&) /home/kfunk/devel/src/kf5/kdevelop-stable/languages/plugins/custom-definesa= ndincludes/definesandincludesmanager.cpp:224:9 ... M +9 -4 projectmanagers/cmake/settings/cmakepreferences.cpp http://commits.kde.org/kdevelop/0a3210b880b4231f37abf6921817e95dd228a100 diff --git a/projectmanagers/cmake/settings/cmakepreferences.cpp b/projectm= anagers/cmake/settings/cmakepreferences.cpp index 3229a3f..76aa87c 100644 --- a/projectmanagers/cmake/settings/cmakepreferences.cpp +++ b/projectmanagers/cmake/settings/cmakepreferences.cpp @@ -177,8 +177,11 @@ void CMakePreferences::updateCache(const Path &newBuil= dDir) const Path file =3D newBuildDir.isValid() ? Path(newBuildDir, "CMakeCa= che.txt") : Path(); if(QFile::exists(file.toLocalFile())) { - m_currentModel->deleteLater(); - m_currentModel=3Dnew CMakeCacheModel(this, file); + if (m_currentModel) { + m_currentModel->deleteLater(); + } + m_currentModel =3D new CMakeCacheModel(this, file); + configureCacheView(); connect(m_currentModel, &CMakeCacheModel::itemChanged, this, &CMakePreferences::cacheEdited); @@ -190,8 +193,10 @@ void CMakePreferences::updateCache(const Path &newBuil= dDir) else { disconnect(m_prefsUi->cacheList->selectionModel(), &QItemSelection= Model::currentChanged, this, 0); - m_currentModel->deleteLater(); - m_currentModel=3D0; + if (m_currentModel) { + m_currentModel->deleteLater(); + m_currentModel =3D 0; + } configureCacheView(); } =20