Skip to content

Commit c3e70fb

Browse files
authored
kvssink - Add Missing Null Checks (#1214)
* Add kvssink null checks * Update error log * address comment
1 parent d91e54a commit c3e70fb

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/gstreamer/gstkvssink.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,6 +1517,10 @@ init_track_data(GstKvsSink *kvssink) {
15171517
gchar *video_content_type = NULL, *audio_content_type = NULL;
15181518
const gchar *media_type;
15191519

1520+
if (kvssink == NULL || kvssink->collect == NULL || kvssink->data == NULL) {
1521+
LOG_AND_THROW("Error initializing track data: kvssink, kvssink->collect, or kvssink->data is NULL.");
1522+
}
1523+
15201524
for (walk = kvssink->collect->data; walk != NULL; walk = g_slist_next (walk)) {
15211525
GstKvsSinkTrackData *kvs_sink_track_data = (GstKvsSinkTrackData *) walk->data;
15221526

@@ -1530,6 +1534,19 @@ init_track_data(GstKvsSink *kvssink) {
15301534

15311535
// extract media type from GstCaps to check whether it's h264 or h265
15321536
caps = gst_pad_get_allowed_caps(collect_data->pad);
1537+
1538+
if (caps == NULL) {
1539+
LOG_AND_THROW("Error, GStreamer pad returned NULL caps. Pad has no peer for stream: " << kvssink->stream_name);
1540+
}
1541+
1542+
if (gst_caps_is_empty(caps)) {
1543+
LOG_AND_THROW("Error, GStreamer caps are empty for stream: " << kvssink->stream_name);
1544+
}
1545+
1546+
gchar *caps_str = gst_caps_to_string(caps);
1547+
LOG_INFO("GStreamer caps: " << caps_str);
1548+
g_free(caps_str);
1549+
15331550
media_type = gst_structure_get_name(gst_caps_get_structure(caps, 0));
15341551
if (strncmp(media_type, GSTREAMER_MEDIA_TYPE_H264, MAX_GSTREAMER_MEDIA_TYPE_LEN) == 0) {
15351552
// default codec id is for h264 video.
@@ -1540,7 +1557,7 @@ init_track_data(GstKvsSink *kvssink) {
15401557
video_content_type = g_strdup(MKV_H265_CONTENT_TYPE);
15411558
} else {
15421559
// no-op, should result in a caps negotiation error before getting here.
1543-
LOG_AND_THROW("Error, media type " << media_type << "not accepted by kvssink" << " for " << kvssink->stream_name);
1560+
LOG_AND_THROW("Error, media type " << media_type << " not accepted by kvssink" << " for " << kvssink->stream_name);
15441561
}
15451562
gst_caps_unref(caps);
15461563

@@ -1693,4 +1710,4 @@ GST_PLUGIN_DEFINE (
16931710
"Proprietary",
16941711
"GStreamer",
16951712
"http://gstreamer.net/"
1696-
)
1713+
)

0 commit comments

Comments
 (0)