On 01/06/2013 12:11 PM, Luca Barbato wrote:
> Plug an annoying memory leak on broken files.
> ---
> libavformat/oggdec.c | 30 ++++++++++++++++--------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
> index 07af5cf..a6cd31c 100644
> --- a/libavformat/oggdec.c
> +++ b/libavformat/oggdec.c
> @@ -526,6 +526,19 @@ static int ogg_get_length(AVFormatContext *s)
> return 0;
> }
>
> +static int ogg_read_close(AVFormatContext *s)
> +{
> + struct ogg *ogg = s->priv_data;
> + int i;
> +
> + for (i = 0; i < ogg->nstreams; i++) {
> + av_free(ogg->streams[i].buf);
> + av_free(ogg->streams[i].private);
> + }
> + av_free(ogg->streams);
> + return 0;
> +}
> +
> static int ogg_read_header(AVFormatContext *s)
> {
> struct ogg *ogg = s->priv_data;
> @@ -533,8 +546,10 @@ static int ogg_read_header(AVFormatContext *s)
> ogg->curidx = -1;
> //linear headers seek from start
> ret = ogg_get_headers(s);
> - if (ret < 0)
> + if (ret < 0) {
> + ogg_read_close(s);
> return ret;
> + }
>
> for (i = 0; i < ogg->nstreams; i++)
> if (ogg->streams[i].header < 0)
> @@ -619,19 +634,6 @@ retry:
> return psize;
> }
>
> -static int ogg_read_close(AVFormatContext *s)
> -{
> - struct ogg *ogg = s->priv_data;
> - int i;
> -
> - for (i = 0; i < ogg->nstreams; i++) {
> - av_free(ogg->streams[i].buf);
> - av_free(ogg->streams[i].private);
> - }
> - av_free(ogg->streams);
> - return 0;
> -}
> -
> static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index,
> int64_t *pos_arg, int64_t pos_limit)
> {
LGTM
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel