diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index f83884dfc22242d698e7df396d08264a1da7f38c..4fc1c5a06278660d4145ff072e9054b0339477d8 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -863,8 +863,11 @@ static int decode_iccp_chunk(PNGDecContext *s, int length, AVFrame *f)
 
     av_bprint_finalize(&bp, (char **)&data);
 
-    if (!(sd = av_frame_new_side_data(f, AV_FRAME_DATA_ICC_PROFILE, bp.len)))
+    sd = av_frame_new_side_data(f, AV_FRAME_DATA_ICC_PROFILE, bp.len);
+    if (!sd) {
+        av_free(data);
         return AVERROR(ENOMEM);
+    }
 
     av_dict_set(&sd->metadata, "name", profile_name, 0);
     memcpy(sd->data, data, bp.len);