On 07/10/12 04:03 PM, Keith Packard wrote: > In: > > commit d792ac125a0462a04a930af543cbc732f8cdab7d > Author: Alan Coopersmith <[email protected]> > Date: Mon Jul 9 19:12:43 2012 -0700 > > Use C99 designated initializers in dix Replies > > the initializer for the .length element of the xGetPointerMappingReply > structure uses the value of rep.nElts, but that won't be set until > after this initializer runs, so we get garbage in the length element > and clients using it will generally wedge. > > Easy to verify: > > $ xmodmap -pp > > Fixed by creating a local nElts variable and using that. > > Signed-off-by: Keith Packard <[email protected]> > --- > dix/devices.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/dix/devices.c b/dix/devices.c > index 839de35..207b78b 100644 > --- a/dix/devices.c > +++ b/dix/devices.c > @@ -1890,6 +1890,7 @@ ProcGetPointerMapping(ClientPtr client) > * the ClientPointer could change. */ > DeviceIntPtr ptr = PickPointer(client); > ButtonClassPtr butc = ptr->button; > + int nElts; > int rc; > > REQUEST_SIZE_MATCH(xReq); > @@ -1898,15 +1899,16 @@ ProcGetPointerMapping(ClientPtr client) > if (rc != Success) > return rc; > > + nElts = (butc) ? butc->numButtons : 0; > rep = (xGetPointerMappingReply) { > .type = X_Reply, > - .nElts = (butc) ? butc->numButtons : 0, > + .nElts = nElts, > .sequenceNumber = client->sequence, > - .length = ((unsigned) rep.nElts + (4 - 1)) / 4 > + .length = ((unsigned) nElts + (4 - 1)) / 4 > }; > WriteReplyToClient(client, sizeof(xGetPointerMappingReply), &rep); > if (butc) > - WriteToClient(client, (int) rep.nElts, &butc->map[1]); > + WriteToClient(client, nElts, &butc->map[1]); > return Success; > } >
Oops, sorry about missing that one. Reviewed-by: Alan Coopersmith <[email protected]> -- -Alan Coopersmith- [email protected] Oracle Solaris Engineering - http://blogs.oracle.com/alanc _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
