diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index b909600b3ed0060438abb9fc9d5d907f2166eb68..2903cf9a6ddad605e476b0521453ed841355fe15 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1251,8 +1251,10 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
     }
 
     if (avctx->extradata_size > 0 && avctx->extradata &&
-        ff_h264_decode_extradata(h, avctx->extradata, avctx->extradata_size) < 0)
+        ff_h264_decode_extradata(h, avctx->extradata, avctx->extradata_size) < 0) {
+        ff_h264_free_context(h);
         return -1;
+    }
 
     if (h->sps.bitstream_restriction_flag &&
         s->avctx->has_b_frames < h->sps.num_reorder_frames) {