Browse Source

MT#63082 rtcp parsing: improvements

Add `EXTRACT_NETWORK_ADDRESS_ATTR`
for proper error alias handling,
otherwise just quits with no attr type change.

Change-Id: Iacea9350503b68962a3c233df9126102b67d3b8b
pull/1967/head
Donat Zenichev 5 months ago
parent
commit
f2c89227e5
1 changed files with 8 additions and 5 deletions
  1. +8
    -5
      daemon/sdp.c

+ 8
- 5
daemon/sdp.c View File

@ -489,6 +489,9 @@ static bool parse_address(struct network_address *address) {
#define EXTRACT_NETWORK_ADDRESS(field) \ #define EXTRACT_NETWORK_ADDRESS(field) \
do { EXTRACT_NETWORK_ADDRESS_NP(field); \ do { EXTRACT_NETWORK_ADDRESS_NP(field); \
if (!parse_address(&output->field)) return -1; } while (0) if (!parse_address(&output->field)) return -1; } while (0)
#define EXTRACT_NETWORK_ADDRESS_ATTR(field) \
do { EXTRACT_NETWORK_ADDRESS_NP(field); \
if (!parse_address(&output->field)) goto error; } while (0)
#define EXTRACT_NETWORK_ADDRESS_NF(field) \ #define EXTRACT_NETWORK_ADDRESS_NF(field) \
do { EXTRACT_NETWORK_ADDRESS_NP(field); \ do { EXTRACT_NETWORK_ADDRESS_NP(field); \
if (!parse_address(&output->field)) { \ if (!parse_address(&output->field)) { \
@ -735,26 +738,26 @@ error:
static int parse_attribute_rtcp(struct sdp_attribute *output) { static int parse_attribute_rtcp(struct sdp_attribute *output) {
if (!output->strs.value.s) if (!output->strs.value.s)
goto err;
goto error;
output->attr = ATTR_RTCP; output->attr = ATTR_RTCP;
PARSE_INIT; PARSE_INIT;
str portnum; str portnum;
if (!str_token_sep(&portnum, value_str, ' ')) if (!str_token_sep(&portnum, value_str, ' '))
goto err;
goto error;
output->rtcp.port_num = str_to_i(&portnum, 0); output->rtcp.port_num = str_to_i(&portnum, 0);
if (output->rtcp.port_num <= 0 || output->rtcp.port_num > 0xffff) { if (output->rtcp.port_num <= 0 || output->rtcp.port_num > 0xffff) {
output->rtcp.port_num = 0; output->rtcp.port_num = 0;
goto err;
goto error;
} }
if (value_str->len) if (value_str->len)
EXTRACT_NETWORK_ADDRESS(rtcp.address);
EXTRACT_NETWORK_ADDRESS_ATTR(rtcp.address);
return 0; return 0;
err:
error:
ilog(LOG_WARN, "Failed to parse a=rtcp attribute, ignoring"); ilog(LOG_WARN, "Failed to parse a=rtcp attribute, ignoring");
output->attr = ATTR_IGNORE; output->attr = ATTR_IGNORE;
return -1; return -1;


Loading…
Cancel
Save