diff options
author | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-07-21 11:41:13 +0000 |
---|---|---|
committer | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-07-21 11:41:13 +0000 |
commit | 4993d0c46afa109c3deb8d818be712ec86e0230a (patch) | |
tree | 7738b1347f9f846193d95cf878df1facf23b3bd5 /libswscale/swscale.c | |
parent | 76affcd2cb5433eccf9557fd7e8428e8239da566 (diff) |
fix memleak
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27332 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r-- | libswscale/swscale.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c index a3a1831f67..ccdeae8185 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -932,6 +932,7 @@ static inline int initFilter(int16_t **outFilter, int16_t **filterPos, int *outF int minFilterSize; double *filter=NULL; double *filter2=NULL; + int ret= -1; #if defined(ARCH_X86) if (flags & SWS_CPU_CAPS_MMX) asm volatile("emms\n\t"::: "memory"); //FIXME this should not be required but it IS (even for non-MMX versions) @@ -1211,8 +1212,8 @@ static inline int initFilter(int16_t **outFilter, int16_t **filterPos, int *outF filterSize= (minFilterSize +(filterAlign-1)) & (~(filterAlign-1)); assert(filterSize > 0); filter= av_malloc(filterSize*dstW*sizeof(double)); - if (filterSize >= MAX_FILTER_SIZE) - return -1; + if (filterSize >= MAX_FILTER_SIZE || !filter) + goto error; *outFilterSize= filterSize; if (flags&SWS_PRINT_INFO) @@ -1228,7 +1229,6 @@ static inline int initFilter(int16_t **outFilter, int16_t **filterPos, int *outF else filter[i*filterSize + j]= filter2[i*filter2Size + j]; } } - av_freep(&filter2); //FIXME try to align filterpos if possible @@ -1296,8 +1296,11 @@ static inline int initFilter(int16_t **outFilter, int16_t **filterPos, int *outF (*outFilter)[j + i]= (*outFilter)[j + i - (*outFilterSize)]; } + ret=0; +error: av_free(filter); - return 0; + av_free(filter2); + return ret; } #ifdef COMPILE_MMX2 |