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