avutil/encryption_info: Fix size calculation.

Found by Chrome's ClusterFuzz: https://crbug.com/873693

Signed-off-by: Jacob Trimble <modmaker@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
pull/293/merge
Jacob Trimble 6 years ago committed by Michael Niedermayer
parent f5559dd869
commit 67599812a3
  1. 6
      libavutil/encryption_info.c

@ -297,14 +297,14 @@ uint8_t *av_encryption_init_info_add_side_data(const AVEncryptionInitInfo *info,
temp_side_data_size = 4; temp_side_data_size = 4;
init_info_count = 0; init_info_count = 0;
for (cur_info = info; cur_info; cur_info = cur_info->next) { for (cur_info = info; cur_info; cur_info = cur_info->next) {
temp_side_data_size += (uint64_t)FF_ENCRYPTION_INIT_INFO_EXTRA + info->system_id_size + info->data_size; temp_side_data_size += (uint64_t)FF_ENCRYPTION_INIT_INFO_EXTRA + cur_info->system_id_size + cur_info->data_size;
if (init_info_count == UINT32_MAX || temp_side_data_size > UINT32_MAX) { if (init_info_count == UINT32_MAX || temp_side_data_size > UINT32_MAX) {
return NULL; return NULL;
} }
init_info_count++; init_info_count++;
if (info->num_key_ids) { if (cur_info->num_key_ids) {
temp_side_data_size += (uint64_t)info->num_key_ids * info->key_id_size; temp_side_data_size += (uint64_t)cur_info->num_key_ids * cur_info->key_id_size;
if (temp_side_data_size > UINT32_MAX) { if (temp_side_data_size > UINT32_MAX) {
return NULL; return NULL;
} }

Loading…
Cancel
Save