From 8d35b2c4e277b19e742c2549c21da06394885a3f Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Wed, 27 Oct 2021 12:40:10 -0700 Subject: [PATCH 1/3] ODK: Fix a few implict type conversion issues (This is a merge of http://go/wvgerrit/134403.) Reported as errors by UBSAN Bug: 194971260 Test: Ran ODK unit tests Change-Id: I2f38fb6952d259458af8498e86b3308421e93320 --- .../oemcrypto/odk/src/serialization_base.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c index 3a0364c0..1ee62016 100644 --- a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c +++ b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c @@ -52,25 +52,25 @@ void Pack_bool(ODK_Message* message, const bool* value) { void Pack_uint16_t(ODK_Message* message, const uint16_t* value) { assert(value); uint8_t data[2] = {0}; - data[0] = *value >> 8; - data[1] = *value >> 0; + data[0] = (uint8_t)(*value >> 8); + data[1] = (uint8_t)(*value >> 0); PackBytes(message, data, sizeof(data)); } void Pack_uint32_t(ODK_Message* message, const uint32_t* value) { assert(value); uint8_t data[4] = {0}; - data[0] = *value >> 24; - data[1] = *value >> 16; - data[2] = *value >> 8; - data[3] = *value >> 0; + data[0] = (uint8_t)(*value >> 24); + data[1] = (uint8_t)(*value >> 16); + data[2] = (uint8_t)(*value >> 8); + data[3] = (uint8_t)(*value >> 0); PackBytes(message, data, sizeof(data)); } void Pack_uint64_t(ODK_Message* message, const uint64_t* value) { assert(value); - uint32_t hi = *value >> 32; - uint32_t lo = *value; + uint32_t hi = (uint32_t)(*value >> 32); + uint32_t lo = (uint32_t)(*value); Pack_uint32_t(message, &hi); Pack_uint32_t(message, &lo); } @@ -104,7 +104,7 @@ static void UnpackBytes(ODK_Message* message, uint8_t* ptr, size_t count) { int Unpack_enum(ODK_Message* message) { uint32_t v32; Unpack_uint32_t(message, &v32); - return v32; + return (int)v32; } void Unpack_bool(ODK_Message* message, bool* value) { From 71aaf870c87b1dab289c945ea6702dfa7988229b Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Wed, 27 Oct 2021 12:41:47 -0700 Subject: [PATCH 2/3] Make implicit 64-to-32-bit conversions in `core_message_serialize.cpp` explicit (This is a merge of http://go/wvgerrit/134404.) There were two lines that were tripping Clang's `-Wshorten-64-to-32` warning. This CL makes both conversions explicit to appease the warning. There should be no change in behavior. Bug: 194971260 Test: ODK Unit Tests Change-Id: I6d111e9a4efc1f0e31b51e455c47c0e885d48e6b --- libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp index 177e39ca..c55b8f69 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp @@ -56,7 +56,7 @@ bool CreateResponse(uint32_t message_type, const S& core_request, return false; } - uint32_t message_length = ODK_Message_GetSize(&msg); + uint32_t message_length = static_cast(ODK_Message_GetSize(&msg)); msg = ODK_Message_Create(buf.data() + sizeof(header->message_type), sizeof(header->message_length)); Pack_uint32_t(&msg, &message_length); @@ -72,7 +72,7 @@ bool CopyDeviceId(const ODK_ProvisioningRequest& src, if (request.device_id_length > sizeof(request.device_id)) { return false; } - request.device_id_length = device_id.size(); + request.device_id_length = static_cast(device_id.size()); memset(request.device_id, 0, sizeof(request.device_id)); memcpy(request.device_id, device_id.data(), request.device_id_length); return true; From ba452b3f912d5af6abcc4e9e0bfa444443e884f1 Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Wed, 27 Oct 2021 12:43:23 -0700 Subject: [PATCH 3/3] Fix -Wshorten-64-to-32 error in metrics code (This is a merge of http://go/wvgerrit/134314.) This patch fixes code that would trigger -Wshorten-64-to-32 by implicitly narrowing a variable from 64 to 32 bits. The caclulation is now done at size_t resolution instead of downcasting to 32 bits. Bug: 194971260 Test: x86-64 tests Change-Id: I2fd0a3a3ec67f697d58d1ba00dba66452603c753 --- libwvdrmengine/cdm/metrics/src/metrics_collections.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/cdm/metrics/src/metrics_collections.cpp b/libwvdrmengine/cdm/metrics/src/metrics_collections.cpp index 19727e12..df02ec48 100644 --- a/libwvdrmengine/cdm/metrics/src/metrics_collections.cpp +++ b/libwvdrmengine/cdm/metrics/src/metrics_collections.cpp @@ -375,9 +375,9 @@ void EngineMetrics::ConsolidateSessions() { // TODO(b/118664842): Add support to merge older metrics into one // consolidated metric. - int excess_completed = completed_session_metrics_list_.size() - - kMaxCompletedSessions; - if (excess_completed > 0) { + if (completed_session_metrics_list_.size() > kMaxCompletedSessions) { + const size_t excess_completed = + completed_session_metrics_list_.size() - kMaxCompletedSessions; completed_session_metrics_list_.erase( completed_session_metrics_list_.begin(), completed_session_metrics_list_.begin() + excess_completed);