animcur: Handle allocation failure for the animation timer

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
Tested-by: Aaron Plattner <aplattner@nvidia.com>
This commit is contained in:
Adam Jackson 2018-01-09 11:48:10 -05:00
parent de60245e05
commit 4d82a150b2

View File

@ -299,7 +299,7 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
CursorPtr *ppCursor, ClientPtr client, XID cid) CursorPtr *ppCursor, ClientPtr client, XID cid)
{ {
CursorPtr pCursor; CursorPtr pCursor;
int rc, i; int rc = BadAlloc, i;
AnimCurPtr ac; AnimCurPtr ac;
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++)
@ -314,7 +314,7 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
sizeof(AnimCurRec) + sizeof(AnimCurRec) +
ncursor * sizeof(AnimCurElt), 1); ncursor * sizeof(AnimCurElt), 1);
if (!pCursor) if (!pCursor)
return BadAlloc; return rc;
dixInitPrivates(pCursor, pCursor + 1, PRIVATE_CURSOR); dixInitPrivates(pCursor, pCursor + 1, PRIVATE_CURSOR);
pCursor->bits = &animCursorBits; pCursor->bits = &animCursorBits;
pCursor->refcnt = 1; pCursor->refcnt = 1;
@ -333,8 +333,10 @@ AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
ac->timer = TimerSet(NULL, 0, 0, AnimCurTimerNotify, NULL); ac->timer = TimerSet(NULL, 0, 0, AnimCurTimerNotify, NULL);
/* security creation/labeling check */ /* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR, pCursor, if (ac->timer)
RT_NONE, NULL, DixCreateAccess); rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR, pCursor,
RT_NONE, NULL, DixCreateAccess);
if (rc != Success) { if (rc != Success) {
TimerFree(ac->timer); TimerFree(ac->timer);
dixFiniPrivates(pCursor, PRIVATE_CURSOR); dixFiniPrivates(pCursor, PRIVATE_CURSOR);