Skip to contentSkip to conversation

qconf: fix SIGSEGV on empty menu items

PATCH In review Cyrill V. Gorcunov 3 participants 3 messages Jan 4, 2007 – Jan 6, 2007 Kconfig

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 qconf: fix SIGSEGV on empty menu items

qconf may cause SIGSEGV by trying to show debug
information on empty menu items

---

scripts/kconfig/qconf.cc +10 -2
index 0b2fcc4..0694d1d 100644
@@ -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
index 6fc1c5f..a397edb 100644
@@ -273,6 +273,8 @@ protected:
        struct symbol *sym;
        struct menu *menu;
        bool _showDebug;
+
+       int has_dbg_info;
 };
 
 class ConfigSearchWindow : public QDialog {
#1 lore raw

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

---

scripts/kconfig/qconf.cc +2 -1
Index: linux-2.6/scripts/kconfig/qconf.cc
===================================================================
@@ -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
#2 lore raw

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