summaryrefslogtreecommitdiff
path: root/libavformat/cache.c
diff options
context:
space:
mode:
authorBryan Huh <bryan@box.com>2015-11-08 16:35:01 -0800
committerMichael Niedermayer <michael@niedermayer.cc>2015-11-09 19:25:05 +0100
commit72f9a6349cae0eba7caf9e338bee46c1d9baed27 (patch)
tree9e1316778c924c6982cd637c3f584ac4cf528cb2 /libavformat/cache.c
parentddbad15898287bdce7da08dc49664f061a87f379 (diff)
avformat/cache: Avoid int-overflow in cache compare function
cache protocol indexes its cache using AVTreeNodes which require a cmp function for inserting and searching new cache-entries. This cmp function expects a 32-bit int return value (negative, zero, or positive) but the cache cmp function returns an int64_t which can overflow the int, giving negative numbers for when it should be positive, vice versa. This manifests itself only for very large files (e.g. 4GB+) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/cache.c')
-rw-r--r--libavformat/cache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libavformat/cache.c b/libavformat/cache.c
index 31f63e6b18..d41161d498 100644
--- a/libavformat/cache.c
+++ b/libavformat/cache.c
@@ -67,7 +67,7 @@ typedef struct Context {
static int cmp(const void *key, const void *node)
{
- return (*(const int64_t *) key) - ((const CacheEntry *) node)->logical_pos;
+ return FFDIFFSIGN(*(const int64_t *)key, ((const CacheEntry *) node)->logical_pos);
}
static int cache_open(URLContext *h, const char *arg, int flags, AVDictionary **options)