From bca2ded8eb8d8467aae96b4277da34aa894e84bd Mon Sep 17 00:00:00 2001 From: Suhas Holla Karkada Chandrashekar <51073384+suhashollakc@users.noreply.github.com> Date: Sat, 13 Jun 2026 12:04:42 -0400 Subject: [PATCH] Fix MQTT v5 topic alias forwarding (#2250) --- Source/MQTTnet.Server/Internal/MqttConnectedClient.cs | 4 +++- Source/MQTTnet.Tests/MQTTv5/Client_Tests.cs | 4 ++-- Source/MQTTnet.Tests/Server/Topic_Alias_Tests.cs | 5 ++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Source/MQTTnet.Server/Internal/MqttConnectedClient.cs b/Source/MQTTnet.Server/Internal/MqttConnectedClient.cs index 48e6bd2c..5fd70d48 100644 --- a/Source/MQTTnet.Server/Internal/MqttConnectedClient.cs +++ b/Source/MQTTnet.Server/Internal/MqttConnectedClient.cs @@ -218,6 +218,8 @@ public sealed class MqttConnectedClient : IDisposable HandleTopicAlias(publishPacket); var applicationMessage = MqttApplicationMessageFactory.Create(publishPacket); + // Topic aliases are scoped to this network connection and must not be forwarded to other clients. + applicationMessage.TopicAlias = 0; var dispatchApplicationMessageResult = await _sessionsManager.DispatchApplicationMessage(Id, UserName, Session.Items, applicationMessage, cancellationToken).ConfigureAwait(false); @@ -579,4 +581,4 @@ public sealed class MqttConnectedClient : IDisposable _logger.Warning(exception, "Client '{0}': Error while sending DISCONNECT packet (ReasonCode = {1})", Id, options.ReasonCode); } } -} \ No newline at end of file +} diff --git a/Source/MQTTnet.Tests/MQTTv5/Client_Tests.cs b/Source/MQTTnet.Tests/MQTTv5/Client_Tests.cs index f68323ba..7ecfda35 100644 --- a/Source/MQTTnet.Tests/MQTTv5/Client_Tests.cs +++ b/Source/MQTTnet.Tests/MQTTv5/Client_Tests.cs @@ -114,7 +114,7 @@ public sealed class Client_Tests : BaseTestClass Assert.IsNotNull(receivedMessage); Assert.AreEqual(applicationMessage.Topic, receivedMessage.Topic); - Assert.AreEqual(applicationMessage.TopicAlias, receivedMessage.TopicAlias); + Assert.AreEqual(0, receivedMessage.TopicAlias); Assert.AreEqual(applicationMessage.ContentType, receivedMessage.ContentType); Assert.AreEqual(applicationMessage.ResponseTopic, receivedMessage.ResponseTopic); Assert.AreEqual(applicationMessage.MessageExpiryInterval, receivedMessage.MessageExpiryInterval); @@ -344,4 +344,4 @@ public sealed class Client_Tests : BaseTestClass memoryStream.Position = 0; return memoryStream; } -} \ No newline at end of file +} diff --git a/Source/MQTTnet.Tests/Server/Topic_Alias_Tests.cs b/Source/MQTTnet.Tests/Server/Topic_Alias_Tests.cs index 86469640..51635238 100644 --- a/Source/MQTTnet.Tests/Server/Topic_Alias_Tests.cs +++ b/Source/MQTTnet.Tests/Server/Topic_Alias_Tests.cs @@ -34,6 +34,7 @@ public sealed class Topic_Alias_Tests : BaseTestClass await testEnvironment.StartServer(); var receivedTopics = new List(); + var receivedTopicAliases = new List(); var c1 = await testEnvironment.ConnectClient(options => options.WithProtocolVersion(MqttProtocolVersion.V500)); c1.ApplicationMessageReceivedAsync += e => @@ -41,6 +42,7 @@ public sealed class Topic_Alias_Tests : BaseTestClass lock (receivedTopics) { receivedTopics.Add(e.ApplicationMessage.Topic); + receivedTopicAliases.Add(e.ApplicationMessage.TopicAlias); } return CompletedTask.Instance; @@ -68,5 +70,6 @@ public sealed class Topic_Alias_Tests : BaseTestClass Assert.HasCount(3, receivedTopics); CollectionAssert.AllItemsAreNotNull(receivedTopics); Assert.IsTrue(receivedTopics.All(t => t.Equals("this_is_the_topic", System.StringComparison.Ordinal))); + Assert.IsTrue(receivedTopicAliases.All(a => a == 0)); } -} \ No newline at end of file +}