diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2015-01-03 14:56:48 -0800 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2015-01-05 09:42:33 -0800 |
commit | 88135312d0cdfd624dfdd029539959849302a1f4 (patch) | |
tree | da0239339b75cfe20536c64a1c0a4570f8e320c1 | |
parent | 09bb2c8287e6cafc7acb8e1680ce7b0cc5e36a3d (diff) |
Only use results from GetWindowProperty if it returned Success
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
Uninitialised memory variable (CWE 457): Possible access to uninitialised memory variable 'ret_format'
at line 743 of app/xcmsdb/xcmsdb.c in function 'RemoveSCCData'.
ret_format allocated at line 733.
at line 757 of app/xcmsdb/xcmsdb.c in function 'RemoveSCCData'.
ret_format allocated at line 733.
Uninitialised memory variable (CWE 457): Possible access to uninitialised memory variable 'ret_prop'
at line 748 of app/xcmsdb/xcmsdb.c in function 'RemoveSCCData'.
ret_prop allocated at line 731.
at line 762 of app/xcmsdb/xcmsdb.c in function 'RemoveSCCData'.
ret_prop allocated at line 731.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r-- | xcmsdb.c | 26 |
1 files changed, 13 insertions, 13 deletions
@@ -730,17 +730,17 @@ RemoveSCCData(Display *dpy, Window root, int colorFlag) { unsigned char *ret_prop; unsigned long ret_len, ret_after; - int ret_format; + int ret_format, status = -1; Atom MatricesAtom, CorrectAtom, ret_atom; if (colorFlag != 0) { MatricesAtom = ParseAtom (dpy, XDCCC_MATRIX_ATOM_NAME, True); if (MatricesAtom != None) { - XGetWindowProperty (dpy, root, MatricesAtom, 0, 8192, False, - XA_INTEGER, &ret_atom, &ret_format, &ret_len, + status = XGetWindowProperty (dpy, root, MatricesAtom, 0, 8192, + False, XA_INTEGER, &ret_atom, &ret_format, &ret_len, &ret_after, &ret_prop); } - if (MatricesAtom == None || !ret_format) { + if (MatricesAtom == None || status != Success || !ret_format) { printf ("Could not find property %s\n", XDCCC_MATRIX_ATOM_NAME); } else { printf ("Deleting property %s\n", XDCCC_MATRIX_ATOM_NAME); @@ -750,11 +750,11 @@ RemoveSCCData(Display *dpy, Window root, int colorFlag) CorrectAtom = XInternAtom (dpy, XDCCC_CORRECT_ATOM_NAME, True); if (CorrectAtom != None) { - XGetWindowProperty (dpy, root, CorrectAtom, 0, 8192, False, - XA_INTEGER, &ret_atom, &ret_format, &ret_len, + status = XGetWindowProperty (dpy, root, CorrectAtom, 0, 8192, + False, XA_INTEGER, &ret_atom, &ret_format, &ret_len, &ret_after, &ret_prop); } - if (CorrectAtom == None || !ret_format) { + if (CorrectAtom == None || status != Success || !ret_format) { printf ("Could not find property %s\n", XDCCC_CORRECT_ATOM_NAME); } else { printf ("Deleting property %s\n", XDCCC_CORRECT_ATOM_NAME); @@ -766,11 +766,11 @@ RemoveSCCData(Display *dpy, Window root, int colorFlag) if (colorFlag != 1) { MatricesAtom = ParseAtom (dpy, XDCCC_SCREENWHITEPT_ATOM_NAME, True); if (MatricesAtom != None) { - XGetWindowProperty (dpy, root, MatricesAtom, 0, 8192, False, - XA_INTEGER, &ret_atom, &ret_format, &ret_len, + status = XGetWindowProperty (dpy, root, MatricesAtom, 0, 8192, + False, XA_INTEGER, &ret_atom, &ret_format, &ret_len, &ret_after, &ret_prop); } - if (MatricesAtom == None || !ret_format) { + if (MatricesAtom == None || status != Success || !ret_format) { printf ("Could not find property %s\n", XDCCC_SCREENWHITEPT_ATOM_NAME); } else { printf ("Deleting property %s\n", XDCCC_SCREENWHITEPT_ATOM_NAME); @@ -780,11 +780,11 @@ RemoveSCCData(Display *dpy, Window root, int colorFlag) CorrectAtom = XInternAtom (dpy, XDCCC_GRAY_CORRECT_ATOM_NAME, True); if (CorrectAtom != None) { - XGetWindowProperty (dpy, root, CorrectAtom, 0, 8192, False, - XA_INTEGER, &ret_atom, &ret_format, &ret_len, + status = XGetWindowProperty (dpy, root, CorrectAtom, 0, 8192, + False, XA_INTEGER, &ret_atom, &ret_format, &ret_len, &ret_after, &ret_prop); } - if (CorrectAtom == None || !ret_format) { + if (CorrectAtom == None || status != Success || !ret_format) { printf ("Could not find property %s\n", XDCCC_GRAY_CORRECT_ATOM_NAME); } else { printf ("Deleting property %s\n", XDCCC_GRAY_CORRECT_ATOM_NAME); |