Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/gstreamer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2021-09-20 13:12:12 +0300
committerSebastian Dröge <sebastian@centricular.com>2021-09-20 13:12:12 +0300
commitfea7f02a1dc5a0a4efb1e324adf2368f0363f7da (patch)
tree4dfc5a3e88469cd9bc39a3a54f07cacb720f67cb
parent9289df42912a6fad32820835b90472bde3e8f60a (diff)
gst: Initialize optional event/message fields when parsing
These might not exist inside the structure and then we would potentially keep around uninitialized memory from the caller in the out parameter. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/887>
-rw-r--r--gst/gstevent.c11
-rw-r--r--gst/gstmessage.c2
2 files changed, 12 insertions, 1 deletions
diff --git a/gst/gstevent.c b/gst/gstevent.c
index 9ace25a7bd..225ed3bf54 100644
--- a/gst/gstevent.c
+++ b/gst/gstevent.c
@@ -863,6 +863,10 @@ gst_event_parse_gap_flags (GstEvent * event, GstGapFlags * flags)
g_return_if_fail (event != NULL);
g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_GAP);
+ /* Initialize to 0 for GAP events that don't have the field set */
+ if (flags)
+ *flags = 0;
+
gst_structure_id_get (GST_EVENT_STRUCTURE (event),
GST_QUARK (GAP_FLAGS), GST_TYPE_GAP_FLAGS, flags, NULL);
}
@@ -1478,6 +1482,9 @@ gst_event_parse_seek_trickmode_interval (GstEvent * event,
g_return_if_fail (interval != NULL);
g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEEK);
+ if (interval)
+ *interval = GST_CLOCK_TIME_NONE;
+
gst_structure_id_get (GST_EVENT_STRUCTURE (event),
GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, interval, NULL);
}
@@ -1814,10 +1821,10 @@ gst_event_parse_stream (GstEvent * event, GstStream ** stream)
g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
if (stream) {
+ *stream = NULL;
gst_structure_id_get (GST_EVENT_STRUCTURE (event),
GST_QUARK (STREAM), GST_TYPE_STREAM, stream, NULL);
}
-
}
/**
@@ -1852,6 +1859,7 @@ gst_event_parse_stream_flags (GstEvent * event, GstStreamFlags * flags)
g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
if (flags) {
+ *flags = 0;
gst_structure_id_get (GST_EVENT_STRUCTURE (event),
GST_QUARK (FLAGS), GST_TYPE_STREAM_FLAGS, flags, NULL);
}
@@ -1902,6 +1910,7 @@ gst_event_parse_group_id (GstEvent * event, guint * group_id)
FALSE);
if (group_id) {
+ *group_id = 0;
return gst_structure_id_get (GST_EVENT_STRUCTURE (event),
GST_QUARK (GROUP_ID), G_TYPE_UINT, group_id, NULL);
}
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index f3f200709e..45d4f4f010 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -2472,6 +2472,8 @@ gst_message_parse_group_id (GstMessage * message, guint * group_id)
if (!group_id)
return TRUE;
+ *group_id = 0;
+
structure = GST_MESSAGE_STRUCTURE (message);
v = gst_structure_id_get_value (structure, GST_QUARK (GROUP_ID));