[PATCH 1/1] libiberty(argv.c): Fix memory leak in expandargv.

Martin Sebor msebor@gmail.com
Thu Feb 18 17:04:45 GMT 2021


On 2/18/21 3:58 AM, Ayush Mittal via Gcc-patches wrote:
> Dynamic memory referenced by 'buffer' was allocated using xmalloc but fails to free it
> when jump to 'error' label.
> 
> Issue as per static analysis tool.

The change looks okay to me although I can't approve it.  Since GCC
is a regression fixing stage, unless the leak is a recent regression
the fix is (strictly speaking) out of scope for GCC 11.  Either
a libiberty or a global maintainer might be comfortable approving it 
regardless.

That said, rather than adding another call to free, I would suggest
to consider initializing buffer to null and moving the existing call
to free the buffer under the error: label.

Martin

> 
> Signed-off-by: Ayush Mittal <ayush.m@samsung.com>
> Signed-off-by: Maninder Singh <maninder1.s@samsung.com>
> ---
>   libiberty/ChangeLog | 4 ++++
>   libiberty/argv.c    | 5 ++++-
>   2 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
> index e472553..96cacba 100644
> --- a/libiberty/ChangeLog
> +++ b/libiberty/ChangeLog
> @@ -1,3 +1,7 @@
> +2021-02-18  Ayush Mittal  <ayush.m@samsung.com>
> +
> +	* argv.c (expandargv): Fix memory leak for buffer allocated to read file contents.
> +
>   2021-02-01  Martin Sebor  <msebor@redhat.com>
>   
>   	* dyn-string.c (dyn_string_insert_cstr): Use memcpy instead of strncpy
> diff --git a/libiberty/argv.c b/libiberty/argv.c
> index cd97f90..7199c7d 100644
> --- a/libiberty/argv.c
> +++ b/libiberty/argv.c
> @@ -442,7 +442,10 @@ expandargv (int *argcp, char ***argvp)
>   	     due to CR/LF->CR translation when reading text files.
>   	     That does not in-and-of itself indicate failure.  */
>   	  && ferror (f))
> -	goto error;
> +	{
> +	  free(buffer);
> +	  goto error;
> +	}
>         /* Add a NUL terminator.  */
>         buffer[len] = '\0';
>         /* If the file is empty or contains only whitespace, buildargv would
> 



More information about the Gcc-patches mailing list