summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-03-05 15:53:02 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-03-11 14:26:07 +1000
commit2780363f96d07f8ca62507246bb04f6894e3b13d (patch)
tree3255d89351296188dd3ca472f078080d885ccbae
parentee1a0b4f507f32c7abe07b3324dc3a6c210964c4 (diff)
XISelectEvent: make sure padding is zeroed out.
-rw-r--r--src/XISelEv.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/XISelEv.c b/src/XISelEv.c
index 182d1e6..c8f2c15 100644
--- a/src/XISelEv.c
+++ b/src/XISelEv.c
@@ -73,11 +73,17 @@ XISelectEvent(Display* dpy, Window win, XIDeviceEventMask* masks, int num_masks)
for (i = 0; i < num_masks; i++)
{
+ char *buff;
current = &masks[i];
mask.deviceid = current->deviceid;
mask.mask_len = (current->mask_len + 3)/4;
+ /* masks.mask_len is in bytes, but we need 4-byte units on the wire,
+ * and they need to be padded with 0 */
+ buff = calloc(1, mask.mask_len * 4);
+ memcpy(buff, current->mask, current->mask_len);
Data32(dpy, &mask, sizeof(xXIDeviceEventMask));
- Data(dpy, (char*)current->mask, current->mask_len);
+ Data(dpy, buff, mask.mask_len * 4);
+ free(buff);
}
UnlockDisplay(dpy);