Browse Source

Fix reading more data than required for the body.

release/3.x.x
Christian 7 years ago
parent
commit
751ac19c4b
1 changed files with 9 additions and 1 deletions
  1. +9
    -1
      Frameworks/MQTTnet.NetStandard/Adapter/MqttChannelAdapter.cs

+ 9
- 1
Frameworks/MQTTnet.NetStandard/Adapter/MqttChannelAdapter.cs View File

@@ -142,7 +142,13 @@ namespace MQTTnet.Adapter
var buffer = new byte[ReadBufferSize];
while (body.Length < header.BodyLength)
{
var readBytesCount = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false);
var bytesLeft = header.BodyLength - (int)body.Length;
if (bytesLeft > buffer.Length)
{
bytesLeft = buffer.Length;
}

var readBytesCount = await stream.ReadAsync(buffer, 0, bytesLeft, cancellationToken).ConfigureAwait(false);
// Check if the client closed the connection before sending the full body.
if (readBytesCount == 0)
@@ -150,6 +156,8 @@ namespace MQTTnet.Adapter
throw new MqttCommunicationException("Connection closed while reading remaining packet body.");
}

// Here is no need to await because internally only an array is used and no real I/O operation is made.
// Using async here will only generate overhead.
body.Write(buffer, 0, readBytesCount);
}



Loading…
Cancel
Save