]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix snprintf() truncate warning in ETagVerifier 39301/head
authorCasey Bodley <cbodley@redhat.com>
Thu, 4 Feb 2021 14:47:28 +0000 (09:47 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 4 Feb 2021 14:52:34 +0000 (09:52 -0500)
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 [-11529215046068469761152921504606846975]

Fixes: https://tracker.ceph.com/issues/49169
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_etag_verifier.cc

index 05aedb12fc18b603f89cfb40e0a57989ebc5c7d6..47910c28cae8a7c6bc135884a8dc1eddba2b2a4e 100644 (file)
@@ -161,8 +161,12 @@ done:
 
 void ETagVerifier_MPU::calculate_etag()
 {
+  const uint32_t parts = part_ofs.size();
+  constexpr auto digits10 = std::numeric_limits<uint32_t>::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;