On 11/07/2011 02:20 PM, Martin Storsjö wrote:
> The caller expects the seekhead struct to be freed when calling
> matroska_write_seekhead. Currently, the structure is leaked if the
> seek fails.
> ---
> libavformat/matroskaenc.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
> index 5edd2be..0667947 100644
> --- a/libavformat/matroskaenc.c
> +++ b/libavformat/matroskaenc.c
> @@ -316,11 +316,14 @@ static int64_t mkv_write_seekhead(AVIOContext *pb,
> mkv_seekhead *seekhead)
> int i;
>
> currentpos = avio_tell(pb);
>
> - if (seekhead->reserved_size > 0)
> - if (avio_seek(pb, seekhead->filepos, SEEK_SET) < 0)
> - return -1;
> + if (seekhead->reserved_size > 0) {
> + if (avio_seek(pb, seekhead->filepos, SEEK_SET) < 0) {
> + currentpos = -1;
> + goto fail;
> + }
> + }
>
> metaseek = start_ebml_master(pb, MATROSKA_ID_SEEKHEAD,
> seekhead->reserved_size);
> for (i = 0; i < seekhead->num_entries; i++) {
> mkv_seekhead_entry *entry = &seekhead->entries[i];
> @@ -342,8 +345,9 @@ static int64_t mkv_write_seekhead(AVIOContext *pb,
> mkv_seekhead *seekhead)
> avio_seek(pb, currentpos, SEEK_SET);
>
> currentpos = seekhead->filepos;
> }
> +fail:
> av_free(seekhead->entries);
> av_free(seekhead);
>
> return currentpos;
patch looks ok.
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel