avdtp_util: validate channel count

This commit is contained in:
Milanka Ringwald 2024-12-04 17:42:02 +01:00 committed by Matthias Ringwald
parent 1da1861527
commit c83b8b89db
3 changed files with 10 additions and 6 deletions

View File

@ -987,13 +987,16 @@ uint8_t a2dp_config_process_set_mpeg_aac(avdtp_role_t role, uint16_t a2dp_cid,
a2dp_config_process_t * config_process = a2dp_config_process_for_role(role, connection); a2dp_config_process_t * config_process = a2dp_config_process_for_role(role, connection);
uint8_t status = a2dp_config_process_config_init(role, connection, local_seid, remote_seid, AVDTP_CODEC_MPEG_2_4_AAC); uint8_t status = a2dp_config_process_config_init(role, connection, local_seid, remote_seid, AVDTP_CODEC_MPEG_2_4_AAC);
if (status != 0) { if (status != ERROR_CODE_SUCCESS) {
return status; return status;
} }
config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information = (uint8_t *) config_process->local_stream_endpoint->media_codec_info; config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information = (uint8_t *) config_process->local_stream_endpoint->media_codec_info;
config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information_len = 6; config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information_len = 6;
avdtp_config_mpeg_aac_store(config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information, configuration); status = avdtp_config_mpeg_aac_store(config_process->local_stream_endpoint->remote_configuration.media_codec.media_codec_information, configuration);
if (status != ERROR_CODE_SUCCESS){
return status;
}
#ifdef ENABLE_A2DP_EXPLICIT_CONFIG #ifdef ENABLE_A2DP_EXPLICIT_CONFIG
a2dp_config_process_set_config(role, connection); a2dp_config_process_set_config(role, connection);
#endif #endif

View File

@ -1625,7 +1625,7 @@ void avdtp_config_mpeg_aac_set_sampling_frequency(uint8_t * config, uint16_t sam
config[2] = ((sampling_frequency_bitmap & 0x0f) << 4) | (config[2] & 0x0f); config[2] = ((sampling_frequency_bitmap & 0x0f) << 4) | (config[2] & 0x0f);
} }
void avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpeg_aac_t * configuration) { uint8_t avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpeg_aac_t * configuration) {
config[0] = (1 << (7 -(configuration->object_type - AVDTP_AAC_MPEG2_LC))) | (configuration->drc?1u:0u); config[0] = (1 << (7 -(configuration->object_type - AVDTP_AAC_MPEG2_LC))) | (configuration->drc?1u:0u);
uint8_t channels_bitmap = 0; uint8_t channels_bitmap = 0;
switch (configuration->channels){ switch (configuration->channels){
@ -1642,13 +1642,14 @@ void avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpe
channels_bitmap = 0x01; channels_bitmap = 0x01;
break; break;
default: default:
break; return ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE;
} }
config[2] = channels_bitmap & 0x0F; config[2] = channels_bitmap;
config[3] = ((configuration->vbr & 0x01) << 7) | ((configuration->bit_rate >> 16) & 0x7f); config[3] = ((configuration->vbr & 0x01) << 7) | ((configuration->bit_rate >> 16) & 0x7f);
config[4] = (configuration->bit_rate >> 8) & 0xff; config[4] = (configuration->bit_rate >> 8) & 0xff;
config[5] = configuration->bit_rate & 0xff; config[5] = configuration->bit_rate & 0xff;
avdtp_config_mpeg_aac_set_sampling_frequency(config, configuration->sampling_frequency); avdtp_config_mpeg_aac_set_sampling_frequency(config, configuration->sampling_frequency);
return ERROR_CODE_SUCCESS;
} }
void avdtp_config_atrac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz) { void avdtp_config_atrac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz) {

View File

@ -132,7 +132,7 @@ void avdtp_config_sbc_store(uint8_t * config, const avdtp_configuration_sbc_t *
void avdtp_config_mpeg_audio_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz); void avdtp_config_mpeg_audio_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz);
void avdtp_config_mpeg_audio_store(uint8_t * config, const avdtp_configuration_mpeg_audio_t * configuration); void avdtp_config_mpeg_audio_store(uint8_t * config, const avdtp_configuration_mpeg_audio_t * configuration);
void avdtp_config_mpeg_aac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz); void avdtp_config_mpeg_aac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz);
void avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpeg_aac_t * configuration); uint8_t avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpeg_aac_t * configuration);
void avdtp_config_atrac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz); void avdtp_config_atrac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz);
void avdtp_config_atrac_store(uint8_t * config, const avdtp_configuration_atrac_t * configuration); void avdtp_config_atrac_store(uint8_t * config, const avdtp_configuration_atrac_t * configuration);
void avdtp_config_mpegd_usac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz); void avdtp_config_mpegd_usac_set_sampling_frequency(uint8_t * config, uint16_t sampling_frequency_hz);