From e4fd2feb26b1e89af4a70e23251f9d76bc5b13e5 Mon Sep 17 00:00:00 2001 From: Sandertv Date: Fri, 21 Jun 2024 21:20:20 +0200 Subject: [PATCH] internal/message: Be more tolerant with the number of system addresses. --- internal/message/connection_request_accepted.go | 11 +++++------ internal/message/new_incoming_connection.go | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) 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