From 3b5667c8827a6ad93b3229ee7fcda2457b850db2 Mon Sep 17 00:00:00 2001 From: logicaloud <47704763+logicaloud@users.noreply.github.com> Date: Tue, 13 Jun 2023 07:52:54 +1200 Subject: [PATCH] Fix #1761: MQTTRetainedMessageManager, return task with NULL result instead of NULL (#1762) * Return task with NULL result instead of NULL * move Task.FromResult call out of lock * Update ReleaseNotes.md --------- Co-authored-by: Christian <6939810+chkr1011@users.noreply.github.com> --- .github/workflows/ReleaseNotes.md | 3 ++- .../MqttRetainedMessageManager_Tests.cs | 25 +++++++++++++++++++ .../Internal/MqttRetainedMessagesManager.cs | 4 +-- 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 Source/MQTTnet.Tests/Server/MqttRetainedMessageManager_Tests.cs diff --git a/.github/workflows/ReleaseNotes.md b/.github/workflows/ReleaseNotes.md index 24a926c6..6c670b92 100644 --- a/.github/workflows/ReleaseNotes.md +++ b/.github/workflows/ReleaseNotes.md @@ -1 +1,2 @@ -* [Client] Fixed _PlatformNotSupportedException_ when using Blazor (#1755, thanks to @Nickztar). \ No newline at end of file +* [Client] Fixed _PlatformNotSupportedException_ when using Blazor (#1755, thanks to @Nickztar). +* [Server] Fixed _NullReferenceException_ in retained messages management (#1762, thanks to @logicaloud). diff --git a/Source/MQTTnet.Tests/Server/MqttRetainedMessageManager_Tests.cs b/Source/MQTTnet.Tests/Server/MqttRetainedMessageManager_Tests.cs new file mode 100644 index 00000000..36032ed7 --- /dev/null +++ b/Source/MQTTnet.Tests/Server/MqttRetainedMessageManager_Tests.cs @@ -0,0 +1,25 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MQTTnet.Tests.Server +{ + [TestClass] + public sealed class MqttRetainedMessageManager_Tests + { + [TestMethod] + public async Task MqttRetainedMessageManager_GetUndefinedTopic() + { + var logger = new Mockups.TestLogger(); + var eventContainer = new MQTTnet.Server.MqttServerEventContainer(); + var retainedMessagesManager = new MQTTnet.Server.MqttRetainedMessagesManager(eventContainer, logger); + var task = retainedMessagesManager.GetMessage("undefined"); + Assert.IsNotNull(task, "Task should not be null"); + var result = await task; + Assert.IsNull(result, "Null result expected"); + } + } +} diff --git a/Source/MQTTnet/Server/Internal/MqttRetainedMessagesManager.cs b/Source/MQTTnet/Server/Internal/MqttRetainedMessagesManager.cs index 4dc0b2c0..c23dfeac 100644 --- a/Source/MQTTnet/Server/Internal/MqttRetainedMessagesManager.cs +++ b/Source/MQTTnet/Server/Internal/MqttRetainedMessagesManager.cs @@ -134,9 +134,9 @@ namespace MQTTnet.Server { return Task.FromResult(message); } - - return null; } + + return Task.FromResult(null); } public async Task ClearMessages()