diff --git a/Build/MQTTnet.nuspec b/Build/MQTTnet.nuspec index b1aa6050..3d25a3da 100644 --- a/Build/MQTTnet.nuspec +++ b/Build/MQTTnet.nuspec @@ -16,7 +16,8 @@ * [AspNetCore] Adjusted some namespaces (BREAKING CHANGE!) * [Server] Adjusted some namespaces (BREAKING CHANGE!) * [Server] Added state checks (throw if not started etc.) for most server APIs. -* [Server] Exposed real X509Certificate2 (instead byte array) to TLS options (Thanks to @borigas). +* [Server] Exposed real X509Certificate2 (instead byte array) to TLS options (thanks to @borigas). +* [Core] Fixed a null reference exception in the MqttTcpChannel with WriteAsync and ReadAsync. * [Core] Added server interceptor for undelivered messages (Thanks to @cshark-inator). Copyright Christian Kratky 2016-2020 diff --git a/Source/MQTTnet/Implementations/MqttTcpChannel.cs b/Source/MQTTnet/Implementations/MqttTcpChannel.cs index 19ec6d1e..72c0e00d 100644 --- a/Source/MQTTnet/Implementations/MqttTcpChannel.cs +++ b/Source/MQTTnet/Implementations/MqttTcpChannel.cs @@ -127,7 +127,14 @@ namespace MQTTnet.Implementations // Workaround for: https://github.com/dotnet/corefx/issues/24430 using (cancellationToken.Register(Dispose)) { - return await _stream.ReadAsync(buffer, offset, count, cancellationToken).ConfigureAwait(false); + var stream = _stream; + + if (stream == null) + { + throw new ObjectDisposedException(nameof(stream)); + } + + return await stream.ReadAsync(buffer, offset, count, cancellationToken).ConfigureAwait(false); } } catch (ObjectDisposedException) @@ -157,7 +164,14 @@ namespace MQTTnet.Implementations // Workaround for: https://github.com/dotnet/corefx/issues/24430 using (cancellationToken.Register(Dispose)) { - await _stream.WriteAsync(buffer, offset, count, cancellationToken).ConfigureAwait(false); + var stream = _stream; + + if (stream == null) + { + throw new ObjectDisposedException(nameof(stream)); + } + + await stream.WriteAsync(buffer, offset, count, cancellationToken).ConfigureAwait(false); } } catch (ObjectDisposedException)