From 5eecb143bcdb619a38bf2af52a8a7dae48d9ef61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 2 Apr 2024 12:21:00 +0200 Subject: [PATCH] QNetworkInterface[unix]: fixup some memcpys There is an untested config for enabling null-strings, so technically not supported. But if we ever want to make null mean null then we should protect against it. Also drop the explicit template argument for qMin. This means we use the hetereogeneus version which will promote to size_t. Which is the type that memcpy expects anyway. Change-Id: I91e0a3b159b065b76e9e93605ef0e502f41af74f Reviewed-by: Thiago Macieira --- src/network/kernel/qnetworkinterface_unix.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 7eeba027b6..c0a7d9e00d 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -78,7 +78,8 @@ uint QNetworkInterfaceManager::interfaceIndexFromName(const QString &name) const QByteArray name8bit = name.toLatin1(); memset(&req, 0, sizeof(ifreq)); - memcpy(req.ifr_name, name8bit.data(), qMin(name8bit.length() + 1, sizeof(req.ifr_name) - 1)); + if (!name8bit.isNull()) + memcpy(req.ifr_name, name8bit.data(), qMin(size_t(name8bit.length()) + 1, sizeof(req.ifr_name) - 1)); uint id = 0; if (qt_safe_ioctl(socket, SIOCGIFINDEX, &req) >= 0) @@ -235,7 +236,8 @@ static QList interfaceListing() for ( ; it != names.constEnd(); ++it) { ifreq req; memset(&req, 0, sizeof(ifreq)); - memcpy(req.ifr_name, it->constData(), qMin(it->length() + 1, sizeof(req.ifr_name) - 1)); + if (!it->isNull()) + memcpy(req.ifr_name, it->constData(), qMin(size_t(it->length()) + 1, sizeof(req.ifr_name) - 1)); QNetworkInterfacePrivate *iface = findInterface(socket, interfaces, req); @@ -246,7 +248,8 @@ static QList interfaceListing() iface->name = QString::fromLatin1(req.ifr_name); // reset the name: - memcpy(req.ifr_name, oldName.constData(), qMin(oldName.length() + 1, sizeof(req.ifr_name) - 1)); + if (!oldName.isNull()) + memcpy(req.ifr_name, oldName.constData(), qMin(size_t(oldName.length()) + 1, sizeof(req.ifr_name) - 1)); } else #endif {