[PATCH:libX11 2/2] Fix validation of ctrls parameter to XkbGetPerClientControls()

Alan Coopersmith alan.coopersmith at oracle.com
Wed Jul 9 13:34:44 PDT 2014


Nothing in the XKB spec states that the memory pointed to by ctrls has to
be initialized to any given value when passed to the function, only that
it is set by the function to the values returned by the X server:
http://www.x.org/releases/X11R7.7/doc/libX11/XKB/xkblib.html#The_Miscellaneous_Per_client_Controls

The check for the incoming value seems to be copied from
XkbSetPerClientControls without explanation.

Instead change it to checking if ctrls is non-NULL, since there's no
point asking the X server to return a value the caller won't even see.

Found while investigating report from cppcheck-1.65:
[src/xkb/XKB.c:699] -> [src/xkb/XKB.c:719]: (warning) Possible null pointer
 dereference: ctrls - otherwise it is redundant to check it against null.

Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 src/xkb/XKB.c |   11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/xkb/XKB.c b/src/xkb/XKB.c
index 6413ba2..03a89d0 100644
--- a/src/xkb/XKB.c
+++ b/src/xkb/XKB.c
@@ -696,9 +696,7 @@ XkbGetPerClientControls(Display *dpy, unsigned *ctrls)
 
     if ((dpy->flags & XlibDisplayNoXkb) ||
         (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) ||
-        (*ctrls & ~(XkbPCF_GrabsUseXKBStateMask |
-                    XkbPCF_LookupStateWhenGrabbed |
-                    XkbPCF_SendEventUsesXKBState)))
+        (ctrls == NULL))
         return False;
     LockDisplay(dpy);
     xkbi = dpy->xkb_info;
@@ -716,10 +714,9 @@ XkbGetPerClientControls(Display *dpy, unsigned *ctrls)
     }
     UnlockDisplay(dpy);
     SyncHandle();
-    if (ctrls)
-        *ctrls = (rep.value & (XkbPCF_GrabsUseXKBStateMask |
-                               XkbPCF_LookupStateWhenGrabbed |
-                               XkbPCF_SendEventUsesXKBState));
+    *ctrls = (rep.value & (XkbPCF_GrabsUseXKBStateMask |
+                           XkbPCF_LookupStateWhenGrabbed |
+                           XkbPCF_SendEventUsesXKBState));
     return (True);
 }
 
-- 
1.7.9.2



More information about the xorg-devel mailing list