[FFmpeg-cvslog] r19709 - trunk/libavformat/avidec.c
reimar
subversion
Wed Aug 26 10:38:44 CEST 2009
Author: reimar
Date: Wed Aug 26 10:38:44 2009
New Revision: 19709
Log:
Check for seek failures in avi_load_index, otherwise if the index offset
is invalid (e.g. truncated file) we might end up reading the whole file
since trying to seek beyond the end of file does not set EOF.
Modified:
trunk/libavformat/avidec.c
Modified: trunk/libavformat/avidec.c
==============================================================================
--- trunk/libavformat/avidec.c Wed Aug 26 03:29:10 2009 (r19708)
+++ trunk/libavformat/avidec.c Wed Aug 26 10:38:44 2009 (r19709)
@@ -1001,8 +1001,10 @@ static int avi_load_index(AVFormatContex
ByteIOContext *pb = s->pb;
uint32_t tag, size;
int64_t pos= url_ftell(pb);
+ int ret = -1;
- url_fseek(pb, avi->movi_end, SEEK_SET);
+ if (url_fseek(pb, avi->movi_end, SEEK_SET) < 0)
+ goto the_end; // maybe truncated file
#ifdef DEBUG_SEEK
printf("movi_end=0x%"PRIx64"\n", avi->movi_end);
#endif
@@ -1023,19 +1025,20 @@ static int avi_load_index(AVFormatContex
case MKTAG('i', 'd', 'x', '1'):
if (avi_read_idx1(s, size) < 0)
goto skip;
- else
+ ret = 0;
goto the_end;
break;
default:
skip:
size += (size & 1);
- url_fskip(pb, size);
+ if (url_fseek(pb, size, SEEK_CUR) < 0)
+ goto the_end; // something is wrong here
break;
}
}
the_end:
url_fseek(pb, pos, SEEK_SET);
- return 0;
+ return ret;
}
static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
More information about the ffmpeg-cvslog
mailing list