mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 06:41:43 +00:00
e983b7b17a
menu_add_prop() applies upper menus' visibilities to actual prompts by AND-ing the prompts visibilities with the upper menus ones. This creates a further reference to the menu's visibilities and when the expression reduction functions do their work, they may remove or modify expressions that have multiple references, thus causing unpredictable side-effects. The following example Kconfig constructs a case where this causes problems: a menu and a prompt which's visibilities depend on the same symbol. When invoking mconf with this Kconfig and pressing "Z" we see a problem caused by a free'd expression still referenced by the menu's visibility: ------------------------------------------------------------------------ mainmenu "Kconfig Testing Configuration" config VISIBLE def_bool n config Placeholder bool "Place holder" menu "Invisible" visible if VISIBLE config TEST_VAR bool "Test option" if VISIBLE endmenu ------------------------------------------------------------------------ This patch fixes this problem by creating copies of the menu's visibility expressions before AND-ing them with the prompt's one. Signed-off-by: Dirk Gouders <dirk@gouders.net> [yann.morin.1998@free.fr: move variable into its block-scope, keep lines <80 chars, typo] Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> |
||
---|---|---|
.. | ||
lxdialog | ||
.gitignore | ||
check.sh | ||
conf.c | ||
confdata.c | ||
expr.c | ||
expr.h | ||
gconf.c | ||
gconf.glade | ||
images.c | ||
kxgettext.c | ||
list.h | ||
lkc_proto.h | ||
lkc.h | ||
Makefile | ||
mconf.c | ||
menu.c | ||
merge_config.sh | ||
nconf.c | ||
nconf.gui.c | ||
nconf.h | ||
POTFILES.in | ||
qconf.cc | ||
qconf.h | ||
streamline_config.pl | ||
symbol.c | ||
util.c | ||
zconf.gperf | ||
zconf.hash.c_shipped | ||
zconf.l | ||
zconf.lex.c_shipped | ||
zconf.tab.c_shipped | ||
zconf.y |