[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