]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: don't use strlen in constexprs to not brake Clang builds. 15688/head
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Wed, 14 Jun 2017 10:05:55 +0000 (12:05 +0200)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Wed, 14 Jun 2017 10:20:54 +0000 (12:20 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_auth_s3.cc
src/rgw/rgw_auth_s3.h
src/rgw/rgw_string.h

index 6afe7291c274491b8fe1d87582e2647f59b19a91..84df9f8b1d3923a3d7236407342b94a53bb31b8d 100644 (file)
@@ -919,8 +919,8 @@ AWSv4ComplMulti::ChunkMeta::create_next(CephContext* const cct,
 std::string
 AWSv4ComplMulti::calc_chunk_signature(const std::string& payload_hash) const
 {
-  constexpr size_t algorithm_len = std::strlen(AWS4_HMAC_SHA256_STR);
-  constexpr size_t empty_hash_len = std::strlen(AWS4_EMPTY_PAYLOAD_HASH);
+  const size_t algorithm_len = std::strlen(AWS4_HMAC_SHA256_STR);
+  const size_t empty_hash_len = std::strlen(AWS4_EMPTY_PAYLOAD_HASH);
 
   /* We want to avoid reallocations when concatenating the string_to_sign. */
   const size_t total_len = algorithm_len + date.length() + \
index 36565457018ab74e579aef57c787e659a5e846ab..b5fc2919213d96f0dc6070d9b3e9202130a057d8 100644 (file)
@@ -169,11 +169,11 @@ class AWSv4ComplMulti : public rgw::auth::Completer,
 
     /* Let's suppose the data length fields can't exceed uint64_t. */
     static constexpr size_t META_MAX_SIZE = \
-      strlen("\r\nffffffffffffffff;chunk-signature=") + SIG_SIZE + strlen("\r\n");
+      sarrlen("\r\nffffffffffffffff;chunk-signature=") + SIG_SIZE + sarrlen("\r\n");
 
     /* The metadata size of for the last, empty chunk. */
     static constexpr size_t META_MIN_SIZE = \
-      strlen("0;chunk-signature=") + SIG_SIZE + strlen("\r\n");
+      sarrlen("0;chunk-signature=") + SIG_SIZE + sarrlen("\r\n");
 
     /* Detect whether a given stream_pos fits in boundaries of a chunk. */
     bool is_new_chunk_in_stream(size_t stream_pos) const;
index 5fa10885470a037e45faacd6572f3a641066880a..eed49af8a1722e479be4bfb0d05e3c0cbdf63f55 100644 (file)
@@ -125,4 +125,13 @@ static inline StringT create_n_reserve(const size_t reserve_len)
   return ret;
 }
 
+/* std::strlen() isn't guaranteed to be computable at compile-time. Although
+ * newer GCCs actually do that, Clang doesn't. Please be aware this function
+ * IS NOT A DROP-IN REPLACEMENT FOR STRLEN -- it returns a different result
+ * for strings having \0 in the middle. */
+template<size_t N>
+static inline constexpr size_t sarrlen(const char (&arr)[N]) {
+  return N - 1;
+}
+
 #endif