diff --git a/internal/message/connection_request_accepted.go b/internal/message/connection_request_accepted.go index 12efb10..61df91a 100644 --- a/internal/message/connection_request_accepted.go +++ b/internal/message/connection_request_accepted.go @@ -25,17 +25,16 @@ func (pk *ConnectionRequestAccepted) UnmarshalBinary(data []byte) error { pk.SystemIndex = binary.BigEndian.Uint16(data[offset:]) offset += 2 for i := range 20 { - if len(data) < addrSize(data[offset:]) { + if len(data[offset:]) == 16 { + // Some implementations send fewer system addresses. + break + } + if len(data[offset:]) < addrSize(data[offset:]) { return io.ErrUnexpectedEOF } address, n := addr(data[offset:]) pk.SystemAddresses[i] = address offset += n - - if len(data[offset:]) == 16 { - // Some implementations send only 10 system addresses. - break - } } if len(data[offset:]) < 16 { return io.ErrUnexpectedEOF diff --git a/internal/message/new_incoming_connection.go b/internal/message/new_incoming_connection.go index 5e33f02..11deb1d 100644 --- a/internal/message/new_incoming_connection.go +++ b/internal/message/new_incoming_connection.go @@ -22,17 +22,16 @@ func (pk *NewIncomingConnection) UnmarshalBinary(data []byte) error { var offset int pk.ServerAddress, offset = addr(data) for i := range 20 { - if len(data) < addrSize(data[offset:]) { + if len(data[offset:]) == 16 { + // Some implementations send only 10 system addresses. + break + } + if len(data[offset:]) < addrSize(data[offset:]) { return io.ErrUnexpectedEOF } address, n := addr(data[offset:]) pk.SystemAddresses[i] = address offset += n - - if len(data[offset:]) == 16 { - // Some implementations send only 10 system addresses. - break - } } if len(data[offset:]) < 16 { return io.ErrUnexpectedEOF