[FFmpeg-devel] [PATCH 3/7] avformat/icecast: Free the right buffer on error

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Wed Dec 18 19:35:00 EET 2019


Andreas Rheinhardt:
> In case an AVBPrint was not complete, icecast_open() would free some
> buffers that have not been allocated yet instead of freeing the data of
> the AVBPrint (if they have been allocated). Because this error does not
> trigger a jump to the general cleanup section any more, one can moreover
> remove a (now unnecessary) initialization of a pointer.
> 
> Furthermore, finalizing an AVBPrint can fail (namely when the string
> inside the AVBPrint has not been allocated yet) and so this needs to be
> checked.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavformat/icecast.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/libavformat/icecast.c b/libavformat/icecast.c
> index d2198b78ec..052cd37f3e 100644
> --- a/libavformat/icecast.c
> +++ b/libavformat/icecast.c
> @@ -89,7 +89,7 @@ static int icecast_open(URLContext *h, const char *uri, int flags)
>  
>      // URI part variables
>      char h_url[1024], host[1024], auth[1024], path[1024];
> -    char *headers = NULL, *user = NULL;
> +    char *headers, *user = NULL;
>      int port, ret;
>      AVBPrint bp;
>  
> @@ -105,10 +105,11 @@ static int icecast_open(URLContext *h, const char *uri, int flags)
>      cat_header(&bp, "Ice-Genre", s->genre);
>      cat_header(&bp, "Ice-Public", s->public ? "1" : "0");
>      if (!av_bprint_is_complete(&bp)) {
> -        ret = AVERROR(ENOMEM);
> -        goto cleanup;
> +        av_bprint_finalize(&bp, NULL);
> +        return AVERROR(ENOMEM);
>      }
> -    av_bprint_finalize(&bp, &headers);
> +    if ((ret = av_bprint_finalize(&bp, &headers)) < 0)
> +        return ret;
>  
>      // Set options
>      av_dict_set(&opt_dict, "method", s->legacy_icecast ? "SOURCE" : "PUT", 0);
> 
Ping.

- Andreas


More information about the ffmpeg-devel mailing list