diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 9126717df23f9639a235406cc6074b6de7be7aa7..1bde1af8c4e272ef862c98e2fe6b9f1a2f5902d0 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -641,8 +641,10 @@ static int ebml_read_binary(ByteIOContext *pb, int length, EbmlBin *bin)
 
     bin->size = length;
     bin->pos  = url_ftell(pb);
-    if (get_buffer(pb, bin->data, length) != length)
+    if (get_buffer(pb, bin->data, length) != length) {
+        av_freep(&bin->data);
         return AVERROR(EIO);
+    }
 
     return 0;
 }