Mercurial > mplayer.hg
comparison libmpdemux/demux_mkv.c @ 18708:9e2b300db17b
Change free_sh_audio() to take demuxer and stream id as parameters
(same as new_sh_audio()) instead of sh_audio_t *, use those to remove
the pointer from demuxer->a_streams[] before freeing it.
Some demuxers use free_sh_audio() to undo the creation of an
already-allocated audio stream in case of error. These uses were unsafe
since free_sh_audio() freed the data structure but left the pointer in
demuxer->a_streams[], leading to double free later in free_demuxer()
(and perhaps use of the freed stream before that, I didn't check).
author | uau |
---|---|
date | Wed, 14 Jun 2006 14:05:59 +0000 |
parents | 4928dd61f136 |
children | e0077bdf5ee5 |
comparison
equal
deleted
inserted
replaced
18707:60a60dbf7a88 | 18708:9e2b300db17b |
---|---|
1835 else | 1835 else |
1836 { | 1836 { |
1837 mp_msg (MSGT_DEMUX, MSGL_WARN, "[mkv] Unknown/unsupported audio " | 1837 mp_msg (MSGT_DEMUX, MSGL_WARN, "[mkv] Unknown/unsupported audio " |
1838 "codec ID '%s' for track %u or missing/faulty private " | 1838 "codec ID '%s' for track %u or missing/faulty private " |
1839 "codec data.\n", track->codec_id, track->tnum); | 1839 "codec data.\n", track->codec_id, track->tnum); |
1840 free_sh_audio (sh_a); | 1840 free_sh_audio(demuxer, track->tnum); |
1841 return 1; | 1841 return 1; |
1842 } | 1842 } |
1843 } | 1843 } |
1844 | 1844 |
1845 sh_a->format = track->a_formattag; | 1845 sh_a->format = track->a_formattag; |
2059 dp->flags = 0; | 2059 dp->flags = 0; |
2060 ds_add_packet (demuxer->audio, dp); | 2060 ds_add_packet (demuxer->audio, dp); |
2061 } | 2061 } |
2062 else if (!track->ms_compat || (track->private_size < sizeof(WAVEFORMATEX))) | 2062 else if (!track->ms_compat || (track->private_size < sizeof(WAVEFORMATEX))) |
2063 { | 2063 { |
2064 free_sh_audio (sh_a); | 2064 free_sh_audio(demuxer, track->tnum); |
2065 return 1; | 2065 return 1; |
2066 } | 2066 } |
2067 | 2067 |
2068 return 0; | 2068 return 0; |
2069 } | 2069 } |