diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index ea61ed2da64d8e2143a8b1713064914bcc690c1a..4b6b3aa3b763c26975ce851508e767611eb1f819 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -171,8 +171,15 @@ AVFilterFormats *ff_make_format_list(const int *fmts)
         ;
 
     formats               = av_mallocz(sizeof(*formats));
-    if (count)
+    if (!formats)
+        return NULL;
+    if (count) {
         formats->formats  = av_malloc(sizeof(*formats->formats) * count);
+        if (!formats->formats) {
+            av_freep(&formats);
+            return NULL;
+        }
+    }
     formats->nb_formats = count;
     memcpy(formats->formats, fmts, sizeof(*formats->formats) * count);
 
@@ -257,6 +264,8 @@ AVFilterChannelLayouts *ff_all_channel_layouts(void)
 do {                                                                 \
     *ref = f;                                                        \
     f->refs = av_realloc(f->refs, sizeof(*f->refs) * ++f->refcount); \
+    if (!f->refs)                                                    \
+        return;                                                      \
     f->refs[f->refcount-1] = ref;                                    \
 } while (0)