diff --git a/src/lines/fmtp-line.spec.ts b/src/lines/fmtp-line.spec.ts index cd7189c..4e47fe4 100644 --- a/src/lines/fmtp-line.spec.ts +++ b/src/lines/fmtp-line.spec.ts @@ -27,6 +27,12 @@ describe('parseFmtpParams', () => { expect(Object.fromEntries(fmtpParams)).toStrictEqual({ '0-5': undefined }); // firefox RED fmtpParams = parseFmtpParams('a=fmtp:100 0-15,66,70'); expect(Object.fromEntries(fmtpParams)).toStrictEqual({ '0-15,66,70': undefined }); // telephone event + fmtpParams = parseFmtpParams('a=fmtp:45 profile=0;level-idx=19;tier=0;'); + expect(Object.fromEntries(fmtpParams)).toStrictEqual({ + 'level-idx': '19', + profile: '0', + tier: '0', + }); // semicolon at the end case }); it('exceptional case', async () => { expect.hasAssertions(); diff --git a/src/lines/fmtp-line.ts b/src/lines/fmtp-line.ts index 0c65521..c483ca9 100644 --- a/src/lines/fmtp-line.ts +++ b/src/lines/fmtp-line.ts @@ -37,8 +37,13 @@ export function parseFmtpParams(fmtpParams: string) { return fmtpObj; } + // Trailing semicolons are not technically allowed, but we've seen some occurrences and don't want to choke on them, so strip them here + // eslint-disable-next-line no-param-reassign + fmtpParams = fmtpParams.replace(/;$/, ''); + fmtpParams.split(';').forEach((param) => { const paramArr = param && param.split('='); + if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) { throw new Error(`Fmtp params is invalid with ${fmtpParams}`); }