xfree86: parser: Never use constant strings for driver names (fixes #17438)

When the parser sees the "keyboard" driver, it automatically (and
 silently) replaces it with the constant string "kbd".
Everybody else uses malloc'd memory for the driver name, so input
 device closure assumes it can use free.
Free val.str, so this crash doesn't turn into a memory leak. Whew.

Signed-off-by: Jesse Adkins <jesserayadkins@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit bce12f2956)
This commit is contained in:
Jesse Adkins 2010-08-04 23:39:14 -07:00 committed by Alan Coopersmith
parent 7c54498665
commit c4717321c0
1 changed files with 5 additions and 2 deletions

View File

@ -59,6 +59,7 @@
#include <xorg-config.h>
#endif
#include "os.h"
#include "xf86Parser.h"
#include "xf86tokens.h"
#include "Configint.h"
@ -102,8 +103,10 @@ xf86parseInputSection (void)
case DRIVER:
if (xf86getSubToken (&(ptr->inp_comment)) != STRING)
Error (QUOTE_MSG, "Driver");
if (strcmp(val.str, "keyboard") == 0)
ptr->inp_driver = "kbd";
if (strcmp(val.str, "keyboard") == 0) {
ptr->inp_driver = strdup("kbd");
free(val.str);
}
else
ptr->inp_driver = val.str;
break;