diff --git a/conn.go b/conn.go index bc42c86..3fe06d8 100644 --- a/conn.go +++ b/conn.go @@ -297,10 +297,11 @@ type conn struct { account *account - rdone chan struct{} - wdone chan struct{} - write chan []byte - werr chan error + rdone chan struct{} + wdone chan struct{} + write chan []byte + werr chan error + encodeBuf []byte // retained request encoding buffer; reused under conn.m m sync.Mutex @@ -435,7 +436,12 @@ func (conn *conn) makeRequestResponse(req smb2.Packet, tc *treeConn, ctx context } } - pkt := make([]byte, req.Size()) + needed := req.Size() + if cap(conn.encodeBuf) < needed { + conn.encodeBuf = make([]byte, needed) + } + pkt := conn.encodeBuf[:needed] + clear(pkt) req.Encode(pkt) @@ -446,6 +452,7 @@ func (conn *conn) makeRequestResponse(req smb2.Packet, tc *treeConn, ctx context if cap(s.encryptBuf) < needed { s.encryptBuf = make([]byte, needed) } + clear(s.encryptBuf[:needed]) pkt, err = s.encrypt(pkt, s.encryptBuf[:needed]) if err != nil { return nil, &InternalError{err.Error()}