diff options
author | Alan Coopersmith <alan.coopersmith@sun.com> | 2009-10-16 22:29:26 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2009-10-18 22:55:37 +0900 |
commit | 2bd71a6db241924bd17ac9dd4aa38e7e563ee5c1 (patch) | |
tree | d28ec164bd10efe90ac853789288ec09eedc2611 /mi | |
parent | a32b2420d85f076282721afe005e85fff7d9837e (diff) |
Fix segfault when -extension XKEYBOARD is passed on the command line
Users should be told they can't disable XKB or XInput via error messages,
not core dumps.
Reported by T`2 on #xorg irc
Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'mi')
-rw-r--r-- | mi/miinitext.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/mi/miinitext.c b/mi/miinitext.c index 0dca390bb..2a67fd371 100644 --- a/mi/miinitext.c +++ b/mi/miinitext.c @@ -359,8 +359,14 @@ Bool EnableDisableExtension(char *name, Bool enable) for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) { if (strcmp(name, ext->name) == 0) { - *ext->disablePtr = !enable; - return TRUE; + if (ext->disablePtr != NULL) { + *ext->disablePtr = !enable; + return TRUE; + } else { + /* Extension is always on, impossible to disable */ + return enable; /* okay if they wanted to enable, + fail if they tried to disable */ + } } } @@ -370,12 +376,24 @@ Bool EnableDisableExtension(char *name, Bool enable) void EnableDisableExtensionError(char *name, Bool enable) { ExtensionToggle *ext = &ExtensionToggleList[0]; + Bool found = FALSE; - ErrorF("[mi] Extension \"%s\" is not recognized\n", name); + for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) { + if ((strcmp(name, ext->name) == 0) && (ext->disablePtr == NULL)) { + ErrorF("[mi] Extension \"%s\" can not be disabled\n", name); + found = TRUE; + break; + } + } + if (found == FALSE) + ErrorF("[mi] Extension \"%s\" is not recognized\n", name); ErrorF("[mi] Only the following extensions can be run-time %s:\n", enable ? "enabled" : "disabled"); - for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) - ErrorF("[mi] %s\n", ext->name); + for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) { + if (ext->disablePtr != NULL) { + ErrorF("[mi] %s\n", ext->name); + } + } } #ifndef XFree86LOADER |