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);
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;
}
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;
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
a2dp_config_process_set_config(role, connection);
#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);
}
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);
uint8_t channels_bitmap = 0;
switch (configuration->channels){
@ -1642,13 +1642,14 @@ void avdtp_config_mpeg_aac_store(uint8_t * config, const avdtp_configuration_mpe
channels_bitmap = 0x01;
break;
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[4] = (configuration->bit_rate >> 8) & 0xff;
config[5] = configuration->bit_rate & 0xff;
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) {

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_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_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_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);