Browse Source

ogg: fix double free when finding length of small chained oggs.

ogg_save() copies streams[], but doesn't keep track of free()'ed
struct members. Thus, if in between a call to ogg_save() and
ogg_restore(), streams[].private was free()'ed, this would result
in a double free -> crash, which happened when e.g. playing small
chained ogg fragments.
tags/n0.9
Ronald S. Bultje 14 years ago
parent
commit
9ed6cbc3ee
1 changed files with 2 additions and 1 deletions
  1. +2
    -1
      libavformat/oggdec.c

+ 2
- 1
libavformat/oggdec.c View File

@@ -238,7 +238,8 @@ static int ogg_read_page(AVFormatContext *s, int *str)

for (n = 0; n < ogg->nstreams; n++) {
av_freep(&ogg->streams[n].buf);
av_freep(&ogg->streams[n].private);
if (!ogg->state || ogg->state->streams[n].private != ogg->streams[n].private)
av_freep(&ogg->streams[n].private);
}
ogg->curidx = -1;
ogg->nstreams = 0;


Loading…
Cancel
Save