From 4bf32cac7a2be3b16b1fa1945c7f3447510e2de9 Mon Sep 17 00:00:00 2001 From: Zaheer Abbas Merali Date: Wed, 27 Feb 2008 12:34:00 +0000 Subject: sys/dvb/camutils.c: Extra checks to prevent data corruption/segfaults. Original commit message from CVS: * sys/dvb/camutils.c: Extra checks to prevent data corruption/segfaults. --- sys/dvb/camutils.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'sys/dvb') diff --git a/sys/dvb/camutils.c b/sys/dvb/camutils.c index 1eb32175..b58eca1a 100644 --- a/sys/dvb/camutils.c +++ b/sys/dvb/camutils.c @@ -232,12 +232,14 @@ cam_build_ca_pmt (GstStructure * pmt, guint8 list_management, guint8 cmd_id, streams = gst_structure_get_value (pmt, "streams"); value = gst_structure_get_value (pmt, "descriptors"); if (value != NULL) { - program_descriptors = g_value_get_boxed (value); - /* get the length of program level CA_descriptor()s */ - len = get_ca_descriptors_length (program_descriptors); - if (len > 0) - /* add one byte for the program level cmd_id */ - len += 1; + if (G_VALUE_HOLDS_BOXED (value)) { + program_descriptors = g_value_get_boxed (value); + /* get the length of program level CA_descriptor()s */ + len = get_ca_descriptors_length (program_descriptors); + if (len > 0) + /* add one byte for the program level cmd_id */ + len += 1; + } } lengths = g_list_append (lengths, GINT_TO_POINTER (len)); body_size += 6 + len; @@ -249,12 +251,16 @@ cam_build_ca_pmt (GstStructure * pmt, guint8 list_management, guint8 cmd_id, stream = g_value_get_boxed (value); value = gst_structure_get_value (stream, "descriptors"); - stream_descriptors = g_value_get_boxed (value); - - len = get_ca_descriptors_length (stream_descriptors); - if (len > 0) - /* one byte for the stream level cmd_id */ - len += 1; + if (value != NULL) { + if (G_VALUE_HOLDS_BOXED (value)) { + stream_descriptors = g_value_get_boxed (value); + + len = get_ca_descriptors_length (stream_descriptors); + if (len > 0) + /* one byte for the stream level cmd_id */ + len += 1; + } + } lengths = g_list_append (lengths, GINT_TO_POINTER (len)); body_size += 5 + len; -- cgit v1.2.1