summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@qt.io>2023-11-25 18:40:58 +0100
committerMaurice Kalinowski <maurice.kalinowski@qt.io>2023-11-30 09:57:26 +0100
commitfb417c44dd8838eb7ab3ebe5c3f4dce91ce1025b (patch)
tree6c61635fb49cc5b17d0ee5c52a552be6c896e41e
parent95b38eafb514832a951a5c67f3a2af9ff8fb83de (diff)
Fix topic wildcard checks
A topic can have multiple '+' wildcards, but isValid was searching for the wrong wildcard at the second instance. Pick-to: 6.6 6.5 6.2 Change-Id: I83e3fa258ef01b26388c0e6fd8c17a0a140ab75a Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--src/mqtt/qmqtttopicfilter.cpp2
-rw-r--r--tests/auto/qmqtttopicfilter/tst_qmqtttopicfilter.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/mqtt/qmqtttopicfilter.cpp b/src/mqtt/qmqtttopicfilter.cpp
index 6c96ff8..658b1d8 100644
--- a/src/mqtt/qmqtttopicfilter.cpp
+++ b/src/mqtt/qmqtttopicfilter.cpp
@@ -173,7 +173,7 @@ bool QMqttTopicFilter::isValid() const
|| (singleLevelPosition < size - 1 && d->filter.at(singleLevelPosition + 1) != QLatin1Char('/'))) {
return false;
}
- singleLevelPosition = d->filter.indexOf(QLatin1Char('#'), singleLevelPosition + 1);
+ singleLevelPosition = d->filter.indexOf(QLatin1Char('+'), singleLevelPosition + 1);
}
// Shared Subscription syntax
diff --git a/tests/auto/qmqtttopicfilter/tst_qmqtttopicfilter.cpp b/tests/auto/qmqtttopicfilter/tst_qmqtttopicfilter.cpp
index dcd1c2f..e69299e 100644
--- a/tests/auto/qmqtttopicfilter/tst_qmqtttopicfilter.cpp
+++ b/tests/auto/qmqtttopicfilter/tst_qmqtttopicfilter.cpp
@@ -47,6 +47,7 @@ void Tst_QMqttTopicFilter::checkValidity()
QVERIFY(!QMqttTopicFilter("a+").isValid());
QVERIFY(!QMqttTopicFilter("+a").isValid());
QVERIFY(!QMqttTopicFilter("++").isValid());
+ QVERIFY(!QMqttTopicFilter("a/+/b/++/c").isValid());
QVERIFY(!QMqttTopicFilter(QString(3, QChar(QChar::Null))).isValid());