diff options
author | Cyrill V. Gorcunov <gorcunov@gmail.com> | 2007-01-05 19:37:02 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-06 02:55:29 -0500 |
commit | 73b8ed29ab3f6ad7204b4e61cfa87dc0c28d3019 (patch) | |
tree | b88a8cc5a6c0bca6755ff920f4a1372690cf93bf /scripts/kconfig | |
parent | f2e12bb272f2544d1504f982270e90ae3dcc4ff2 (diff) |
[PATCH] 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 <gorcunov@gmail.com>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'scripts/kconfig')
-rw-r--r-- | scripts/kconfig/qconf.cc | 12 | ||||
-rw-r--r-- | scripts/kconfig/qconf.h | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index 0b2fcc417f59..a8ffc329666a 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc | |||
@@ -925,6 +925,8 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) | |||
925 | configSettings->endGroup(); | 925 | configSettings->endGroup(); |
926 | connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings())); | 926 | connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings())); |
927 | } | 927 | } |
928 | |||
929 | has_dbg_info = 0; | ||
928 | } | 930 | } |
929 | 931 | ||
930 | void ConfigInfoView::saveSettings(void) | 932 | void ConfigInfoView::saveSettings(void) |
@@ -953,10 +955,13 @@ void ConfigInfoView::setInfo(struct menu *m) | |||
953 | if (menu == m) | 955 | if (menu == m) |
954 | return; | 956 | return; |
955 | menu = m; | 957 | menu = m; |
956 | if (!menu) | 958 | if (!menu) { |
959 | has_dbg_info = 0; | ||
957 | clear(); | 960 | clear(); |
958 | else | 961 | } else { |
962 | has_dbg_info = 1; | ||
959 | menuInfo(); | 963 | menuInfo(); |
964 | } | ||
960 | } | 965 | } |
961 | 966 | ||
962 | void ConfigInfoView::setSource(const QString& name) | 967 | void ConfigInfoView::setSource(const QString& name) |
@@ -991,6 +996,9 @@ void ConfigInfoView::symbolInfo(void) | |||
991 | { | 996 | { |
992 | QString str; | 997 | QString str; |
993 | 998 | ||
999 | if (!has_dbg_info) | ||
1000 | return; | ||
1001 | |||
994 | str += "<big>Symbol: <b>"; | 1002 | str += "<big>Symbol: <b>"; |
995 | str += print_filter(sym->name); | 1003 | str += print_filter(sym->name); |
996 | str += "</b></big><br><br>value: "; | 1004 | str += "</b></big><br><br>value: "; |
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h index 6fc1c5f14425..a397edb5adcf 100644 --- a/scripts/kconfig/qconf.h +++ b/scripts/kconfig/qconf.h | |||
@@ -273,6 +273,8 @@ protected: | |||
273 | struct symbol *sym; | 273 | struct symbol *sym; |
274 | struct menu *menu; | 274 | struct menu *menu; |
275 | bool _showDebug; | 275 | bool _showDebug; |
276 | |||
277 | int has_dbg_info; | ||
276 | }; | 278 | }; |
277 | 279 | ||
278 | class ConfigSearchWindow : public QDialog { | 280 | class ConfigSearchWindow : public QDialog { |