trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject [trafficserver] branch master updated: BWF: Fix asserts for clang-analyzer. The current asserts break under valid use. Unit tests added to verify.
Date Thu, 14 Jun 2018 13:27:12 GMT
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 811092f  BWF: Fix asserts for clang-analyzer. The current asserts break under valid
use. Unit tests added to verify.
811092f is described below

commit 811092f5ba65d4617052d0e295ae11611c23e4f9
Author: Alan M. Carroll <amc@apache.org>
AuthorDate: Wed Jun 13 13:31:52 2018 -0500

    BWF: Fix asserts for clang-analyzer.
    The current asserts break under valid use. Unit tests added to verify.
---
 lib/ts/BufferWriter.h                        | 12 ++++++------
 lib/ts/unit-tests/test_BufferWriterFormat.cc | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/lib/ts/BufferWriter.h b/lib/ts/BufferWriter.h
index 3fcffc9..b1c4c9b 100644
--- a/lib/ts/BufferWriter.h
+++ b/lib/ts/BufferWriter.h
@@ -258,12 +258,12 @@ public:
   {
     const size_t newSize = _attempted + length;
 
-    if (newSize <= _capacity) {
-      ink_assert(_buf != nullptr); // make clang-analyzer happy.
-      std::memcpy(_buf + _attempted, data, length);
-    } else if (_attempted < _capacity) {
-      ink_assert(_buf != nullptr); // make clang-analyzer happy.
-      std::memcpy(_buf + _attempted, data, _capacity - _attempted);
+    if (_buf) {
+      if (newSize <= _capacity) {
+        std::memcpy(_buf + _attempted, data, length);
+      } else if (_attempted < _capacity) {
+        std::memcpy(_buf + _attempted, data, _capacity - _attempted);
+      }
     }
     _attempted = newSize;
 
diff --git a/lib/ts/unit-tests/test_BufferWriterFormat.cc b/lib/ts/unit-tests/test_BufferWriterFormat.cc
index 14986f8..589a8a9 100644
--- a/lib/ts/unit-tests/test_BufferWriterFormat.cc
+++ b/lib/ts/unit-tests/test_BufferWriterFormat.cc
@@ -281,6 +281,30 @@ TEST_CASE("bwstring", "[bwprint][bwstring]")
   REQUIRE(std::string_view(buff) == "|Deep Silent Complete by Nightwish|");
   snprintf(buff, sizeof(buff), "|%s|", bw.reset().print("Deep Silent Complete by {}\0elided
junk", "Nightwish"sv).data());
   REQUIRE(std::string_view(buff) == "|Deep Silent Complete by Nightwish|");
+
+  // Special tests for clang analyzer failures - special asserts are needed to make it happy
but
+  // those can break functionality.
+  fmt = "Did you know? {}{} is {}"sv;
+  s.resize(0);
+  ts::bwprint(s, fmt, "Lady "sv, "Persia"sv, "not mean");
+  REQUIRE(s == "Did you know? Lady Persia is not mean");
+  s.resize(0);
+  ts::bwprint(s, fmt, ""sv, "Phil", "correct");
+  REQUIRE(s == "Did you know? Phil is correct");
+  s.resize(0);
+  ts::bwprint(s, fmt, std::string_view(), "Leif", "confused");
+  REQUIRE(s == "Did you know? Leif is confused");
+
+  {
+    std::string out;
+    ts::bwprint(out, fmt, ""sv, "Phil", "correct");
+    REQUIRE(out == "Did you know? Phil is correct");
+  }
+  {
+    std::string out;
+    ts::bwprint(out, fmt, std::string_view(), "Leif", "confused");
+    REQUIRE(out == "Did you know? Leif is confused");
+  }
 }
 
 TEST_CASE("BWFormat integral", "[bwprint][bwformat]")

-- 
To stop receiving notification emails like this one, please contact
amc@apache.org.

Mime
View raw message