summaryrefslogtreecommitdiff
path: root/Xi/chgdctl.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-02-26 12:34:21 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-05-07 09:40:44 +1000
commitdce40e2266200421647044ec7e856656d2ef952d (patch)
tree2ab459bb8842ec91d377d5dbd072338920624c78 /Xi/chgdctl.c
parent23d1bc69f305edd5a6e2cfec3dfc84befda0881c (diff)
Xi: always return BadMatch for XTest devices ChangeDeviceControl requests
The only controls that still do something are DEVICE_RESOLUTION and DEVICE_ENABLE. XTest devices have no resolution to change, and they cannot be disabled. So skip the lot, and prevent a crash in the DDX when it's trying to de-reference pInfo->control_proc on device with no pInfo struct. Likewise, don't allow setting device mode or the valuators. XTest pointers are always relative, they don't have a mode. Test cases: xts5/XI/ChangeDeviceControl (1/10) xts5/XI/SetDeviceValuators (1/6) and a few others Reported-by: Knut Petersen <Knut_Petersen@t-online.de> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'Xi/chgdctl.c')
-rw-r--r--Xi/chgdctl.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/Xi/chgdctl.c b/Xi/chgdctl.c
index 31d3a57f3..d078aa248 100644
--- a/Xi/chgdctl.c
+++ b/Xi/chgdctl.c
@@ -122,6 +122,12 @@ ProcXChangeDeviceControl(ClientPtr client)
if (ret != Success)
goto out;
+ /* XTest devices are special, none of the below apply to them anyway */
+ if (IsXTestDevice(dev, NULL)) {
+ ret = BadMatch;
+ goto out;
+ }
+
rep = (xChangeDeviceControlReply) {
.repType = X_Reply,
.RepType = X_ChangeDeviceControl,