diff options
author | Harald Welte <laforge@osmocom.org> | 2020-06-20 20:50:52 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2020-07-01 09:50:01 +0200 |
commit | 5613b7d850d1d148908ac6a27542fa84b1a94a13 (patch) | |
tree | 13df500232a12d267af12fd8cca9c70c021d17aa | |
parent | f12d4240a07aca32cd91a3418d1b250a3443ce5d (diff) |
don't assert just because a broken RTP packet (wrong lenth) is received
Change-Id: I373308ed40614d29d9b578ddc056f27e20e4aa21
-rw-r--r-- | src/fmt_rtp_efr.c | 6 | ||||
-rw-r--r-- | src/fmt_rtp_hr_etsi.c | 6 | ||||
-rw-r--r-- | src/fmt_rtp_hr_ietf.c | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/src/fmt_rtp_efr.c b/src/fmt_rtp_efr.c index accfd4f..7afb1a3 100644 --- a/src/fmt_rtp_efr.c +++ b/src/fmt_rtp_efr.c @@ -52,7 +52,11 @@ rtp_efr_to_canon(uint8_t *dst, const uint8_t *src, unsigned int src_len) { int i; - assert(src_len == EFR_LEN); + /* broken RTP frames may be short; substitute empty frame */ + if (src_len != EFR_LEN) { + memset(dst, 0, EFR_CANON_LEN); + return EFR_CANON_LEN; + } for (i=0; i<(EFR_LEN-1); i++) dst[i] = (src[i] << 4) | (src[i+1] >> 4); diff --git a/src/fmt_rtp_hr_etsi.c b/src/fmt_rtp_hr_etsi.c index 9ed9b22..0b7e392 100644 --- a/src/fmt_rtp_hr_etsi.c +++ b/src/fmt_rtp_hr_etsi.c @@ -42,7 +42,11 @@ static int rtp_hr_etsi_to_canon(uint8_t *dst, const uint8_t *src, unsigned int src_len) { /* according to TS 101 318 */ - assert(src_len == HR_CANON_LEN); + /* broken RTP frames may be short; substitute empty frame */ + if (src_len != HR_CANON_LEN) { + memset(dst, 0, HR_CANON_LEN); + return HR_CANON_LEN; + } memcpy(dst, src, src_len); return HR_CANON_LEN; diff --git a/src/fmt_rtp_hr_ietf.c b/src/fmt_rtp_hr_ietf.c index 4ee548f..a840d4b 100644 --- a/src/fmt_rtp_hr_ietf.c +++ b/src/fmt_rtp_hr_ietf.c @@ -60,7 +60,11 @@ static int rtp_hr_ietf_to_canon(uint8_t *dst, const uint8_t *src, unsigned int src_len) { /* according to RFC5993 */ - assert(src_len == HR_LEN); + /* broken RTP frames may be short; substitute empty frame */ + if (src_len != HR_LEN) { + memset(dst, 0, HR_LEN); + return HR_CANON_LEN; + } /* Remove ToC byte */ memcpy(dst, src+1, HR_CANON_LEN); |