Mercurial > libavformat.hg
changeset 5895:d8031a05ceec libavformat
Fix updating condition for the probe_size variable in the internal
loop of ff_probe_input_buffer(), making sure that probe_size is always
set to probe_max_size in the last iteration.
Also make the function return an error if we get to the max probe
length and still cannot figure out what the format is.
Patch by Micah Galizia micahgalizia A gmail D com.
author | stefano |
---|---|
date | Fri, 26 Mar 2010 01:12:14 +0000 |
parents | 51c410f2251b |
children | 395592984ef0 |
files | utils.c |
diffstat | 1 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/utils.c Thu Mar 25 22:21:09 2010 +0000 +++ b/utils.c Fri Mar 26 01:12:14 2010 +0000 @@ -478,7 +478,8 @@ return AVERROR(EINVAL); } - for(probe_size= PROBE_BUF_MIN; probe_size<=max_probe_size && !*fmt && ret >= 0; probe_size<<=1){ + for(probe_size= PROBE_BUF_MIN; probe_size<=max_probe_size && !*fmt && ret >= 0; + probe_size = FFMIN(probe_size<<1, FFMAX(max_probe_size, probe_size+1))) { int ret, score = probe_size < max_probe_size ? AVPROBE_SCORE_MAX/4 : 0; int buf_offset = (probe_size == PROBE_BUF_MIN) ? 0 : probe_size>>1; @@ -513,6 +514,11 @@ } av_free(buf); + + if (!*fmt) { + return AVERROR_INVALIDDATA; + } + if (url_fseek(*pb, 0, SEEK_SET) < 0) { url_fclose(*pb); if (url_fopen(pb, filename, URL_RDONLY) < 0)