diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea0c5bac422ca863279f98fab92c20c0600da0a9..f2b4bdf3193e63824255ef09279ae671bc300b13 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -142,6 +142,11 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
         -Wno-global-constructors
         -Wno-exit-time-destructors
     )
+    if (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 16)
+        target_compile_options(Vivy PRIVATE
+            -Wno-unsafe-buffer-usage
+        )
+    endif()
 elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
     target_compile_options(Vivy PRIVATE
         -Wno-subobject-linkage  # Kubat: Some proglems here, it seems they
diff --git a/src/Lib/Log.cc b/src/Lib/Log.cc
index 4cede87db6a84c071f4dc94cf543c05c55015909..cf7a94859fdf95f62c27db9002201b1e758f0fb5 100644
--- a/src/Lib/Log.cc
+++ b/src/Lib/Log.cc
@@ -277,12 +277,14 @@ LogMessage::operator<<(const std::string_view strv) noexcept
 LogMessage &
 LogMessage::operator<<(const char *str) noexcept
 {
-    const std::size_t length = strlen(str);
-    for (std::size_t i = 0; (i < length) && (indexInArray < messageBufferLength - 1);
-         ++i, ++indexInArray) {
-        textBuffer[indexInArray] = str[i];
+    if (str){
+        const std::size_t length = strlen(str);
+        for (std::size_t i = 0; (i < length) && (indexInArray < messageBufferLength - 1);
+             ++i, ++indexInArray) {
+            textBuffer[indexInArray] = str[i];
+        }
+        textBuffer[indexInArray] = '\0';
     }
-    textBuffer[indexInArray] = '\0';
     return *this;
 }