diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 4492c5bfef2d56aa2922e0f17ca065ae84df6475..04e10b6413076d52ebd429e9ab3e9fa6204d6da2 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2066,6 +2066,7 @@ static int mpegts_read_packet(AVFormatContext *s,
     ts->pkt = pkt;
     ret = handle_packets(ts, 0);
     if (ret < 0) {
+        av_free_packet(ts->pkt);
         /* flush pes data left */
         for (i = 0; i < NB_PID_MAX; i++) {
             if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {