From 9e93cabdb256d0275b88b0aa31689117bc1d69b5 Mon Sep 17 00:00:00 2001
From: Dale Glass <dale@daleglass.net>
Date: Sun, 5 Jun 2022 14:21:56 +0200
Subject: [PATCH] =?UTF-8?q?Fix=20'warning:=20=E2=80=98size=5Ft=20strlen(co?=
 =?UTF-8?q?nst=20char*)=E2=80=99=20reading=201=20or=20more=20bytes=20from?=
 =?UTF-8?q?=20a=20region=20of=20size=200=20[-Wstringop-overread]'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 libraries/networking/src/SockAddr.cpp   |  6 +++---
 libraries/shared/src/SettingHelpers.cpp | 13 +++++++++++--
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/libraries/networking/src/SockAddr.cpp b/libraries/networking/src/SockAddr.cpp
index 8dbbf39ec4..29fbde3934 100644
--- a/libraries/networking/src/SockAddr.cpp
+++ b/libraries/networking/src/SockAddr.cpp
@@ -83,7 +83,7 @@ void SockAddr::swap(SockAddr& otherSockAddr) {
     swap(_socketType, otherSockAddr._socketType);
     swap(_address, otherSockAddr._address);
     swap(_port, otherSockAddr._port);
-    
+
     // Swap objects name
     auto temp = otherSockAddr.objectName();
     otherSockAddr.setObjectName(objectName());
@@ -135,8 +135,8 @@ bool SockAddr::hasPrivateAddress() const {
 QDebug operator<<(QDebug debug, const SockAddr& sockAddr) {
     debug.nospace()
         << (sockAddr._socketType != SocketType::Unknown
-            ? (SocketTypeToString::socketTypeToString(sockAddr._socketType) + " ").toLocal8Bit().constData() : "")
-        << sockAddr._address.toString().toLocal8Bit().constData() << ":" << sockAddr._port;
+            ? (SocketTypeToString::socketTypeToString(sockAddr._socketType) + " ") : QString(""))
+        << sockAddr._address.toString() << ":" << sockAddr._port;
     return debug.space();
 }
 
diff --git a/libraries/shared/src/SettingHelpers.cpp b/libraries/shared/src/SettingHelpers.cpp
index c6b8ac8f83..d8fcc6b6de 100644
--- a/libraries/shared/src/SettingHelpers.cpp
+++ b/libraries/shared/src/SettingHelpers.cpp
@@ -164,7 +164,12 @@ QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) {
             case QVariant::ByteArray: {
                 QByteArray a = variant.toByteArray();
                 QString result = QLatin1String("@ByteArray(");
-                result += QString::fromLatin1(a.constData(), a.size());
+                int sz = a.size();
+                if ( sz > 0 ) {
+                    // Work around 'warning: ‘size_t strlen(const char*)’ reading 1 or more bytes from a region of size 0 [-Wstringop-overread]'
+                    // size() indeed could be zero bytes, so make sure that can't be the case.
+                    result += QString::fromLatin1(a.constData(), sz);
+                }
                 result += QLatin1Char(')');
                 object.insert(key, result);
                 break;
@@ -213,7 +218,11 @@ QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) {
                 }
 
                 QString result = QLatin1String("@Variant(");
-                result += QString::fromLatin1(array.constData(), array.size());
+                int sz = array.size();
+                if ( sz > 0 ) {
+                    // See comment in the case handling QVariant::ByteArray
+                    result += QString::fromLatin1(array.constData(), sz);
+                }
                 result += QLatin1Char(')');
                 object.insert(key, result);
                 break;