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>
This commit is contained in:
Alan Coopersmith 2009-10-16 22:29:26 -07:00 committed by Keith Packard
parent a32b2420d8
commit 2bd71a6db2
1 changed files with 23 additions and 5 deletions

View File

@ -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