Fix for OOB in parsing loud equalizer instruction in drc

am: 7e8303bbaa

Change-Id: I387d36f186d9669bd4318be1ea7fd9eb1b069560
This commit is contained in:
Ramesh Katuri 2018-10-29 11:47:25 -07:00 committed by android-build-merger
commit ba8cab6f2d
3 changed files with 30 additions and 13 deletions

View file

@ -1307,12 +1307,20 @@ WORD32 impd_parse_loud_eq_instructions(
temp = impd_read_bits_buf(it_bit_buff, 8);
if (it_bit_buff->error) return it_bit_buff->error;
/* Parsed but unused */
loud_eq_instructions->loudness_after_drc = (temp >> 7) & 0x01;
/* Parsed but unused */
loud_eq_instructions->loudness_after_eq = (temp >> 6) & 0x01;
/* Parsed but unused */
loud_eq_instructions->loud_eq_gain_sequence_count = temp & 0x3F;
if (loud_eq_instructions->loud_eq_gain_sequence_count >
LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX)
return UNEXPECTED_ERROR;
/* Section under for loop, Parsed but unused */
for (i = 0; i < loud_eq_instructions->loud_eq_gain_sequence_count; i++) {
temp = impd_read_bits_buf(it_bit_buff, 7);
if (it_bit_buff->error) return it_bit_buff->error;

View file

@ -2382,7 +2382,9 @@ impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
temp = impd_read_bits_buf(it_bit_buff, 6);
if (it_bit_buff->error) return it_bit_buff->error;
/* Parsed but unused */
loudness_info->true_peak_level_measurement_system = (temp >> 2) & 0xf;
/* Parsed but unused */
loudness_info->true_peak_level_reliability = temp & 3;
}

View file

@ -441,8 +441,8 @@ typedef struct {
FLOAT32 sample_peak_level;
WORD32 true_peak_level_present;
FLOAT32 true_peak_level;
WORD32 true_peak_level_measurement_system;
WORD32 true_peak_level_reliability;
WORD32 true_peak_level_measurement_system; /* Parsed but unused */
WORD32 true_peak_level_reliability; /* Parsed but unused */
WORD32 measurement_count;
ia_loudness_measure_struct loudness_measure[MEASUREMENT_COUNT_MAX];
} ia_loudness_info_struct;
@ -456,17 +456,24 @@ typedef struct {
WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
WORD32 eq_set_id_count;
WORD32 eq_set_id[EQ_SET_ID_COUNT_MAX];
WORD32 loudness_after_drc;
WORD32 loudness_after_eq;
WORD32 loud_eq_gain_sequence_count;
WORD32 gain_seq_idx[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 drc_characteristic_format_is_cicp[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 drc_characteristic[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 drc_characteristic_left_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 drc_characteristic_right_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 frequency_range_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
FLOAT32 loud_eq_scaling[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
FLOAT32 loud_eq_offset[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
WORD32 loudness_after_drc; /* Parsed but unused */
WORD32 loudness_after_eq; /* Parsed but unused */
WORD32 loud_eq_gain_sequence_count; /* Parsed but unused */
WORD32 gain_seq_idx[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
WORD32 drc_characteristic_format_is_cicp
[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
WORD32 drc_characteristic[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but
unused */
WORD32 drc_characteristic_left_index
[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
WORD32 drc_characteristic_right_index
[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
WORD32 frequency_range_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but
unused */
FLOAT32
loud_eq_scaling[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
FLOAT32
loud_eq_offset[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX]; /* Parsed but unused */
} ia_loud_eq_instructions_struct;
typedef struct {