diff --git a/Build/MQTTnet.nuspec b/Build/MQTTnet.nuspec
index b329846..b366be7 100644
--- a/Build/MQTTnet.nuspec
+++ b/Build/MQTTnet.nuspec
@@ -17,6 +17,7 @@
* [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).
+* [Core] Fixed a null reference exception in the MqttTcpChannel with WriteAsync and ReadAsync.
Copyright Christian Kratky 2016-2020
MQTT Message Queue Telemetry Transport MQTTClient MQTTServer Server MQTTBroker Broker NETStandard IoT InternetOfThings Messaging Hardware Arduino Sensor Actuator M2M ESP Smart Home Cities Automation Xamarin Blazor
diff --git a/Source/MQTTnet/Implementations/MqttTcpChannel.cs b/Source/MQTTnet/Implementations/MqttTcpChannel.cs
index 19ec6d1..72c0e00 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)