xserver: Branch 'master'
Maarten Maathuis
madman2003 at kemper.freedesktop.org
Sat Mar 1 07:57:06 PST 2008
hw/xfree86/modes/xf86Modes.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
New commits:
commit 8af2c39bcc4ddc4693d5a2597c9622fa17b6c272
Author: Maarten Maathuis <madman2003 at gmail.com>
Date: Sat Mar 1 16:54:01 2008 +0100
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.
diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index d6aa61a..9e31512 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;
}
More information about the xorg-commit
mailing list