Mercurial > mplayer.hg
changeset 32602:1cedf73225e0
Fix possible memory leaks on error.
author | reimar |
---|---|
date | Sat, 11 Dec 2010 17:45:41 +0000 |
parents | f23e289e35c6 |
children | 02830ab7afb7 |
files | libmpcodecs/ad_speex.c |
diffstat | 1 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/ad_speex.c Sat Dec 11 16:36:17 2010 +0000 +++ b/libmpcodecs/ad_speex.c Sat Dec 11 17:45:41 2010 +0000 @@ -65,7 +65,7 @@ const SpeexStereoState st_st = SPEEX_STEREO_STATE_INIT; // hack if (!sh->wf || sh->wf->cbSize < 80) { mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Missing extradata!\n"); - return 0; + goto err_out; } ctx->hdr = speex_packet_to_header((char *)&sh->wf[1], sh->wf->cbSize); if (!ctx->hdr && sh->wf->cbSize == 0x72 && hdr[0] == 1 && hdr[1] == 0) { @@ -87,7 +87,7 @@ } if (!ctx->hdr) { mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Invalid extradata!\n"); - return 0; + goto err_out; } if (ctx->hdr->nb_channels != 1 && ctx->hdr->nb_channels != 2) { mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Invalid number of channels (%i), " @@ -119,6 +119,12 @@ sh->sample_format = AF_FORMAT_S16_NE; sh->context = ctx; return 1; + +err_out: + if (ctx) + free(ctx->hdr); + free(ctx); + return 0; } static void uninit(sh_audio_t *sh) {