[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