From 58353b1f08d51610431411cecf01e86e872c3ac6 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 4 Feb 2021 09:47:28 -0500 Subject: [PATCH] rgw: fix snprintf() truncate warning in ETagVerifier src/rgw/rgw_etag_verifier.cc: In member function 'virtual void rgw::putobj::ETagVerifier_MPU::calculate_etag()': src/rgw/rgw_etag_verifier.cc:179:12: warning: '%lld' directive output may be truncated writing between 1 and 20 bytes into a region of size 15 [-Wformat-truncation=] "-%lld", (long long)(part_ofs.size())); ^~~~~~~ src/rgw/rgw_etag_verifier.cc:179:12: note: directive argument in the range [-1152921504606846976, 1152921504606846975] Fixes: https://tracker.ceph.com/issues/49169 Signed-off-by: Casey Bodley --- src/rgw/rgw_etag_verifier.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_etag_verifier.cc b/src/rgw/rgw_etag_verifier.cc index 05aedb12fc1..47910c28cae 100644 --- a/src/rgw/rgw_etag_verifier.cc +++ b/src/rgw/rgw_etag_verifier.cc @@ -161,8 +161,12 @@ done: void ETagVerifier_MPU::calculate_etag() { + const uint32_t parts = part_ofs.size(); + constexpr auto digits10 = std::numeric_limits::digits10; + constexpr auto extra = 2 + digits10; // add "-%u\0" at the end + unsigned char m[CEPH_CRYPTO_MD5_DIGESTSIZE], mpu_m[CEPH_CRYPTO_MD5_DIGESTSIZE]; - char final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + 16]; + char final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2 + extra]; /* Return early if ETag has already been calculated */ if (!calculated_etag.empty()) @@ -176,7 +180,7 @@ void ETagVerifier_MPU::calculate_etag() buf_to_hex(mpu_m, CEPH_CRYPTO_MD5_DIGESTSIZE, final_etag_str); snprintf(&final_etag_str[CEPH_CRYPTO_MD5_DIGESTSIZE * 2], sizeof(final_etag_str) - CEPH_CRYPTO_MD5_DIGESTSIZE * 2, - "-%lld", (long long)(part_ofs.size())); + "-%u", parts); calculated_etag = final_etag_str; ldout(cct, 20) << "MPU calculated ETag:" << calculated_etag << dendl;