summaryrefslogtreecommitdiffstats
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-07-21 11:41:13 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-07-21 11:41:13 +0000
commit4993d0c46afa109c3deb8d818be712ec86e0230a (patch)
tree7738b1347f9f846193d95cf878df1facf23b3bd5 /libswscale/swscale.c
parent76affcd2cb5433eccf9557fd7e8428e8239da566 (diff)
downloadmpv-4993d0c46afa109c3deb8d818be712ec86e0230a.tar.bz2
mpv-4993d0c46afa109c3deb8d818be712ec86e0230a.tar.xz
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.c11
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