diff --git a/handler/tap/handler.go b/handler/tap/handler.go index e73af6d..1d081a2 100644 --- a/handler/tap/handler.go +++ b/handler/tap/handler.go @@ -204,6 +204,9 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr } return err } + if n == 0 { + return nil + } src := waterutil.MACSource((*b)[:n]) dst := waterutil.MACDestination((*b)[:n]) @@ -260,6 +263,9 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr err != shadowaead.ErrShortPacket { return err } + if n == 0 { + return nil + } src := waterutil.MACSource((*b)[:n]) dst := waterutil.MACDestination((*b)[:n]) diff --git a/handler/tun/server.go b/handler/tun/server.go index cc30a5b..09e7b66 100644 --- a/handler/tun/server.go +++ b/handler/tun/server.go @@ -49,6 +49,9 @@ func (h *tunHandler) transportServer(ctx context.Context, tun io.ReadWriter, con if err != nil { return ErrTun } + if n == 0 { + return nil + } var src, dst net.IP if waterutil.IsIPv4((*b)[:n]) { @@ -110,6 +113,9 @@ func (h *tunHandler) transportServer(ctx context.Context, tun io.ReadWriter, con if err != nil { return err } + if n == 0 { + return nil + } if n > keepAliveHeaderLength && bytes.Equal((*b)[:4], magicHeader) { var peerIPs []net.IP data := (*b)[keepAliveHeaderLength:n]