summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2021-03-03 10:51:04 +0200
committerTim-Philipp Müller <tim@centricular.com>2021-03-15 16:58:58 +0000
commit8b753694ad056cad95da362388e0b375eaff79c6 (patch)
treeca24f6b4b16c321b9eb2004083dc48c17cb83074
parent4d7ab9a3839afd60219a3535f16012d4366e58f2 (diff)
downloadgst-libav-1.14.tar.gz
avcodecmap: Don't try converting channel layouts with more than 64 channels1.14
We only support up to 64 channels in GStreamer with a specific layout so it's safe to assume a NONE layout in this case. Also the arrays of channel positions are allocated everywhere with 64 elements so don't try setting more than 64 to NONE as that will cause stack corruptions and similar memory safety issues. Thanks to Natalie Silvanovich for reporting this issue. Fixes https://gitlab.freedesktop.org/gstreamer/gst-libav/-/issues/92 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/123>
-rw-r--r--ext/libav/gstavcodecmap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
index 92a17fc..9cb23d9 100644
--- a/ext/libav/gstavcodecmap.c
+++ b/ext/libav/gstavcodecmap.c
@@ -124,7 +124,7 @@ gst_ffmpeg_channel_layout_to_gst (guint64 channel_layout, gint channels,
guint nchannels = 0;
gboolean none_layout = FALSE;
- if (channel_layout == 0) {
+ if (channel_layout == 0 || channels > 64) {
nchannels = channels;
none_layout = TRUE;
} else {
@@ -185,7 +185,7 @@ gst_ffmpeg_channel_layout_to_gst (guint64 channel_layout, gint channels,
} else {
guint i;
- for (i = 0; i < nchannels; i++)
+ for (i = 0; i < nchannels && i < 64; i++)
pos[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
}
}