mieqEnqueue: Don't try to update the time for GenericEvents.

Doing so may overwrite the event's length field and cause havoc. Also check if
realloc'd memory did actually return valid pointer.
This commit is contained in:
Peter Hutterer 2007-07-16 18:01:00 +09:30
parent ffdf8f3e45
commit 9eddede039

View File

@ -184,6 +184,11 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
{ {
evt->evlen = evlen; evt->evlen = evlen;
evt->event = xrealloc(evt->event, evt->evlen); evt->event = xrealloc(evt->event, evt->evlen);
if (!evt->event)
{
ErrorF("Running out of memory. Tossing event.\n");
return;
}
} }
memcpy(evt->event, e, evlen); memcpy(evt->event, e, evlen);
@ -191,8 +196,9 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
/* Make sure that event times don't go backwards - this /* Make sure that event times don't go backwards - this
* is "unnecessary", but very useful. */ * is "unnecessary", but very useful. */
if (e->u.keyButtonPointer.time < miEventQueue.lastEventTime && if (e->u.u.type != GenericEvent &&
miEventQueue.lastEventTime - e->u.keyButtonPointer.time < 10000) e->u.keyButtonPointer.time < miEventQueue.lastEventTime &&
miEventQueue.lastEventTime - e->u.keyButtonPointer.time < 10000)
evt->event->u.keyButtonPointer.time = miEventQueue.lastEventTime; evt->event->u.keyButtonPointer.time = miEventQueue.lastEventTime;
miEventQueue.lastEventTime = evt->event->u.keyButtonPointer.time; miEventQueue.lastEventTime = evt->event->u.keyButtonPointer.time;
@ -293,7 +299,9 @@ mieqProcessInputEvents(void)
memcpy(&event[i], e->events[i].event, sizeof(xEvent)); memcpy(&event[i], e->events[i].event, sizeof(xEvent));
} }
else else
{
event = e->events->event; event = e->events->event;
}
/* MPX devices send both core and Xi events. /* MPX devices send both core and Xi events.
* Use dev to get the correct processing function but supply * Use dev to get the correct processing function but supply