From 61c62919a7b3c55d5a91d9bdd7d549bd78dcbd45 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 16 Oct 2023 15:41:48 +0200 Subject: [PATCH] tsmux: Fix error handling in pad_stream Don't leak the map or the buffer if we encounter an error. Part-of: --- .../gst/mpegtsmux/tsmux/tsmux.c | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst/mpegtsmux/tsmux/tsmux.c b/subprojects/gst-plugins-bad/gst/mpegtsmux/tsmux/tsmux.c index 95857ece49..a8a39917c7 100644 --- a/subprojects/gst-plugins-bad/gst/mpegtsmux/tsmux/tsmux.c +++ b/subprojects/gst-plugins-bad/gst/mpegtsmux/tsmux/tsmux.c @@ -1539,18 +1539,25 @@ pad_stream (TsMux * mux, TsMuxStream * stream, gint64 cur_ts) goto done; } - gst_buffer_map (buf, &map, GST_MAP_WRITE); + if (!gst_buffer_map (buf, &map, GST_MAP_WRITE)) { + gst_buffer_unref (buf); + ret = FALSE; + goto done; + } + memset (map.data, 0xFF, map.size); - if ((new_pcr = - write_new_pcr (mux, stream, get_current_pcr (mux, - cur_ts), get_next_pcr (mux, cur_ts)) != -1)) { + new_pcr = write_new_pcr (mux, stream, get_current_pcr (mux, cur_ts), + get_next_pcr (mux, cur_ts)); + if (new_pcr != -1) { GST_LOG ("Writing PCR-only packet on PID 0x%04x", stream->pi.pid); tsmux_write_ts_header (mux, map.data, &stream->pi, &payload_len, &payload_offs, 0); } else { GST_LOG ("Writing null stuffing packet"); if (!rewrite_si (mux, cur_ts)) { + gst_buffer_unmap (buf, &map); + gst_buffer_unref (buf); ret = FALSE; goto done; } @@ -1560,9 +1567,11 @@ pad_stream (TsMux * mux, TsMuxStream * stream, gint64 cur_ts) gst_buffer_unmap (buf, &map); stream->pi.flags &= TSMUX_PACKET_FLAG_PES_FULL_HEADER; - - if (!(ret = tsmux_packet_out (mux, buf, new_pcr))) + ret = tsmux_packet_out (mux, buf, new_pcr); + if (!ret) { + gst_buffer_unref (buf); goto done; + } } } while (bitrate < mux->bitrate);