diff --git a/include/async_resolve.hpp b/include/async_resolve.hpp
index c69fd87..0945001 100644
--- a/include/async_resolve.hpp
+++ b/include/async_resolve.hpp
@@ -80,6 +80,7 @@
                     }
                     uint16_t portNum = 0;
                     auto it = std::from_chars(
+                        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
                         port.data(), port.data() + port.size(), portNum);
                     if (it.ec != std::errc())
                     {
diff --git a/include/ibm/locks.hpp b/include/ibm/locks.hpp
index 4fbb503..5a86d09 100644
--- a/include/ibm/locks.hpp
+++ b/include/ibm/locks.hpp
@@ -535,9 +535,14 @@
     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
     uint8_t* q = reinterpret_cast<uint8_t*>(&resourceId2);
 
-    BMCWEB_LOG_DEBUG << "Comparing bytes " << std::to_string(p[position]) << ","
-                     << std::to_string(q[position]);
-    if (p[position] != q[position])
+    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
+    uint8_t pPosition = p[position];
+    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
+    uint8_t qPosition = q[position];
+
+    BMCWEB_LOG_DEBUG << "Comparing bytes " << std::to_string(pPosition) << ","
+                     << std::to_string(qPosition);
+    if (pPosition != qPosition)
     {
         return false;
     }
diff --git a/include/json_html_serializer.hpp b/include/json_html_serializer.hpp
index 3efc224..4969d27 100644
--- a/include/json_html_serializer.hpp
+++ b/include/json_html_serializer.hpp
@@ -353,6 +353,7 @@
 
     // jump to the end to generate the string from backward
     // so we later avoid reversing the result
+    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
     bufferPtr += nChars;
 
     // Fast int2ascii implementation inspired by "Fastware" talk by Andrei
@@ -384,6 +385,8 @@
 {
     std::array<char, 64> numberbuffer{{}};
     char* begin = numberbuffer.data();
+
+    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
     ::nlohmann::detail::to_chars(begin, begin + numberbuffer.size(), number);
 
     out += begin;
diff --git a/include/multipart_parser.hpp b/include/multipart_parser.hpp
index 3728311..e385558 100644
--- a/include/multipart_parser.hpp
+++ b/include/multipart_parser.hpp
@@ -79,6 +79,7 @@
 
         for (size_t i = 0; i < len; i++)
         {
+            // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
             char c = buffer[i];
             switch (state)
             {
@@ -139,6 +140,8 @@
                         {
                             return ParserError::ERROR_EMPTY_HEADER;
                         }
+
+                        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
                         currentHeaderName.append(buffer + headerFieldMark,
                                                  i - headerFieldMark);
                         state = State::HEADER_VALUE_START;
@@ -161,6 +164,7 @@
                 case State::HEADER_VALUE:
                     if (c == cr)
                     {
+                        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
                         std::string_view value(buffer + headerValueMark,
                                                i - headerValueMark);
                         mime_fields.rbegin()->fields.set(currentHeaderName,
@@ -190,6 +194,8 @@
                     if (index == 0)
                     {
                         skipNonBoundary(buffer, len, boundary.size() - 1, i);
+
+                        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
                         c = buffer[i];
                     }
                     processPartData(prevIndex, index, buffer, i, c, state);
@@ -229,6 +235,7 @@
         // boyer-moore derived algorithm to safely skip non-boundary data
         while (i + boundary.size() <= len)
         {
+            // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
             if (isBoundaryChar(buffer[i + boundaryEnd]))
             {
                 break;
@@ -248,8 +255,11 @@
             {
                 if (index == 0)
                 {
-                    mime_fields.rbegin()->content += std::string_view(
-                        buffer + partDataMark, i - partDataMark);
+                    // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
+                    const char* start = buffer + partDataMark;
+                    size_t size = i - partDataMark;
+                    mime_fields.rbegin()->content +=
+                        std::string_view(start, size);
                 }
                 index++;
             }
diff --git a/include/pam_authenticate.hpp b/include/pam_authenticate.hpp
index 0ce0bb4..1459ea6 100644
--- a/include/pam_authenticate.hpp
+++ b/include/pam_authenticate.hpp
@@ -24,6 +24,7 @@
     for (int i = 0; i < numMsg; ++i)
     {
         /* Ignore all PAM messages except prompting for hidden input */
+        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
         if (msg[i]->msg_style != PAM_PROMPT_ECHO_OFF)
         {
             continue;
@@ -66,6 +67,7 @@
         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
         *resp = reinterpret_cast<pam_response*>(ptr);
 
+        // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
         resp[i]->resp = pass;
 
         return PAM_SUCCESS;
