From 8af2c39bcc4ddc4693d5a2597c9622fa17b6c272 Mon Sep 17 00:00:00 2001 From: Maarten Maathuis Date: Sat, 1 Mar 2008 16:54:01 +0100 Subject: [PATCH] Fix big mistake in commit fd41f46ac62033a724bd1f4612f19448a21c1224. - When a mode is deleted, the name pointer is also free()'ed. - This leaves other modes with an invalid pointer. --- hw/xfree86/modes/xf86Modes.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c index d6aa61aaf..9e3151254 100644 --- a/hw/xfree86/modes/xf86Modes.c +++ b/hw/xfree86/modes/xf86Modes.c @@ -214,8 +214,15 @@ xf86DuplicateMode(DisplayModePtr pMode) *pNew = *pMode; pNew->next = NULL; pNew->prev = NULL; - if (pNew->name == NULL) + /* + * It is important to copy the name explicitly. + * Otherwise a mode could reference an invalid piece of memory, after one of them runs free(). + * This will lead to obscure problems, that you really don't want. + */ + if (pMode->name == NULL) xf86SetModeDefaultName(pNew); + else + pNew->name = xnfstrdup(pMode->name); return pNew; }