From 4e9abd41c0680cef72b034d942f5f9f11e947382 Mon Sep 17 00:00:00 2001 From: Jan Eggers Date: Mon, 25 Jun 2018 12:31:19 +0200 Subject: [PATCH] improve error messages --- Source/MQTTnet/Serializer/MqttPacketBodyReader.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/MQTTnet/Serializer/MqttPacketBodyReader.cs b/Source/MQTTnet/Serializer/MqttPacketBodyReader.cs index d751c688..2cf37dd4 100644 --- a/Source/MQTTnet/Serializer/MqttPacketBodyReader.cs +++ b/Source/MQTTnet/Serializer/MqttPacketBodyReader.cs @@ -20,6 +20,7 @@ namespace MQTTnet.Serializer public byte ReadByte() { + ValidateReceiveBuffer(1); return _buffer[_offset++]; } @@ -30,6 +31,8 @@ namespace MQTTnet.Serializer public ushort ReadUInt16() { + ValidateReceiveBuffer(2); + var msb = _buffer[_offset++]; var lsb = _buffer[_offset++]; @@ -40,12 +43,22 @@ namespace MQTTnet.Serializer { var length = ReadUInt16(); + ValidateReceiveBuffer(length); + var result = new ArraySegment(_buffer, _offset, length); _offset += length; return result; } + private void ValidateReceiveBuffer(ushort length) + { + if (_buffer.Length < _offset + length) + { + throw new ArgumentOutOfRangeException(nameof(_buffer), $"expected at least {_offset + length} bytes but there are only {_buffer.Length} bytes"); + } + } + public string ReadStringWithLengthPrefix() { var buffer = ReadWithLengthPrefix();