Skip to content
Snippets Groups Projects
Commit 5a96e1fb authored by Kevin Harwell's avatar Kevin Harwell Committed by Gerrit Code Review
Browse files

Merge "res_format_attr_opus: Fix crash when fmtp contains spaces."

parents c796f00c 5c89604a
Branches
Tags
No related merge requests found
...@@ -101,27 +101,35 @@ static int opus_clone(const struct ast_format *src, struct ast_format *dst) ...@@ -101,27 +101,35 @@ static int opus_clone(const struct ast_format *src, struct ast_format *dst)
static void sdp_fmtp_get(const char *attributes, const char *name, int *attr) static void sdp_fmtp_get(const char *attributes, const char *name, int *attr)
{ {
const char *kvp = ""; const char *kvp = attributes;
int val; int val;
if (attributes && !(kvp = strstr(attributes, name))) { if (ast_strlen_zero(attributes)) {
return; return;
} }
/* /* This logic goes through each attribute in the fmtp line looking for the
* If the named attribute is not at the start of the given attributes, and * requested named attribute.
* the preceding character is not a space or semicolon then it's not the
* attribute we are looking for. It's an attribute with the name embedded
* within it (e.g. ptime in maxptime, stereo in sprop-stereo).
*/ */
if (kvp != attributes && *(kvp - 1) != ' ' && *(kvp - 1) != ';') { while (*kvp) {
/* Keep searching as it might still be in the attributes string */ /* Skip any preceeding blanks as some implementations separate attributes using spaces too */
sdp_fmtp_get(strchr(kvp, ';'), name, attr); kvp = ast_skip_blanks(kvp);
/*
* Otherwise it's a match, so retrieve the value and set the attribute. /* If we are at at the requested attribute get its value and return */
*/ if (!strncmp(kvp, name, strlen(name)) && kvp[strlen(name)] == '=') {
} else if (sscanf(kvp, "%*[^=]=%30d", &val) == 1) { if (sscanf(kvp, "%*[^=]=%30d", &val) == 1) {
*attr = val; *attr = val;
break;
}
}
/* Move on to the next attribute if possible */
kvp = strchr(kvp, ';');
if (!kvp) {
break;
}
kvp++;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment