diff --git a/transport/anytls/session/session.go b/transport/anytls/session/session.go index 946ae9f2..963533ea 100644 --- a/transport/anytls/session/session.go +++ b/transport/anytls/session/session.go @@ -258,19 +258,18 @@ func (s *Session) recvLoop() error { } case cmdUpdatePaddingScheme: if hdr.Length() > 0 { - buffer := pool.Get(int(hdr.Length())) - if _, err := io.ReadFull(s.conn, buffer); err != nil { - pool.Put(buffer) + // `rawScheme` Do not use buffer to prevent subsequent misuse + rawScheme := make([]byte, int(hdr.Length())) + if _, err := io.ReadFull(s.conn, rawScheme); err != nil { return err } if s.isClient { - if padding.UpdatePaddingScheme(buffer, s.padding) { - log.Infoln("[Update padding succeed] %x\n", md5.Sum(buffer)) + if padding.UpdatePaddingScheme(rawScheme, s.padding) { + log.Infoln("[Update padding succeed] %x\n", md5.Sum(rawScheme)) } else { - log.Warnln("[Update padding failed] %x\n", md5.Sum(buffer)) + log.Warnln("[Update padding failed] %x\n", md5.Sum(rawScheme)) } } - pool.Put(buffer) } default: // I don't know what command it is (can't have data)