Fix a crash in topic matching.

Subscribing a client to a/b/c and publishing to a/b leads to a
crash, turns out it is a off-by-one calculation in topic matching code.
pull/5/head
Michael Zanetti 2019-09-24 20:38:01 +02:00
parent 3436c705ce
commit 07d712d5ae
2 changed files with 4 additions and 0 deletions

View File

@ -628,6 +628,9 @@ bool MqttServerPrivate::matchTopic(const QString &topicFilter, const QString &to
if (filterParts.at(i) == QStringLiteral("#")) {
continue;
}
if (topicParts.length() <= i) {
return false;
}
if (topicParts.at(i) == filterParts.at(i)) {
continue;
}

View File

@ -489,6 +489,7 @@ void OperationTests::testSubscriptionTopicMatching_data()
rows.append({ "a//+/", "a///", "1" });
rows.append({ "a//+/#", "a//b/c", "1" });
rows.append({ "a//+/#", "a/b/c/d", "0" });
rows.append({ "a/b/c", "a/b", "0"});
rows.append({ "$SYS/", "$SYS/", "0" });
rows.append({ "#", "$SYS/", "0" });