summaryrefslogtreecommitdiff
path: root/src/XQueryDv.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-09-24 14:14:48 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-09-24 15:40:36 +1000
commit801d77d035a10250dab728c046a6e9b2775e6dfb (patch)
treef7785ca25be6f64c26c207193141bda19fb8bbb7 /src/XQueryDv.c
parentbff36ef5797d7da11972ee22ea224e207af77455 (diff)
XQueryDeviceState: correct length of XValuatorState
The length is suppposed to be the complete class size, not just the struct size. Since XValuatorState is followed by multiple valuator values the size of the class is variable and dependent on the number of valuators. The server assembles the valuator state last. This bug is unlikely to affect clients as they should never go past the last class anyway. Tested-by: Thomas Jaeger Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'src/XQueryDv.c')
-rw-r--r--src/XQueryDv.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/XQueryDv.c b/src/XQueryDv.c
index 5996734..d9495c2 100644
--- a/src/XQueryDv.c
+++ b/src/XQueryDv.c
@@ -160,7 +160,8 @@ XQueryDeviceState(
CARD32 *valuators = (CARD32 *) (v + 1);
V->class = v->class;
- V->length = sizeof(XValuatorState);
+ V->length = sizeof(XValuatorState) +
+ v->num_valuators * sizeof(int);
V->num_valuators = v->num_valuators;
V->mode = v->mode;
Any = (XInputClass *) (V + 1);