summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuha Vuolle <juha.vuolle@insta.fi>2022-06-27 10:16:28 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-06-28 08:26:49 +0000
commitab00a53c8dd8879b24a0fb2cfe282f72e945bcd5 (patch)
tree64b781a8ffb7bea28f9f053482c0c3ede6898e62
parentde81e5be8df87916d66a6838900a67d469f0c33f (diff)
Fix Bluez LE advertiser crash on large advertisement data
The calculation to count the number of service UUIDs that fit the 31 bytes resulted in choosing a number of services that doesn't fit, ultimately leading to a memset() crash a bit later. Fixes: QTBUG-104060 Change-Id: Iad170cfded7363f820a92230df27cdb57bce3814 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> (cherry picked from commit efc4541af0f02d254cabf82b3db0412e7b83682e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/bluetooth/qleadvertiser_bluez.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/bluetooth/qleadvertiser_bluez.cpp b/src/bluetooth/qleadvertiser_bluez.cpp
index e0ef450f..911317b2 100644
--- a/src/bluetooth/qleadvertiser_bluez.cpp
+++ b/src/bluetooth/qleadvertiser_bluez.cpp
@@ -255,7 +255,8 @@ static void addServicesData(AdvData &data, const QList<T> &services)
return;
constexpr auto sizeofT = static_cast<int>(sizeof(T)); // signed is more convenient
const qsizetype spaceAvailable = sizeof data.data - data.length;
- const qsizetype maxServices = (std::max)((spaceAvailable - 2) / sizeofT, services.size());
+ // Determine how many services will be set, space may limit the number
+ const qsizetype maxServices = (std::min)((spaceAvailable - 2) / sizeofT, services.size());
if (maxServices <= 0) {
qCWarning(QT_BT_BLUEZ) << "services data does not fit into advertising data packet";
return;