mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-18 07:48:14 +00:00
Merge "res_format_attr_opus: Fix crash when fmtp contains spaces."
This commit is contained in:
@@ -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)
|
||||
{
|
||||
const char *kvp = "";
|
||||
const char *kvp = attributes;
|
||||
int val;
|
||||
|
||||
if (attributes && !(kvp = strstr(attributes, name))) {
|
||||
if (ast_strlen_zero(attributes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the named attribute is not at the start of the given attributes, and
|
||||
* 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).
|
||||
/* This logic goes through each attribute in the fmtp line looking for the
|
||||
* requested named attribute.
|
||||
*/
|
||||
if (kvp != attributes && *(kvp - 1) != ' ' && *(kvp - 1) != ';') {
|
||||
/* Keep searching as it might still be in the attributes string */
|
||||
sdp_fmtp_get(strchr(kvp, ';'), name, attr);
|
||||
/*
|
||||
* Otherwise it's a match, so retrieve the value and set the attribute.
|
||||
*/
|
||||
} else if (sscanf(kvp, "%*[^=]=%30d", &val) == 1) {
|
||||
*attr = val;
|
||||
while (*kvp) {
|
||||
/* Skip any preceeding blanks as some implementations separate attributes using spaces too */
|
||||
kvp = ast_skip_blanks(kvp);
|
||||
|
||||
/* If we are at at the requested attribute get its value and return */
|
||||
if (!strncmp(kvp, name, strlen(name)) && kvp[strlen(name)] == '=') {
|
||||
if (sscanf(kvp, "%*[^=]=%30d", &val) == 1) {
|
||||
*attr = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Move on to the next attribute if possible */
|
||||
kvp = strchr(kvp, ';');
|
||||
if (!kvp) {
|
||||
break;
|
||||
}
|
||||
|
||||
kvp++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user