From 89e875bf3228dce886a7a3333b960f1ce885a0ed Mon Sep 17 00:00:00 2001 From: lucus Date: Wed, 29 Aug 2018 15:48:51 +0900 Subject: [PATCH] Fix the overlap problem of udp decryption. Now return the correct length of data read by ReadFrom. --- shadowaead/packet.go | 8 ++++++-- shadowstream/packet.go | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/shadowaead/packet.go b/shadowaead/packet.go index d8f20a40..ae5f84d4 100644 --- a/shadowaead/packet.go +++ b/shadowaead/packet.go @@ -88,6 +88,10 @@ func (c *packetConn) ReadFrom(b []byte) (int, net.Addr, error) { if err != nil { return n, addr, err } - b, err = Unpack(b, b[:n], c) - return len(b), addr, err + bb, err := Unpack(b[c.Cipher.SaltSize():], b[:n], c) + if err != nil { + return n, addr, err + } + copy(b, bb) + return len(bb), addr, err } diff --git a/shadowstream/packet.go b/shadowstream/packet.go index b266f581..0defa110 100644 --- a/shadowstream/packet.go +++ b/shadowstream/packet.go @@ -76,5 +76,5 @@ func (c *packetConn) ReadFrom(b []byte) (int, net.Addr, error) { return n, addr, err } copy(b, bb) - return len(b), addr, err + return len(bb), addr, err }