You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2019/05/14 16:41:40 UTC

[trafficserver] branch master updated: clang-analyzer: Fix uninitialized variable in make_to_lower_case.

This is an automated email from the ASF dual-hosted git repository.

amc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 697cf5b  clang-analyzer: Fix uninitialized variable in make_to_lower_case.
697cf5b is described below

commit 697cf5bd737efe78727b3d4b836270c82c0ef969
Author: Alan M. Carroll <am...@apache.org>
AuthorDate: Mon May 13 13:24:32 2019 -0500

    clang-analyzer: Fix uninitialized variable in make_to_lower_case.
---
 iocore/net/SSLCertLookup.cc | 38 +++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/iocore/net/SSLCertLookup.cc b/iocore/net/SSLCertLookup.cc
index 641f7ab..4c4960c 100644
--- a/iocore/net/SSLCertLookup.cc
+++ b/iocore/net/SSLCertLookup.cc
@@ -138,6 +138,24 @@ private:
   int store(SSLCertContext const &cc);
 };
 
+namespace
+{
+/** Copy @a src to @a dst, transforming to lower case.
+ *
+ * @param src Input string.
+ * @param dst Output buffer.
+ */
+inline void
+transform_lower(std::string_view src, ts::MemSpan<char> dst)
+{
+  if (src.size() > dst.size() - 1) { // clip @a src, reserving space for the terminal nul.
+    src = std::string_view{src.data(), dst.size() - 1};
+  }
+  auto final = std::transform(src.begin(), src.end(), dst.data(), [](char c) -> char { return std::tolower(c); });
+  *final++   = '\0';
+}
+} // namespace
+
 // Zero out and free the heap space allocated for ticket keys to avoid leaking secrets.
 // The first several bytes stores the number of keys and the rest stores the ticket keys.
 void
@@ -297,20 +315,6 @@ SSLCertLookup::get(unsigned i) const
   return ssl_storage->get(i);
 }
 
-static void
-make_to_lower_case(const char *name, char *lower_case_name, int buf_len)
-{
-  int name_len = strlen(name);
-  int i;
-  if (name_len > (buf_len - 1)) {
-    name_len = buf_len - 1;
-  }
-  for (i = 0; i < name_len; i++) {
-    lower_case_name[i] = ParseRules::ink_tolower(name[i]);
-  }
-  lower_case_name[i] = '\0';
-}
-
 SSLContextStorage::SSLContextStorage() {}
 
 bool
@@ -358,7 +362,7 @@ SSLContextStorage::insert(const char *name, int idx)
 {
   ats_wildcard_matcher wildcard;
   char lower_case_name[TS_MAX_HOST_NAME_LEN + 1];
-  make_to_lower_case(name, lower_case_name, sizeof(lower_case_name));
+  transform_lower(name, lower_case_name);
   if (wildcard.match(lower_case_name)) {
     // Strip the wildcard and store the subdomain
     const char *subdomain = index(lower_case_name, '*');
@@ -407,7 +411,7 @@ SSLContextStorage::lookup(const char *name)
   }
   // Try lower casing it
   char lower_case_name[TS_MAX_HOST_NAME_LEN + 1];
-  make_to_lower_case(name, lower_case_name, sizeof(lower_case_name));
+  transform_lower(name, lower_case_name);
   if (auto it_lower = this->hostnames.find(lower_case_name); it_lower != this->hostnames.end()) {
     return &(this->ctx_store[it_lower->second]);
   }
@@ -452,7 +456,7 @@ reverse_dns_name(const char *hostname, char (&reversed)[TS_MAX_HOST_NAME_LEN + 1
       *(--ptr) = '.';
     }
   }
-  make_to_lower_case(ptr, ptr, strlen(ptr) + 1);
+  transform_lower(ptr, {ptr, strlen(ptr) + 1});
 
   return ptr;
 }