osmo_trau_frame_encode(): Check for sufficiently sized output buffer

Change-Id: Ie14399b2271aba9ff81f62d593a0ddd9d3e83d98
This commit is contained in:
Harald Welte 2020-08-02 16:01:14 +02:00
parent dd9ee98d7e
commit 95e2dfbc83
1 changed files with 37 additions and 0 deletions

View File

@ -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: