dix: protect from allocation failure

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-02-24 13:51:40 +01:00
parent ba4fb2588e
commit e025b8c805

View File

@ -284,7 +284,10 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
dev->deviceGrab.grabTime = currentTime; dev->deviceGrab.grabTime = currentTime;
dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab;
dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab;
dev->deviceGrab.sync.event = calloc(1, sizeof(InternalEvent)); if (!(dev->deviceGrab.sync.event = calloc(1, sizeof(InternalEvent)))) {
free(dev);
return NULL;
}
dev->sendEventsProc = XTestDeviceSendEvents; dev->sendEventsProc = XTestDeviceSendEvents;
@ -1692,7 +1695,8 @@ InitTouchClassDeviceStruct(DeviceIntPtr device, unsigned int max_touches,
touch->sourceid = device->id; touch->sourceid = device->id;
device->touch = touch; device->touch = touch;
device->last.touches = calloc(max_touches, sizeof(*device->last.touches)); if (!(device->last.touches = calloc(max_touches, sizeof(*device->last.touches))))
goto err;
device->last.num_touches = touch->num_touches; device->last.num_touches = touch->num_touches;
for (i = 0; i < touch->num_touches; i++) for (i = 0; i < touch->num_touches; i++)
TouchInitDDXTouchPoint(device, &device->last.touches[i]); TouchInitDDXTouchPoint(device, &device->last.touches[i]);
@ -2907,6 +2911,11 @@ AllocDevicePair(ClientPtr client, const char *name,
if (InputDevIsMaster(pointer)) { if (InputDevIsMaster(pointer)) {
pointer->unused_classes = calloc(1, sizeof(ClassesRec)); pointer->unused_classes = calloc(1, sizeof(ClassesRec));
keyboard->unused_classes = calloc(1, sizeof(ClassesRec)); keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
if (!pointer->unused_classes || !keyboard->unused_classes) {
free(keyboard->unused_classes);
free(pointer->unused_classes);
return BadAlloc;
}
} }
*ptr = pointer; *ptr = pointer;