diff options
author | Harald Welte <laforge@osmocom.org> | 2020-08-02 16:01:14 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2020-08-03 02:29:21 +0200 |
commit | 95e2dfbc83437ddab54f7882edfd0fe79b767ba9 (patch) | |
tree | 3408e414e4541f90274db6d6afa2ed43935a0706 | |
parent | dd9ee98d7ee8713c701292d04efe98dd53410de4 (diff) |
osmo_trau_frame_encode(): Check for sufficiently sized output buffer
Change-Id: Ie14399b2271aba9ff81f62d593a0ddd9d3e83d98
-rw-r--r-- | src/trau/trau_frame.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/trau/trau_frame.c b/src/trau/trau_frame.c index ea63938..0a8faf9 100644 --- a/src/trau/trau_frame.c +++ b/src/trau/trau_frame.c @@ -1223,6 +1223,43 @@ static int encode8_oam(ubit_t *trau_bits, const struct osmo_trau_frame *fr) * \return 0 number of unpacked output bits generated; negative in case of error */ int osmo_trau_frame_encode(ubit_t *bits, size_t n_bits, const struct osmo_trau_frame *fr) { + /* check for sufficient space provided by caller in output buffer */ + switch (fr->type) { + case OSMO_TRAU16_FT_FR: + case OSMO_TRAU16_FT_EFR: + case OSMO_TRAU16_FT_HR: + case OSMO_TRAU16_FT_AMR: + /* timing alignment may happen: increased space requirement */ + if (n_bits < 2 * 40 * 8 - 1) + return -ENOSPC; + break; + case OSMO_TRAU16_FT_OAM: + case OSMO_TRAU16_FT_IDLE: + case OSMO_TRAU16_FT_DATA_HR: + case OSMO_TRAU16_FT_DATA: + case OSMO_TRAU16_FT_D145_SYNC: + case OSMO_TRAU16_FT_EDATA: + if (n_bits < 1 * 40 * 8) + return -ENOSPC; + break; + case OSMO_TRAU8_SPEECH: + case OSMO_TRAU8_AMR_LOW: + case OSMO_TRAU8_AMR_6k7: + case OSMO_TRAU8_AMR_7k4: + /* timing alignment may happen: increased space requirement */ + if (n_bits < 2 * 20 * 8 - 1) + return -ENOSPC; + case OSMO_TRAU8_DATA: + case OSMO_TRAU8_OAM: + if (n_bits < 1 * 20 * 8) + return -ENOSPC; + break; + case OSMO_TRAU_FT_NONE: + break; + default: + return -EINVAL; + } + switch (fr->type) { case OSMO_TRAU16_FT_FR: case OSMO_TRAU16_FT_EFR: |