[PATCH libXpm] After fdopen(), use fclose() instead of close() in error path

Walter Harms wharms at bfs.de
Thu Oct 11 19:13:03 UTC 2018



> Alan Coopersmith <alan.coopersmith at oracle.com> hat am 1. Oktober 2018 um 00:14
> geschrieben:
> 
> 
> Found by Oracle's Parfait 2.2 static analyzer:
> 
> Error: File Leak
>    File Leak [file-ptr-leak]:
>       Leaked File fp
>         at line 94 of lib/libXpm/src/RdFToBuf.c in function
> 'XpmReadFileToBuffer
> '.
>           fp initialized at line 86 with fdopen
>           fp leaks when len < 0 at line 92.
> 
> Introduced-by: commit 8b3024e6871ce50b34bf2dff924774bd654703bc
> 
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
>  src/RdFToBuf.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/RdFToBuf.c b/src/RdFToBuf.c
> index 69e3347..1b386f8 100644
> --- a/src/RdFToBuf.c
> +++ b/src/RdFToBuf.c
> @@ -86,15 +86,15 @@ XpmReadFileToBuffer(
>      fp = fdopen(fd, "r");
>      if (!fp) {
>  	close(fd);
>  	return XpmOpenFailed;
>      }
>      len = stats.st_size;
>      if (len < 0 || len >= SIZE_MAX) {
> -	close(fd);
> +	fclose(fp);
>  	return XpmOpenFailed;
>      }

IMHO it should do both,
otherwise you have a different behavier when
fdopen failed and returning XpmOpenFailed
or size check failed and returning XpmOpenFailed



>      ptr = (char *) XpmMalloc(len + 1);
>      if (!ptr) {
>  	fclose(fp);
>  	return XpmNoMemory;
>      }

this does not close(fd) either, maybe
it is better not to close it in the first case 
to have a similar behavier ?

re,
 wh


> -- 
> 2.15.2
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list