Fix -Wshorten-64-to-32 errors in usage table code
(This is a merge of http://go/wvgerrit/134312.) This patch fixes code that would trigger -Wshorten-64-to-32 by implicitly narrowing a variable from 64 to 32 bits. Most of the time, it does this by making the implicit conversion explicit. There are a lot of these places in the usage table code because we always use uint32_t as the type of a usage entry index, but much of the code that interacts with the usage table system naturally wants to use size_t. Bug: 194971260 Test: OEMCrypto unit tests Test: x86-64 platform tests Change-Id: I3923af40715efe367955a194a9e33be3e9cb014c
This commit is contained in:
committed by
John Bruce
parent
ef792a4aca
commit
1447eba7bc
@@ -2141,7 +2141,7 @@ bool CryptoSession::GetMaximumUsageTableEntries(SecurityLevel security_level,
|
||||
});
|
||||
// Record the number of entries into the metrics.
|
||||
metrics_->oemcrypto_maximum_usage_table_header_size_.Record(
|
||||
*number_of_entries);
|
||||
static_cast<uint32_t>(*number_of_entries));
|
||||
|
||||
if (*number_of_entries == 0) {
|
||||
// Special value, indicating that the table size is not directly
|
||||
|
||||
@@ -804,7 +804,8 @@ bool DeviceFiles::RetrieveLicense(const std::string& key_set_id,
|
||||
license.app_parameters(i).value();
|
||||
}
|
||||
license_data->usage_entry = license.usage_entry();
|
||||
license_data->usage_entry_number = license.usage_entry_number();
|
||||
license_data->usage_entry_number =
|
||||
static_cast<uint32_t>(license.usage_entry_number());
|
||||
|
||||
if (!license.has_drm_certificate()) {
|
||||
license_data->drm_certificate.clear();
|
||||
@@ -951,8 +952,8 @@ bool DeviceFiles::ListUsageIds(
|
||||
if (ksids != nullptr) ksids->clear();
|
||||
if (provider_session_tokens != nullptr) provider_session_tokens->clear();
|
||||
|
||||
size_t num_records = file.usage_info().sessions_size();
|
||||
for (size_t i = 0; i < num_records; ++i) {
|
||||
const int num_records = file.usage_info().sessions_size();
|
||||
for (int i = 0; i < num_records; ++i) {
|
||||
if ((ksids != nullptr) &&
|
||||
!file.usage_info().sessions(i).key_set_id().empty()) {
|
||||
ksids->push_back(file.usage_info().sessions(i).key_set_id());
|
||||
@@ -983,8 +984,8 @@ bool DeviceFiles::GetProviderSessionToken(const std::string& app_id,
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t num_records = file.usage_info().sessions_size();
|
||||
for (size_t i = 0; i < num_records; ++i) {
|
||||
const int num_records = static_cast<int>(file.usage_info().sessions_size());
|
||||
for (int i = 0; i < num_records; ++i) {
|
||||
if (file.usage_info().sessions(i).key_set_id() == key_set_id) {
|
||||
*provider_session_token = file.usage_info().sessions(i).token();
|
||||
return true;
|
||||
@@ -1130,8 +1131,8 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& usage_info_file_name,
|
||||
*license_request = file.usage_info().sessions(index).license_request();
|
||||
*license = file.usage_info().sessions(index).license();
|
||||
*usage_entry = file.usage_info().sessions(index).usage_entry();
|
||||
*usage_entry_number =
|
||||
file.usage_info().sessions(index).usage_entry_number();
|
||||
*usage_entry_number = static_cast<uint32_t>(
|
||||
file.usage_info().sessions(index).usage_entry_number());
|
||||
|
||||
if (!file.usage_info().sessions(index).has_drm_certificate_id()) {
|
||||
drm_certificate->clear();
|
||||
@@ -1180,8 +1181,8 @@ bool DeviceFiles::RetrieveUsageInfoByKeySetId(
|
||||
*license_request = file.usage_info().sessions(index).license_request();
|
||||
*license = file.usage_info().sessions(index).license();
|
||||
*usage_entry = file.usage_info().sessions(index).usage_entry();
|
||||
*usage_entry_number =
|
||||
file.usage_info().sessions(index).usage_entry_number();
|
||||
*usage_entry_number = static_cast<uint32_t>(
|
||||
file.usage_info().sessions(index).usage_entry_number());
|
||||
|
||||
if (!file.usage_info().sessions(index).has_drm_certificate_id()) {
|
||||
drm_certificate->clear();
|
||||
@@ -1319,8 +1320,8 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& usage_info_file_name,
|
||||
(*usage_data)[i].license = file.usage_info().sessions(i).license();
|
||||
(*usage_data)[i].key_set_id = file.usage_info().sessions(i).key_set_id();
|
||||
(*usage_data)[i].usage_entry = file.usage_info().sessions(i).usage_entry();
|
||||
(*usage_data)[i].usage_entry_number =
|
||||
file.usage_info().sessions(i).usage_entry_number();
|
||||
(*usage_data)[i].usage_entry_number = static_cast<uint32_t>(
|
||||
file.usage_info().sessions(i).usage_entry_number());
|
||||
|
||||
if (!file.usage_info().sessions(i).has_drm_certificate_id()) {
|
||||
(*usage_data)[i].drm_certificate.clear();
|
||||
@@ -1361,8 +1362,8 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& usage_info_file_name,
|
||||
usage_data->license = file.usage_info().sessions(index).license();
|
||||
usage_data->key_set_id = file.usage_info().sessions(index).key_set_id();
|
||||
usage_data->usage_entry = file.usage_info().sessions(index).usage_entry();
|
||||
usage_data->usage_entry_number =
|
||||
file.usage_info().sessions(index).usage_entry_number();
|
||||
usage_data->usage_entry_number = static_cast<uint32_t>(
|
||||
file.usage_info().sessions(index).usage_entry_number());
|
||||
|
||||
if (!file.usage_info().sessions(index).has_drm_certificate_id()) {
|
||||
usage_data->drm_certificate.clear();
|
||||
|
||||
@@ -636,13 +636,14 @@ CdmResponseType UsageTableHeader::RefitTable(
|
||||
CryptoSession* const crypto_session) {
|
||||
// Remove all unoccupied entries at end of the table.
|
||||
uint32_t entries_to_remove = 0;
|
||||
for (uint32_t i = 0; i < usage_entry_info_.size(); i++) {
|
||||
const uint32_t usage_entry_number = usage_entry_info_.size() - i - 1;
|
||||
const uint32_t old_size = static_cast<uint32_t>(usage_entry_info_.size());
|
||||
for (uint32_t i = 0; i < old_size; i++) {
|
||||
const uint32_t usage_entry_number = old_size - i - 1;
|
||||
if (!IsEntryUnoccupied(usage_entry_number)) break;
|
||||
++entries_to_remove;
|
||||
}
|
||||
if (entries_to_remove == 0) return NO_ERROR;
|
||||
const uint32_t new_size = usage_entry_info_.size() - entries_to_remove;
|
||||
const uint32_t new_size = old_size - entries_to_remove;
|
||||
const CdmResponseType status = crypto_session->ShrinkUsageTableHeader(
|
||||
requested_security_level_, new_size, &usage_table_header_);
|
||||
if (status == SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE) {
|
||||
@@ -884,7 +885,8 @@ CdmResponseType UsageTableHeader::Shrink(
|
||||
"Cannot delete more entries than the table size, reducing to current "
|
||||
"table size: table_size = %zu, number_to_delete = %u",
|
||||
usage_entry_info_.size(), number_of_usage_entries_to_delete);
|
||||
number_of_usage_entries_to_delete = usage_entry_info_.size();
|
||||
number_of_usage_entries_to_delete =
|
||||
static_cast<uint32_t>(usage_entry_info_.size());
|
||||
}
|
||||
|
||||
if (number_of_usage_entries_to_delete == 0) return NO_ERROR;
|
||||
@@ -898,8 +900,8 @@ CdmResponseType UsageTableHeader::Shrink(
|
||||
crypto_session = scoped_crypto_session.get();
|
||||
}
|
||||
|
||||
const size_t new_size =
|
||||
usage_entry_info_.size() - number_of_usage_entries_to_delete;
|
||||
const uint32_t new_size = static_cast<uint32_t>(usage_entry_info_.size()) -
|
||||
number_of_usage_entries_to_delete;
|
||||
const CdmResponseType status = crypto_session->ShrinkUsageTableHeader(
|
||||
requested_security_level_, new_size, &usage_table_header_);
|
||||
|
||||
@@ -952,7 +954,8 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
entries_to_move.size() < entries_to_remove.size();
|
||||
++i) {
|
||||
// Search from the end of the table.
|
||||
const uint32_t entry_index = usage_entry_info_.size() - i - 1;
|
||||
const uint32_t entry_index =
|
||||
static_cast<uint32_t>(usage_entry_info_.size()) - i - 1;
|
||||
if (usage_entry_info_[entry_index].storage_type != kStorageTypeUnknown) {
|
||||
entries_to_move.push_back(entry_index);
|
||||
}
|
||||
@@ -963,7 +966,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
if (entries_to_move.empty()) {
|
||||
LOGD("No valid entries found, shrinking entire table: size = %zu",
|
||||
usage_entry_info_.size());
|
||||
return Shrink(metrics, usage_entry_info_.size());
|
||||
return Shrink(metrics, static_cast<uint32_t>(usage_entry_info_.size()));
|
||||
}
|
||||
|
||||
// Step 3: Ignore invalid entries that are after the last valid
|
||||
@@ -982,8 +985,9 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
// entry. In this case, no movement is required and the table can just
|
||||
// be shrunk to the last valid entry.
|
||||
if (entries_to_remove.empty()) {
|
||||
const size_t to_remove = usage_entry_info_.size() - last_valid_entry - 1;
|
||||
LOGD("Removing all entries after the last valid entry: count = %zu",
|
||||
const uint32_t to_remove =
|
||||
static_cast<uint32_t>(usage_entry_info_.size()) - last_valid_entry - 1;
|
||||
LOGD("Removing all entries after the last valid entry: count = %u",
|
||||
to_remove);
|
||||
return Shrink(metrics, to_remove);
|
||||
}
|
||||
@@ -1095,9 +1099,11 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
} // End while loop.
|
||||
|
||||
// Step 5: Find the new last valid entry.
|
||||
uint32_t new_last_valid_entry = usage_entry_info_.size();
|
||||
uint32_t new_last_valid_entry =
|
||||
static_cast<uint32_t>(usage_entry_info_.size());
|
||||
for (uint32_t i = 0; i < usage_entry_info_.size(); ++i) {
|
||||
const uint32_t entry_index = usage_entry_info_.size() - i - 1;
|
||||
const uint32_t entry_index =
|
||||
static_cast<uint32_t>(usage_entry_info_.size()) - i - 1;
|
||||
if (usage_entry_info_[entry_index].storage_type != kStorageTypeUnknown) {
|
||||
new_last_valid_entry = entry_index;
|
||||
break;
|
||||
@@ -1111,10 +1117,11 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
LOGD(
|
||||
"All entries have been invalidated, shrinking entire table: size = %zu",
|
||||
usage_entry_info_.size());
|
||||
return Shrink(metrics, usage_entry_info_.size());
|
||||
return Shrink(metrics, static_cast<uint32_t>(usage_entry_info_.size()));
|
||||
}
|
||||
|
||||
const size_t to_remove = usage_entry_info_.size() - new_last_valid_entry - 1;
|
||||
const uint32_t to_remove = static_cast<uint32_t>(usage_entry_info_.size()) -
|
||||
new_last_valid_entry - 1;
|
||||
|
||||
// Special case 6: It is possible that the last entry in the table
|
||||
// is valid and currently loaded in the table by another session.
|
||||
@@ -1127,7 +1134,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files,
|
||||
}
|
||||
|
||||
// Step 6: Shrink table to the new size.
|
||||
LOGD("Clean up complete, shrinking table: count = %zu", to_remove);
|
||||
LOGD("Clean up complete, shrinking table: count = %u", to_remove);
|
||||
return Shrink(metrics, to_remove);
|
||||
} // End Defrag().
|
||||
|
||||
@@ -1188,7 +1195,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
// end, all problematic licenses will be marked as invalid.
|
||||
std::vector<uint32_t> bad_license_file_entries;
|
||||
|
||||
for (size_t usage_entry_number = 0;
|
||||
for (uint32_t usage_entry_number = 0;
|
||||
usage_entry_number < usage_entry_info_.size(); ++usage_entry_number) {
|
||||
CdmUsageEntryInfo& usage_entry_info = usage_entry_info_[usage_entry_number];
|
||||
|
||||
@@ -1213,7 +1220,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
default: {
|
||||
LOGW("Unknown usage entry storage type: %d, usage_entry_number = %zu",
|
||||
LOGW("Unknown usage entry storage type: %d, usage_entry_number = %u",
|
||||
static_cast<int>(usage_entry_info.storage_type),
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
@@ -1221,7 +1228,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
}
|
||||
}
|
||||
if (!retrieve_response) {
|
||||
LOGW("Could not retrieve license message: usage_entry_number = %zu",
|
||||
LOGW("Could not retrieve license message: usage_entry_number = %u",
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
@@ -1229,7 +1236,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
|
||||
if (retrieved_entry_number != usage_entry_number) {
|
||||
LOGW(
|
||||
"Usage entry number mismatched: usage_entry_number = %zu, "
|
||||
"Usage entry number mismatched: usage_entry_number = %u, "
|
||||
"retrieved_entry_number = %u",
|
||||
usage_entry_number, retrieved_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
@@ -1238,7 +1245,7 @@ bool UsageTableHeader::LruUpgradeAllUsageEntries() {
|
||||
|
||||
video_widevine::License license;
|
||||
if (!ParseLicenseFromLicenseMessage(license_message, &license)) {
|
||||
LOGW("Could not parse license: usage_entry_number = %zu",
|
||||
LOGW("Could not parse license: usage_entry_number = %u",
|
||||
usage_entry_number);
|
||||
bad_license_file_entries.push_back(usage_entry_number);
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user