> Alan Coopersmith <[email protected]> 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 <[email protected]>
> ---
> 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
>
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel