[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdevelop/5.0] projectmanagers/cmake/settings: Fix crash in CMakePreferences::updateCache
From:       Kevin Funk <kfunk () kde ! org>
Date:       2016-06-30 20:20:49
Message-ID: E1bIiS9-00071o-Ne () code ! kde ! org
[Download RAW message or body]

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/cmakepreferences.cpp:180:9
 in
ASAN:DEADLYSIGNAL
=================================================================
==31850==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000
(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/cmakepreferences.cpp:180:9
  #1 0x7f10b451a94f in CMakePreferences::buildDirChanged(int)
/home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cmakepreferences.cpp:231:5
  #2 0x7f10b454f049 in
QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>,
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<void
(CMakePreferences::*)(int)>::call<QtPrivate::List<int>, 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
(CMakePreferences::*)(int), QtPrivate::List<int>, 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/cmakepreferences.cpp:108:5
  #18 0x7f10b4519e3d in
CMakePreferences::CMakePreferences(KDevelop::IPlugin*,
KDevelop::ProjectConfigOptions const&, QWidget*)
/home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/settings/cmakepreferences.cpp:95:5
  #19 0x7f10b4479bd7 in CMakeManager::perProjectConfigPage(int,
KDevelop::ProjectConfigOptions const&, QWidget*)
/home/kfunk/devel/src/kf5/kdevelop-stable/projectmanagers/cmake/cmakemanager.cpp:886:20
  #20 0x7f11021ecfdc in
KDevelop::ProjectControllerPrivate::projectConfig(QObject*)
/home/kfunk/devel/src/kf5/kdevplatform-stable/shell/projectcontroller.cpp:143:36
    #21 0x7f11021c380f in
KDevelop::ProjectController::configureProject(KDevelop::IProject*)
/home/kfunk/devel/src/kf5/kdevplatform-stable/shell/projectcontroller.cpp:976:5
    #22 0x7f10afe80e42 in
DefinesAndIncludesManager::openConfigurationDialog(QString const&)
/home/kfunk/devel/src/kf5/kdevelop-stable/languages/plugins/custom-definesandincludes/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/projectmanagers/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 &newBuildDir)
     const Path file = newBuildDir.isValid() ? Path(newBuildDir, "CMakeCache.txt") : \
Path();  if(QFile::exists(file.toLocalFile()))
     {
-        m_currentModel->deleteLater();
-        m_currentModel=new CMakeCacheModel(this, file);
+        if (m_currentModel) {
+            m_currentModel->deleteLater();
+        }
+        m_currentModel = new CMakeCacheModel(this, file);
+
         configureCacheView();
         connect(m_currentModel, &CMakeCacheModel::itemChanged,
                 this, &CMakePreferences::cacheEdited);
@@ -190,8 +193,10 @@ void CMakePreferences::updateCache(const Path &newBuildDir)
     else
     {
         disconnect(m_prefsUi->cacheList->selectionModel(), \
                &QItemSelectionModel::currentChanged, this, 0);
-        m_currentModel->deleteLater();
-        m_currentModel=0;
+        if (m_currentModel) {
+            m_currentModel->deleteLater();
+            m_currentModel = 0;
+        }
         configureCacheView();
     }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic