Added checks for null references in the MqttTcpChannel.release/3.x.x
@@ -17,6 +17,7 @@ | |||||
* [Server] 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] 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. | |||||
</releaseNotes> | </releaseNotes> | ||||
<copyright>Copyright Christian Kratky 2016-2020</copyright> | <copyright>Copyright Christian Kratky 2016-2020</copyright> | ||||
<tags>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</tags> | <tags>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</tags> | ||||
@@ -127,7 +127,14 @@ namespace MQTTnet.Implementations | |||||
// Workaround for: https://github.com/dotnet/corefx/issues/24430 | // Workaround for: https://github.com/dotnet/corefx/issues/24430 | ||||
using (cancellationToken.Register(Dispose)) | 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) | catch (ObjectDisposedException) | ||||
@@ -157,7 +164,14 @@ namespace MQTTnet.Implementations | |||||
// Workaround for: https://github.com/dotnet/corefx/issues/24430 | // Workaround for: https://github.com/dotnet/corefx/issues/24430 | ||||
using (cancellationToken.Register(Dispose)) | 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) | catch (ObjectDisposedException) | ||||