Mercurial > libavformat.hg
changeset 3377:7b34cd9dfe85 libavformat
Fix memleak, fixed CID123.
author | michael |
---|---|
date | Tue, 27 May 2008 20:48:27 +0000 |
parents | 7db242158d51 |
children | 61f410022b10 |
files | nutdec.c |
diffstat | 1 files changed, 13 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/nutdec.c Tue May 27 18:43:25 2008 +0000 +++ b/nutdec.c Tue May 27 20:48:27 2008 +0000 @@ -500,6 +500,7 @@ int64_t filesize= url_fsize(bc); int64_t *syncpoints; int8_t *has_keyframe; + int ret= -1; url_fseek(bc, filesize-12, SEEK_SET); url_fseek(bc, filesize-get_be64(bc), SEEK_SET); @@ -516,7 +517,9 @@ syncpoints= av_malloc(sizeof(int64_t)*syncpoint_count); has_keyframe= av_malloc(sizeof(int8_t)*(syncpoint_count+1)); for(i=0; i<syncpoint_count; i++){ - GET_V(syncpoints[i], tmp>0) + syncpoints[i] = ff_get_v(bc); + if(syncpoints[i] <= 0) + goto fail; if(i) syncpoints[i] += syncpoints[i-1]; } @@ -533,7 +536,7 @@ x>>=1; if(n+x >= syncpoint_count + 1){ av_log(s, AV_LOG_ERROR, "index overflow A\n"); - return -1; + goto fail; } while(x--) has_keyframe[n++]= flag; @@ -542,7 +545,7 @@ while(x != 1){ if(n>=syncpoint_count + 1){ av_log(s, AV_LOG_ERROR, "index overflow B\n"); - return -1; + goto fail; } has_keyframe[n++]= x&1; x>>=1; @@ -550,7 +553,7 @@ } if(has_keyframe[0]){ av_log(s, AV_LOG_ERROR, "keyframe before first syncpoint in index\n"); - return -1; + goto fail; } assert(n<=syncpoint_count+1); for(; j<n && j<syncpoint_count; j++){ @@ -577,9 +580,13 @@ if(skip_reserved(bc, end) || get_checksum(bc)){ av_log(s, AV_LOG_ERROR, "index checksum mismatch\n"); - return -1; + goto fail; } - return 0; + ret= 0; +fail: + av_free(syncpoints); + av_free(has_keyframe); + return ret; } static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)