diff --git a/libavformat/cache.c b/libavformat/cache.c
index 0746e98d3e75e004a34dd2abfc99f8392994863a..29b4a0687f0d710f21736bed6c4884f6334279b5 100644
--- a/libavformat/cache.c
+++ b/libavformat/cache.c
@@ -92,7 +92,7 @@ static int cache_open(URLContext *h, const char *arg, int flags)
 static int add_entry(URLContext *h, const unsigned char *buf, int size)
 {
     Context *c= h->priv_data;
-    int64_t pos;
+    int64_t pos = -1;
     int ret;
     CacheEntry *entry = av_malloc(sizeof(*entry));
     CacheEntry *entry_ret;
@@ -132,6 +132,8 @@ static int add_entry(URLContext *h, const unsigned char *buf, int size)
 
     return 0;
 fail:
+    if (pos >= 0)
+        ftruncate(c->fd, pos);
     av_free(entry);
     av_free(node);
     return ret;