qconf: fix SIGSEGV on empty menu items
PATCH 1/1 qconf: fix SIGSEGV on empty menu items
qconf may cause SIGSEGV by trying to show debug
information on empty menu items
Signed-off-by Cyrill V. Gorcunov <[email protected]>
---
scripts/kconfig/qconf.cc +10 -2
@@ -925,6 +925,8 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) configSettings->endGroup(); connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings())); } + + has_dbg_info = 0; } void ConfigInfoView::saveSettings(void)
@@ -953,10 +955,13 @@ void ConfigInfoView::setInfo(struct menu *m) if (menu == m) return; menu = m; - if (!menu) + if (!menu) { + has_dbg_info = 0; clear(); - else + } else { + has_dbg_info = 1; menuInfo(); + } } void ConfigInfoView::setSource(const QString& name)
@@ -991,6 +996,9 @@ void ConfigInfoView::symbolInfo(void) { QString str; + if (!has_dbg_info) + return; + str += "<big>Symbol: <b>"; str += print_filter(sym->name); str += "</b></big><br><br>value: ";
scripts/kconfig/qconf.h +2 -0
@@ -273,6 +273,8 @@ protected:struct symbol *sym;struct menu *menu;bool _showDebug; + +int has_dbg_info; }; class ConfigSearchWindow : public QDialog {
Hi,
Quoted 2 lines · Cyrill V. Gorcunov
qconf may cause SIGSEGV by trying to show debug
information on empty menu items
Thanks, but this is more complex than necessary.
It simply lacks some initializers.
bye, Roman
Signed-off-by Roman Zippel <[email protected]>
---
scripts/kconfig/qconf.cc +2 -1
@@ -915,7 +915,7 @@ void ConfigView::updateListAll(void) } ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) - : Parent(parent, name), menu(0) + : Parent(parent, name), menu(0), sym(0) { if (name) { configSettings->beginGroup(name);
@@ -951,6 +951,7 @@ void ConfigInfoView::setInfo(struct menu if (menu == m) return; menu = m; + sym = NULL; if (!menu) clear(); else
Roman Zippel wrote on 06-01-07 04:20:
<snip>
Quoted 2 lines
Thanks, but this is more complex than necessary.
It simply lacks some initializers.
<snip>
Quoted 15 lines
---
Index: linux-2.6/scripts/kconfig/qconf.cc
===================================================================scripts/kconfig/qconf.cc +1
-1@@ -915,7 +915,7 @@ void ConfigView::updateListAll(void) } ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) - : Parent(parent, name), menu(0) + : Parent(parent, name), menu(0), sym(0) { if (name) { configSettings->beginGroup(name);
scripts/kconfig/qconf.cc void ConfigInfoView::setInfo(struct menu
Quoted 8 lines
scripts/kconfig/qconf.cc +1
-1@@ -951,6 +951,7 @@ void ConfigInfoView::setInfo(struct menu if (menu == m) return; menu = m; + sym = NULL; if (!menu) clear(); else -
I can confirm that this patch squashed the segfault.
bjd