[PATCH:xsetroot] Only use results from GetWindowProperty if it returned success

Alan Coopersmith alan.coopersmith at oracle.com
Sat Jan 3 14:30:49 PST 2015


Since Xlib prior to 1.6 didn't always clear values on failure, don't
assume they're safe to use unless we succeeded.

Reported by Oracle Parfait 1.5.1:
Error: Uninitialised memory (CWE 456)
   Possible access to uninitialised memory '&after'
        at line 328 of xsetroot.c in function 'FixupState'.
          &after allocated at line 317.
   Possible access to uninitialised memory '&data'
        at line 330 of xsetroot.c in function 'FixupState'.
          &data allocated at line 318.
   Possible access to uninitialised memory '&format'
        at line 328 of xsetroot.c in function 'FixupState'.
          &format allocated at line 316.
   Possible access to uninitialised memory '&length'
        at line 328 of xsetroot.c in function 'FixupState'.
          &length allocated at line 317.
   Possible access to uninitialised memory '&type'
        at line 328 of xsetroot.c in function 'FixupState'.
          &type allocated at line 315.
        at line 331 of xsetroot.c in function 'FixupState'.
          &type allocated at line 315.

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

diff --git a/xsetroot.c b/xsetroot.c
index 56ce741..5f142e1 100644
--- a/xsetroot.c
+++ b/xsetroot.c
@@ -331,10 +331,13 @@ FixupState(void)
 	return;
     prop = XInternAtom(dpy, "_XSETROOT_ID", False);
     if (unsave_past) {    
-	(void)XGetWindowProperty(dpy, root, prop, 0L, 1L, True, AnyPropertyType,
-				 &type, &format, &length, &after, &data);
-	if ((type == XA_PIXMAP) && (format == 32) &&
-	    (length == 1) && (after == 0))
+	if (XGetWindowProperty(dpy, root, prop, 0L, 1L, True, AnyPropertyType,
+		       &type, &format, &length, &after, &data) != Success)
+	    fprintf(stderr,
+		    "%s: warning: cannot get _XSETROOT_ID property from root window\n",
+		    program_name);
+	else if ((type == XA_PIXMAP) && (format == 32) &&
+		 (length == 1) && (after == 0))
 	    XKillClient(dpy, *((Pixmap *)data));
 	else if (type != None)
 	    fprintf(stderr, "%s: warning: _XSETROOT_ID property is garbage\n",
-- 
1.7.9.2



More information about the xorg-devel mailing list