Fix big mistake in commit fd41f46ac6
.
- When a mode is deleted, the name pointer is also free()'ed. - This leaves other modes with an invalid pointer.
This commit is contained in:
parent
ef60632e20
commit
8af2c39bcc
|
@ -214,8 +214,15 @@ xf86DuplicateMode(DisplayModePtr pMode)
|
||||||
*pNew = *pMode;
|
*pNew = *pMode;
|
||||||
pNew->next = NULL;
|
pNew->next = NULL;
|
||||||
pNew->prev = 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);
|
xf86SetModeDefaultName(pNew);
|
||||||
|
else
|
||||||
|
pNew->name = xnfstrdup(pMode->name);
|
||||||
|
|
||||||
return pNew;
|
return pNew;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue