diff --git a/daemon/sdp.c b/daemon/sdp.c index f8603fa6b..8807c972c 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -119,7 +119,6 @@ struct sdp_attribute { param; /* "PCMA/8000" */ enum { - ATTR_INVALID = -1, ATTR_OTHER = 0, ATTR_RTCP, ATTR_CANDIDATE, @@ -445,7 +444,7 @@ static int parse_attribute_candidate(struct sdp_attribute *output) { return 0; } -static void parse_attribute(struct sdp_attribute *a) { +static int parse_attribute(struct sdp_attribute *a) { int ret; a->name = a->line_value; @@ -511,8 +510,7 @@ static void parse_attribute(struct sdp_attribute *a) { break; } - if (ret) - a->attr = ATTR_INVALID; + return ret; } int sdp_parse(str *body, GQueue *sessions) { @@ -604,7 +602,10 @@ int sdp_parse(str *body, GQueue *sessions) { attr->line_value.s = value; attr->line_value.len = line_end - value; - parse_attribute(attr); + if (parse_attribute(attr)) { + g_slice_free1(sizeof(*attr), attr); + break; + } attrs = media ? &media->attributes : &session->attributes; g_queue_push_tail(&attrs->list, attr);