summaryrefslogtreecommitdiff
path: root/libavformat/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r--libavformat/utils.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 2c06e66666..b29e65d93c 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -478,7 +478,8 @@ int ff_probe_input_buffer(ByteIOContext **pb, AVInputFormat **fmt,
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 @@ int ff_probe_input_buffer(ByteIOContext **pb, AVInputFormat **fmt,
}
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)