diff options
author | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-03-12 18:13:11 +0000 |
---|---|---|
committer | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-03-12 18:13:11 +0000 |
commit | 5c853c2c212dd57b448c1d86a2efc19045011550 (patch) | |
tree | c7b22065534400db0b58a720dddb190059e4f5d3 /libmpdemux/muxer.c | |
parent | 8f872aaeda7e59df64665ad4e8ca4e965262b6aa (diff) | |
download | mpv-5c853c2c212dd57b448c1d86a2efc19045011550.tar.bz2 mpv-5c853c2c212dd57b448c1d86a2efc19045011550.tar.xz |
exit if calloc() fails; free(muxer) before returning NULL if muxer_init() fails (to avoid memleak). Fixes cid 173
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17832 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/muxer.c')
-rw-r--r-- | libmpdemux/muxer.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/libmpdemux/muxer.c b/libmpdemux/muxer.c index 0a075886e6..3f956bed50 100644 --- a/libmpdemux/muxer.c +++ b/libmpdemux/muxer.c @@ -21,30 +21,47 @@ muxer_t *muxer_new_muxer(int type,FILE *f){ muxer_t* muxer=malloc(sizeof(muxer_t)); memset(muxer,0,sizeof(muxer_t)); + if(!muxer) + return NULL; muxer->file = f; switch (type) { case MUXER_TYPE_MPEG: if(! muxer_init_muxer_mpeg(muxer)) - return NULL; + { + free(muxer); + return NULL; + } break; case MUXER_TYPE_RAWVIDEO: if(! muxer_init_muxer_rawvideo(muxer)) + { + free(muxer); return NULL; + } break; case MUXER_TYPE_RAWAUDIO: if(! muxer_init_muxer_rawaudio(muxer)) + { + free(muxer); return NULL; + } break; #if defined(USE_LIBAVFORMAT) || defined(USE_LIBAVFORMAT_SO) case MUXER_TYPE_LAVF: if(! muxer_init_muxer_lavf(muxer)) - return NULL; + { + free(muxer); + return NULL; + } break; #endif case MUXER_TYPE_AVI: default: if(! muxer_init_muxer_avi(muxer)) - return NULL; + { + free(muxer); + return NULL; + } } return muxer; } |