[PATCH:xcmsdb] Only use results from GetWindowProperty if it returned Success

Hans de Goede hdegoede at redhat.com
Mon Jan 5 07:01:52 PST 2015


Hi,

On 04-01-15 00:00, Alan Coopersmith wrote:
> 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 at oracle.com>

Looks good:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans

> ---
>   xcmsdb.c |   26 +++++++++++++-------------
>   1 file changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/xcmsdb.c b/xcmsdb.c
> index ab5cb66..68b083b 100644
> --- a/xcmsdb.c
> +++ b/xcmsdb.c
> @@ -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);
>


More information about the xorg-devel mailing list