sdp: add g_return*_if_fail assertions on invalid inputs

Prevents some programming errors and invalid modifications.
This commit is contained in:
Matthew Waters 2017-04-03 15:08:06 +10:00
parent fa243654cf
commit 9d3622e1bd

View file

@ -93,31 +93,37 @@ G_STMT_START { \
#define DEFINE_STRING_SETTER(field) \ #define DEFINE_STRING_SETTER(field) \
GstSDPResult gst_sdp_message_set_##field (GstSDPMessage *msg, const gchar *val) { \ GstSDPResult gst_sdp_message_set_##field (GstSDPMessage *msg, const gchar *val) { \
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL); \
g_free (msg->field); \ g_free (msg->field); \
msg->field = g_strdup (val); \ msg->field = g_strdup (val); \
return GST_SDP_OK; \ return GST_SDP_OK; \
} }
#define DEFINE_STRING_GETTER(field) \ #define DEFINE_STRING_GETTER(field) \
const gchar* gst_sdp_message_get_##field (const GstSDPMessage *msg) { \ const gchar* gst_sdp_message_get_##field (const GstSDPMessage *msg) { \
g_return_val_if_fail (msg != NULL, NULL); \
return msg->field; \ return msg->field; \
} }
#define DEFINE_ARRAY_LEN(field) \ #define DEFINE_ARRAY_LEN(field) \
guint gst_sdp_message_##field##_len (const GstSDPMessage *msg) { \ guint gst_sdp_message_##field##_len (const GstSDPMessage *msg) { \
g_return_val_if_fail (msg != NULL, 0); \
return msg->field->len; \ return msg->field->len; \
} }
#define DEFINE_ARRAY_GETTER(method, field, type) \ #define DEFINE_ARRAY_GETTER(method, field, type) \
const type * gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) { \ const type * gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) { \
g_return_val_if_fail (msg != NULL, NULL); \
return &g_array_index (msg->field, type, idx); \ return &g_array_index (msg->field, type, idx); \
} }
#define DEFINE_PTR_ARRAY_GETTER(method, field, type) \ #define DEFINE_PTR_ARRAY_GETTER(method, field, type) \
const type gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) { \ const type gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) { \
g_return_val_if_fail (msg != NULL, (type) 0); \
return g_array_index (msg->field, type, idx); \ return g_array_index (msg->field, type, idx); \
} }
#define DEFINE_ARRAY_INSERT(method, field, intype, dup_method, type) \ #define DEFINE_ARRAY_INSERT(method, field, intype, dup_method, type) \
GstSDPResult gst_sdp_message_insert_##method (GstSDPMessage *msg, gint idx, intype val) { \ GstSDPResult gst_sdp_message_insert_##method (GstSDPMessage *msg, gint idx, intype val) { \
type vt; \ type vt; \
type* v = &vt; \ type* v = &vt; \
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL); \
dup_method (v, val); \ dup_method (v, val); \
if (idx == -1) \ if (idx == -1) \
g_array_append_val (msg->field, vt); \ g_array_append_val (msg->field, vt); \
@ -128,20 +134,25 @@ GstSDPResult gst_sdp_message_insert_##method (GstSDPMessage *msg, gint idx, inty
#define DEFINE_ARRAY_REPLACE(method, field, intype, free_method, dup_method, type) \ #define DEFINE_ARRAY_REPLACE(method, field, intype, free_method, dup_method, type) \
GstSDPResult gst_sdp_message_replace_##method (GstSDPMessage *msg, guint idx, intype val) { \ GstSDPResult gst_sdp_message_replace_##method (GstSDPMessage *msg, guint idx, intype val) { \
type *v = &g_array_index (msg->field, type, idx); \ type *v; \
free_method (v); \ g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL); \
v = &g_array_index (msg->field, type, idx); \
free_method (v); \
dup_method (v, val); \ dup_method (v, val); \
return GST_SDP_OK; \ return GST_SDP_OK; \
} }
#define DEFINE_ARRAY_REMOVE(method, field, type, free_method) \ #define DEFINE_ARRAY_REMOVE(method, field, type, free_method) \
GstSDPResult gst_sdp_message_remove_##method (GstSDPMessage *msg, guint idx) { \ GstSDPResult gst_sdp_message_remove_##method (GstSDPMessage *msg, guint idx) { \
type *v = &g_array_index (msg->field, type, idx); \ type *v; \
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL); \
v = &g_array_index (msg->field, type, idx); \
free_method (v); \ free_method (v); \
g_array_remove_index (msg->field, idx); \ g_array_remove_index (msg->field, idx); \
return GST_SDP_OK; \ return GST_SDP_OK; \
} }
#define DEFINE_ARRAY_ADDER(method, type) \ #define DEFINE_ARRAY_ADDER(method, type) \
GstSDPResult gst_sdp_message_add_##method (GstSDPMessage *msg, const type val) { \ GstSDPResult gst_sdp_message_add_##method (GstSDPMessage *msg, const type val) { \
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL); \
return gst_sdp_message_insert_##method (msg, -1, val); \ return gst_sdp_message_insert_##method (msg, -1, val); \
} }
@ -789,6 +800,8 @@ gst_sdp_message_set_origin (GstSDPMessage * msg, const gchar * username,
const gchar * sess_id, const gchar * sess_version, const gchar * nettype, const gchar * sess_id, const gchar * sess_version, const gchar * nettype,
const gchar * addrtype, const gchar * addr) const gchar * addrtype, const gchar * addr)
{ {
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
REPLACE_STRING (msg->origin.username, username); REPLACE_STRING (msg->origin.username, username);
REPLACE_STRING (msg->origin.sess_id, sess_id); REPLACE_STRING (msg->origin.sess_id, sess_id);
REPLACE_STRING (msg->origin.sess_version, sess_version); REPLACE_STRING (msg->origin.sess_version, sess_version);
@ -810,6 +823,8 @@ gst_sdp_message_set_origin (GstSDPMessage * msg, const gchar * username,
const GstSDPOrigin * const GstSDPOrigin *
gst_sdp_message_get_origin (const GstSDPMessage * msg) gst_sdp_message_get_origin (const GstSDPMessage * msg)
{ {
g_return_val_if_fail (msg != NULL, NULL);
return &msg->origin; return &msg->origin;
} }
@ -1036,6 +1051,8 @@ GstSDPResult
gst_sdp_message_set_connection (GstSDPMessage * msg, const gchar * nettype, gst_sdp_message_set_connection (GstSDPMessage * msg, const gchar * nettype,
const gchar * addrtype, const gchar * address, guint ttl, guint addr_number) const gchar * addrtype, const gchar * address, guint ttl, guint addr_number)
{ {
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
REPLACE_STRING (msg->connection.nettype, nettype); REPLACE_STRING (msg->connection.nettype, nettype);
REPLACE_STRING (msg->connection.addrtype, addrtype); REPLACE_STRING (msg->connection.addrtype, addrtype);
REPLACE_STRING (msg->connection.address, address); REPLACE_STRING (msg->connection.address, address);
@ -1056,6 +1073,8 @@ gst_sdp_message_set_connection (GstSDPMessage * msg, const gchar * nettype,
const GstSDPConnection * const GstSDPConnection *
gst_sdp_message_get_connection (const GstSDPMessage * msg) gst_sdp_message_get_connection (const GstSDPMessage * msg)
{ {
g_return_val_if_fail (msg != NULL, NULL);
return &msg->connection; return &msg->connection;
} }
@ -1075,6 +1094,8 @@ GstSDPResult
gst_sdp_bandwidth_set (GstSDPBandwidth * bw, const gchar * bwtype, gst_sdp_bandwidth_set (GstSDPBandwidth * bw, const gchar * bwtype,
guint bandwidth) guint bandwidth)
{ {
g_return_val_if_fail (bw != NULL, GST_SDP_EINVAL);
bw->bwtype = g_strdup (bwtype); bw->bwtype = g_strdup (bwtype);
bw->bandwidth = bandwidth; bw->bandwidth = bandwidth;
return GST_SDP_OK; return GST_SDP_OK;
@ -1093,6 +1114,8 @@ gst_sdp_bandwidth_set (GstSDPBandwidth * bw, const gchar * bwtype,
GstSDPResult GstSDPResult
gst_sdp_bandwidth_clear (GstSDPBandwidth * bw) gst_sdp_bandwidth_clear (GstSDPBandwidth * bw)
{ {
g_return_val_if_fail (bw != NULL, GST_SDP_EINVAL);
FREE_STRING (bw->bwtype); FREE_STRING (bw->bwtype);
bw->bandwidth = 0; bw->bandwidth = 0;
return GST_SDP_OK; return GST_SDP_OK;
@ -1182,6 +1205,8 @@ gst_sdp_message_add_bandwidth (GstSDPMessage * msg, const gchar * bwtype,
{ {
GstSDPBandwidth bw; GstSDPBandwidth bw;
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
gst_sdp_bandwidth_set (&bw, bwtype, bandwidth); gst_sdp_bandwidth_set (&bw, bwtype, bandwidth);
return gst_sdp_message_insert_bandwidth (msg, -1, &bw); return gst_sdp_message_insert_bandwidth (msg, -1, &bw);
} }
@ -1203,6 +1228,8 @@ GstSDPResult
gst_sdp_time_set (GstSDPTime * t, const gchar * start, gst_sdp_time_set (GstSDPTime * t, const gchar * start,
const gchar * stop, const gchar ** repeat) const gchar * stop, const gchar ** repeat)
{ {
g_return_val_if_fail (t != NULL, GST_SDP_EINVAL);
t->start = g_strdup (start); t->start = g_strdup (start);
t->stop = g_strdup (stop); t->stop = g_strdup (stop);
if (repeat) { if (repeat) {
@ -1231,6 +1258,8 @@ gst_sdp_time_set (GstSDPTime * t, const gchar * start,
GstSDPResult GstSDPResult
gst_sdp_time_clear (GstSDPTime * t) gst_sdp_time_clear (GstSDPTime * t)
{ {
g_return_val_if_fail (t != NULL, GST_SDP_EINVAL);
FREE_STRING (t->start); FREE_STRING (t->start);
FREE_STRING (t->stop); FREE_STRING (t->stop);
INIT_STR_ARRAY (t->repeat); INIT_STR_ARRAY (t->repeat);
@ -1324,6 +1353,8 @@ gst_sdp_message_add_time (GstSDPMessage * msg, const gchar * start,
{ {
GstSDPTime times; GstSDPTime times;
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
gst_sdp_time_set (&times, start, stop, repeat); gst_sdp_time_set (&times, start, stop, repeat);
g_array_append_val (msg->times, times); g_array_append_val (msg->times, times);
@ -1346,6 +1377,8 @@ GstSDPResult
gst_sdp_zone_set (GstSDPZone * zone, const gchar * adj_time, gst_sdp_zone_set (GstSDPZone * zone, const gchar * adj_time,
const gchar * typed_time) const gchar * typed_time)
{ {
g_return_val_if_fail (zone != NULL, GST_SDP_EINVAL);
zone->time = g_strdup (adj_time); zone->time = g_strdup (adj_time);
zone->typed_time = g_strdup (typed_time); zone->typed_time = g_strdup (typed_time);
return GST_SDP_OK; return GST_SDP_OK;
@ -1364,6 +1397,8 @@ gst_sdp_zone_set (GstSDPZone * zone, const gchar * adj_time,
GstSDPResult GstSDPResult
gst_sdp_zone_clear (GstSDPZone * zone) gst_sdp_zone_clear (GstSDPZone * zone)
{ {
g_return_val_if_fail (zone != NULL, GST_SDP_EINVAL);
FREE_STRING (zone->time); FREE_STRING (zone->time);
FREE_STRING (zone->typed_time); FREE_STRING (zone->typed_time);
return GST_SDP_OK; return GST_SDP_OK;
@ -1452,6 +1487,8 @@ gst_sdp_message_add_zone (GstSDPMessage * msg, const gchar * adj_time,
{ {
GstSDPZone zone; GstSDPZone zone;
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
gst_sdp_zone_set (&zone, adj_time, typed_time); gst_sdp_zone_set (&zone, adj_time, typed_time);
g_array_append_val (msg->zones, zone); g_array_append_val (msg->zones, zone);
@ -1472,6 +1509,8 @@ GstSDPResult
gst_sdp_message_set_key (GstSDPMessage * msg, const gchar * type, gst_sdp_message_set_key (GstSDPMessage * msg, const gchar * type,
const gchar * data) const gchar * data)
{ {
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
REPLACE_STRING (msg->key.type, type); REPLACE_STRING (msg->key.type, type);
REPLACE_STRING (msg->key.data, data); REPLACE_STRING (msg->key.data, data);
@ -1489,6 +1528,8 @@ gst_sdp_message_set_key (GstSDPMessage * msg, const gchar * type,
const GstSDPKey * const GstSDPKey *
gst_sdp_message_get_key (const GstSDPMessage * msg) gst_sdp_message_get_key (const GstSDPMessage * msg)
{ {
g_return_val_if_fail (msg != NULL, NULL);
return &msg->key; return &msg->key;
} }
@ -1508,6 +1549,9 @@ GstSDPResult
gst_sdp_attribute_set (GstSDPAttribute * attr, const gchar * key, gst_sdp_attribute_set (GstSDPAttribute * attr, const gchar * key,
const gchar * value) const gchar * value)
{ {
g_return_val_if_fail (attr != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (key != NULL, GST_SDP_EINVAL);
attr->key = g_strdup (key); attr->key = g_strdup (key);
attr->value = g_strdup (value); attr->value = g_strdup (value);
return GST_SDP_OK; return GST_SDP_OK;
@ -1526,6 +1570,8 @@ gst_sdp_attribute_set (GstSDPAttribute * attr, const gchar * key,
GstSDPResult GstSDPResult
gst_sdp_attribute_clear (GstSDPAttribute * attr) gst_sdp_attribute_clear (GstSDPAttribute * attr)
{ {
g_return_val_if_fail (attr != NULL, GST_SDP_EINVAL);
FREE_STRING (attr->key); FREE_STRING (attr->key);
FREE_STRING (attr->value); FREE_STRING (attr->value);
return GST_SDP_OK; return GST_SDP_OK;
@ -1568,6 +1614,9 @@ gst_sdp_message_get_attribute_val_n (const GstSDPMessage * msg,
{ {
guint i; guint i;
g_return_val_if_fail (msg != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
for (i = 0; i < msg->attributes->len; i++) { for (i = 0; i < msg->attributes->len; i++) {
GstSDPAttribute *attr; GstSDPAttribute *attr;
@ -1661,6 +1710,10 @@ gst_sdp_message_add_attribute (GstSDPMessage * msg, const gchar * key,
{ {
GstSDPAttribute attr; GstSDPAttribute attr;
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (key != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (value != NULL, GST_SDP_EINVAL);
gst_sdp_attribute_set (&attr, key, value); gst_sdp_attribute_set (&attr, key, value);
g_array_append_val (msg->attributes, attr); g_array_append_val (msg->attributes, attr);
@ -1704,6 +1757,9 @@ gst_sdp_message_add_media (GstSDPMessage * msg, GstSDPMedia * media)
guint len; guint len;
GstSDPMedia *nmedia; GstSDPMedia *nmedia;
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
len = msg->medias->len; len = msg->medias->len;
g_array_set_size (msg->medias, len + 1); g_array_set_size (msg->medias, len + 1);
nmedia = &g_array_index (msg->medias, GstSDPMedia, len); nmedia = &g_array_index (msg->medias, GstSDPMedia, len);
@ -1972,6 +2028,8 @@ gst_sdp_media_as_text (const GstSDPMedia * media)
const gchar * const gchar *
gst_sdp_media_get_media (const GstSDPMedia * media) gst_sdp_media_get_media (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, NULL);
return media->media; return media->media;
} }
@ -1987,6 +2045,9 @@ gst_sdp_media_get_media (const GstSDPMedia * media)
GstSDPResult GstSDPResult
gst_sdp_media_set_media (GstSDPMedia * media, const gchar * med) gst_sdp_media_set_media (GstSDPMedia * media, const gchar * med)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (med != NULL, GST_SDP_EINVAL);
g_free (media->media); g_free (media->media);
media->media = g_strdup (med); media->media = g_strdup (med);
@ -2004,6 +2065,8 @@ gst_sdp_media_set_media (GstSDPMedia * media, const gchar * med)
guint guint
gst_sdp_media_get_port (const GstSDPMedia * media) gst_sdp_media_get_port (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->port; return media->port;
} }
@ -2018,6 +2081,8 @@ gst_sdp_media_get_port (const GstSDPMedia * media)
guint guint
gst_sdp_media_get_num_ports (const GstSDPMedia * media) gst_sdp_media_get_num_ports (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->num_ports; return media->num_ports;
} }
@ -2034,6 +2099,8 @@ gst_sdp_media_get_num_ports (const GstSDPMedia * media)
GstSDPResult GstSDPResult
gst_sdp_media_set_port_info (GstSDPMedia * media, guint port, guint num_ports) gst_sdp_media_set_port_info (GstSDPMedia * media, guint port, guint num_ports)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
media->port = port; media->port = port;
media->num_ports = num_ports; media->num_ports = num_ports;
@ -2051,6 +2118,8 @@ gst_sdp_media_set_port_info (GstSDPMedia * media, guint port, guint num_ports)
const gchar * const gchar *
gst_sdp_media_get_proto (const GstSDPMedia * media) gst_sdp_media_get_proto (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, NULL);
return media->proto; return media->proto;
} }
@ -2066,6 +2135,8 @@ gst_sdp_media_get_proto (const GstSDPMedia * media)
GstSDPResult GstSDPResult
gst_sdp_media_set_proto (GstSDPMedia * media, const gchar * proto) gst_sdp_media_set_proto (GstSDPMedia * media, const gchar * proto)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_free (media->proto); g_free (media->proto);
media->proto = g_strdup (proto); media->proto = g_strdup (proto);
@ -2083,6 +2154,8 @@ gst_sdp_media_set_proto (GstSDPMedia * media, const gchar * proto)
guint guint
gst_sdp_media_formats_len (const GstSDPMedia * media) gst_sdp_media_formats_len (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->fmts->len; return media->fmts->len;
} }
@ -2098,6 +2171,8 @@ gst_sdp_media_formats_len (const GstSDPMedia * media)
const gchar * const gchar *
gst_sdp_media_get_format (const GstSDPMedia * media, guint idx) gst_sdp_media_get_format (const GstSDPMedia * media, guint idx)
{ {
g_return_val_if_fail (media != NULL, NULL);
if (idx >= media->fmts->len) if (idx >= media->fmts->len)
return NULL; return NULL;
return g_array_index (media->fmts, gchar *, idx); return g_array_index (media->fmts, gchar *, idx);
@ -2122,6 +2197,9 @@ gst_sdp_media_insert_format (GstSDPMedia * media, gint idx,
{ {
gchar *fmt; gchar *fmt;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (format != NULL, GST_SDP_EINVAL);
fmt = g_strdup (format); fmt = g_strdup (format);
if (idx == -1) if (idx == -1)
@ -2150,6 +2228,9 @@ gst_sdp_media_replace_format (GstSDPMedia * media, guint idx,
{ {
gchar **old; gchar **old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (format != NULL, GST_SDP_EINVAL);
old = &g_array_index (media->fmts, gchar *, idx); old = &g_array_index (media->fmts, gchar *, idx);
g_free (*old); g_free (*old);
*old = g_strdup (format); *old = g_strdup (format);
@ -2173,6 +2254,8 @@ gst_sdp_media_remove_format (GstSDPMedia * media, guint idx)
{ {
gchar **old; gchar **old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
old = &g_array_index (media->fmts, gchar *, idx); old = &g_array_index (media->fmts, gchar *, idx);
g_free (*old); g_free (*old);
g_array_remove_index (media->fmts, idx); g_array_remove_index (media->fmts, idx);
@ -2194,6 +2277,9 @@ gst_sdp_media_add_format (GstSDPMedia * media, const gchar * format)
{ {
gchar *fmt; gchar *fmt;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (format != NULL, GST_SDP_EINVAL);
fmt = g_strdup (format); fmt = g_strdup (format);
g_array_append_val (media->fmts, fmt); g_array_append_val (media->fmts, fmt);
@ -2212,6 +2298,8 @@ gst_sdp_media_add_format (GstSDPMedia * media, const gchar * format)
const gchar * const gchar *
gst_sdp_media_get_information (const GstSDPMedia * media) gst_sdp_media_get_information (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, NULL);
return media->information; return media->information;
} }
@ -2227,6 +2315,8 @@ gst_sdp_media_get_information (const GstSDPMedia * media)
GstSDPResult GstSDPResult
gst_sdp_media_set_information (GstSDPMedia * media, const gchar * information) gst_sdp_media_set_information (GstSDPMedia * media, const gchar * information)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_free (media->information); g_free (media->information);
media->information = g_strdup (information); media->information = g_strdup (information);
@ -2253,6 +2343,11 @@ GstSDPResult
gst_sdp_connection_set (GstSDPConnection * conn, const gchar * nettype, gst_sdp_connection_set (GstSDPConnection * conn, const gchar * nettype,
const gchar * addrtype, const gchar * address, guint ttl, guint addr_number) const gchar * addrtype, const gchar * address, guint ttl, guint addr_number)
{ {
g_return_val_if_fail (conn != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (nettype != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (addrtype != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (address != NULL, GST_SDP_EINVAL);
conn->nettype = g_strdup (nettype); conn->nettype = g_strdup (nettype);
conn->addrtype = g_strdup (addrtype); conn->addrtype = g_strdup (addrtype);
conn->address = g_strdup (address); conn->address = g_strdup (address);
@ -2274,6 +2369,8 @@ gst_sdp_connection_set (GstSDPConnection * conn, const gchar * nettype,
GstSDPResult GstSDPResult
gst_sdp_connection_clear (GstSDPConnection * conn) gst_sdp_connection_clear (GstSDPConnection * conn)
{ {
g_return_val_if_fail (conn != NULL, GST_SDP_EINVAL);
FREE_STRING (conn->nettype); FREE_STRING (conn->nettype);
FREE_STRING (conn->addrtype); FREE_STRING (conn->addrtype);
FREE_STRING (conn->address); FREE_STRING (conn->address);
@ -2294,6 +2391,8 @@ gst_sdp_connection_clear (GstSDPConnection * conn)
guint guint
gst_sdp_media_connections_len (const GstSDPMedia * media) gst_sdp_media_connections_len (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->connections->len; return media->connections->len;
} }
@ -2309,6 +2408,9 @@ gst_sdp_media_connections_len (const GstSDPMedia * media)
const GstSDPConnection * const GstSDPConnection *
gst_sdp_media_get_connection (const GstSDPMedia * media, guint idx) gst_sdp_media_get_connection (const GstSDPMedia * media, guint idx)
{ {
g_return_val_if_fail (media != NULL, NULL);
g_return_val_if_fail (idx < media->connections->len, NULL);
return &g_array_index (media->connections, GstSDPConnection, idx); return &g_array_index (media->connections, GstSDPConnection, idx);
} }
@ -2329,6 +2431,11 @@ GstSDPResult
gst_sdp_media_insert_connection (GstSDPMedia * media, gint idx, gst_sdp_media_insert_connection (GstSDPMedia * media, gint idx,
GstSDPConnection * conn) GstSDPConnection * conn)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (conn != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx == -1
|| idx < media->connections->len, GST_SDP_EINVAL);
if (idx == -1) if (idx == -1)
g_array_append_val (media->connections, *conn); g_array_append_val (media->connections, *conn);
else else
@ -2355,6 +2462,10 @@ gst_sdp_media_replace_connection (GstSDPMedia * media, guint idx,
{ {
GstSDPConnection *old; GstSDPConnection *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (conn != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->connections->len, GST_SDP_EINVAL);
old = &g_array_index (media->connections, GstSDPConnection, idx); old = &g_array_index (media->connections, GstSDPConnection, idx);
gst_sdp_connection_clear (old); gst_sdp_connection_clear (old);
*old = *conn; *old = *conn;
@ -2378,6 +2489,9 @@ gst_sdp_media_remove_connection (GstSDPMedia * media, guint idx)
{ {
GstSDPConnection *old; GstSDPConnection *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->connections->len, GST_SDP_EINVAL);
old = &g_array_index (media->connections, GstSDPConnection, idx); old = &g_array_index (media->connections, GstSDPConnection, idx);
gst_sdp_connection_clear (old); gst_sdp_connection_clear (old);
g_array_remove_index (media->connections, idx); g_array_remove_index (media->connections, idx);
@ -2405,6 +2519,11 @@ gst_sdp_media_add_connection (GstSDPMedia * media, const gchar * nettype,
{ {
GstSDPConnection conn; GstSDPConnection conn;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (nettype != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (addrtype != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (address != NULL, GST_SDP_EINVAL);
gst_sdp_connection_set (&conn, nettype, addrtype, address, ttl, addr_number); gst_sdp_connection_set (&conn, nettype, addrtype, address, ttl, addr_number);
g_array_append_val (media->connections, conn); g_array_append_val (media->connections, conn);
@ -2422,6 +2541,8 @@ gst_sdp_media_add_connection (GstSDPMedia * media, const gchar * nettype,
guint guint
gst_sdp_media_bandwidths_len (const GstSDPMedia * media) gst_sdp_media_bandwidths_len (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->bandwidths->len; return media->bandwidths->len;
} }
@ -2437,6 +2558,8 @@ gst_sdp_media_bandwidths_len (const GstSDPMedia * media)
const GstSDPBandwidth * const GstSDPBandwidth *
gst_sdp_media_get_bandwidth (const GstSDPMedia * media, guint idx) gst_sdp_media_get_bandwidth (const GstSDPMedia * media, guint idx)
{ {
g_return_val_if_fail (media != NULL, NULL);
return &g_array_index (media->bandwidths, GstSDPBandwidth, idx); return &g_array_index (media->bandwidths, GstSDPBandwidth, idx);
} }
@ -2457,6 +2580,11 @@ GstSDPResult
gst_sdp_media_insert_bandwidth (GstSDPMedia * media, gint idx, gst_sdp_media_insert_bandwidth (GstSDPMedia * media, gint idx,
GstSDPBandwidth * bw) GstSDPBandwidth * bw)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (bw != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx == -1
|| idx < media->bandwidths->len, GST_SDP_EINVAL);
if (idx == -1) if (idx == -1)
g_array_append_val (media->bandwidths, *bw); g_array_append_val (media->bandwidths, *bw);
else else
@ -2482,6 +2610,9 @@ gst_sdp_media_replace_bandwidth (GstSDPMedia * media, guint idx,
GstSDPBandwidth * bw) GstSDPBandwidth * bw)
{ {
GstSDPBandwidth *old; GstSDPBandwidth *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (bw != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->bandwidths->len, GST_SDP_EINVAL);
old = &g_array_index (media->bandwidths, GstSDPBandwidth, idx); old = &g_array_index (media->bandwidths, GstSDPBandwidth, idx);
gst_sdp_bandwidth_clear (old); gst_sdp_bandwidth_clear (old);
@ -2506,6 +2637,9 @@ gst_sdp_media_remove_bandwidth (GstSDPMedia * media, guint idx)
{ {
GstSDPBandwidth *old; GstSDPBandwidth *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->bandwidths->len, GST_SDP_EINVAL);
old = &g_array_index (media->bandwidths, GstSDPBandwidth, idx); old = &g_array_index (media->bandwidths, GstSDPBandwidth, idx);
gst_sdp_bandwidth_clear (old); gst_sdp_bandwidth_clear (old);
g_array_remove_index (media->bandwidths, idx); g_array_remove_index (media->bandwidths, idx);
@ -2529,6 +2663,9 @@ gst_sdp_media_add_bandwidth (GstSDPMedia * media, const gchar * bwtype,
{ {
GstSDPBandwidth bw; GstSDPBandwidth bw;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (bwtype != NULL, GST_SDP_EINVAL);
gst_sdp_bandwidth_set (&bw, bwtype, bandwidth); gst_sdp_bandwidth_set (&bw, bwtype, bandwidth);
g_array_append_val (media->bandwidths, bw); g_array_append_val (media->bandwidths, bw);
@ -2549,6 +2686,8 @@ GstSDPResult
gst_sdp_media_set_key (GstSDPMedia * media, const gchar * type, gst_sdp_media_set_key (GstSDPMedia * media, const gchar * type,
const gchar * data) const gchar * data)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_free (media->key.type); g_free (media->key.type);
media->key.type = g_strdup (type); media->key.type = g_strdup (type);
g_free (media->key.data); g_free (media->key.data);
@ -2568,6 +2707,8 @@ gst_sdp_media_set_key (GstSDPMedia * media, const gchar * type,
const GstSDPKey * const GstSDPKey *
gst_sdp_media_get_key (const GstSDPMedia * media) gst_sdp_media_get_key (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, NULL);
return &media->key; return &media->key;
} }
@ -2582,6 +2723,8 @@ gst_sdp_media_get_key (const GstSDPMedia * media)
guint guint
gst_sdp_media_attributes_len (const GstSDPMedia * media) gst_sdp_media_attributes_len (const GstSDPMedia * media)
{ {
g_return_val_if_fail (media != NULL, 0);
return media->attributes->len; return media->attributes->len;
} }
@ -2601,6 +2744,10 @@ gst_sdp_media_add_attribute (GstSDPMedia * media, const gchar * key,
{ {
GstSDPAttribute attr; GstSDPAttribute attr;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (key != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (value != NULL, GST_SDP_EINVAL);
gst_sdp_attribute_set (&attr, key, value); gst_sdp_attribute_set (&attr, key, value);
g_array_append_val (media->attributes, attr); g_array_append_val (media->attributes, attr);
@ -2619,6 +2766,9 @@ gst_sdp_media_add_attribute (GstSDPMedia * media, const gchar * key,
const GstSDPAttribute * const GstSDPAttribute *
gst_sdp_media_get_attribute (const GstSDPMedia * media, guint idx) gst_sdp_media_get_attribute (const GstSDPMedia * media, guint idx)
{ {
g_return_val_if_fail (media != NULL, NULL);
g_return_val_if_fail (idx < media->attributes->len, NULL);
return &g_array_index (media->attributes, GstSDPAttribute, idx); return &g_array_index (media->attributes, GstSDPAttribute, idx);
} }
@ -2638,6 +2788,9 @@ gst_sdp_media_get_attribute_val_n (const GstSDPMedia * media, const gchar * key,
{ {
guint i; guint i;
g_return_val_if_fail (media != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
for (i = 0; i < media->attributes->len; i++) { for (i = 0; i < media->attributes->len; i++) {
GstSDPAttribute *attr; GstSDPAttribute *attr;
@ -2664,6 +2817,9 @@ gst_sdp_media_get_attribute_val_n (const GstSDPMedia * media, const gchar * key,
const gchar * const gchar *
gst_sdp_media_get_attribute_val (const GstSDPMedia * media, const gchar * key) gst_sdp_media_get_attribute_val (const GstSDPMedia * media, const gchar * key)
{ {
g_return_val_if_fail (media != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
return gst_sdp_media_get_attribute_val_n (media, key, 0); return gst_sdp_media_get_attribute_val_n (media, key, 0);
} }
@ -2684,6 +2840,11 @@ GstSDPResult
gst_sdp_media_insert_attribute (GstSDPMedia * media, gint idx, gst_sdp_media_insert_attribute (GstSDPMedia * media, gint idx,
GstSDPAttribute * attr) GstSDPAttribute * attr)
{ {
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (attr != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx == -1
|| idx < media->attributes->len, GST_SDP_EINVAL);
if (idx == -1) if (idx == -1)
g_array_append_val (media->attributes, *attr); g_array_append_val (media->attributes, *attr);
else else
@ -2710,6 +2871,10 @@ gst_sdp_media_replace_attribute (GstSDPMedia * media, guint idx,
{ {
GstSDPAttribute *old; GstSDPAttribute *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (attr != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->attributes->len, GST_SDP_EINVAL);
old = &g_array_index (media->attributes, GstSDPAttribute, idx); old = &g_array_index (media->attributes, GstSDPAttribute, idx);
gst_sdp_attribute_clear (old); gst_sdp_attribute_clear (old);
*old = *attr; *old = *attr;
@ -2732,6 +2897,8 @@ GstSDPResult
gst_sdp_media_remove_attribute (GstSDPMedia * media, guint idx) gst_sdp_media_remove_attribute (GstSDPMedia * media, guint idx)
{ {
GstSDPAttribute *old; GstSDPAttribute *old;
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (idx < media->attributes->len, GST_SDP_EINVAL);
old = &g_array_index (media->attributes, GstSDPAttribute, idx); old = &g_array_index (media->attributes, GstSDPAttribute, idx);
gst_sdp_attribute_clear (old); gst_sdp_attribute_clear (old);
@ -3370,6 +3537,8 @@ gst_sdp_media_get_caps_from_media (const GstSDPMedia * media, gint pt)
gint payload = 0; gint payload = 0;
gboolean ret; gboolean ret;
g_return_val_if_fail (media != NULL, NULL);
/* get and parse rtpmap */ /* get and parse rtpmap */
rtpmap = gst_sdp_get_attribute_for_pt (media, "rtpmap", pt); rtpmap = gst_sdp_get_attribute_for_pt (media, "rtpmap", pt);