From 7a4b0fff078faa3bf00a0589950282e3d6fbd3f8 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Fri, 27 Jul 2018 23:44:22 +0200 Subject: [PATCH] ensure everything are written --- common/crypto/io.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/common/crypto/io.go b/common/crypto/io.go index 3bd33527..c8c044f0 100644 --- a/common/crypto/io.go +++ b/common/crypto/io.go @@ -4,7 +4,6 @@ import ( "crypto/cipher" "io" - "v2ray.com/core/common" "v2ray.com/core/common/buf" ) @@ -55,9 +54,22 @@ func (w *CryptionWriter) Write(data []byte) (int, error) { func (w *CryptionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { defer mb.Release() + size := mb.Len() + if size == 0 { + return nil + } + bs := mb.ToNetBuffers() for _, b := range bs { w.stream.XORKeyStream(b, b) } - return common.Error2(bs.WriteTo(w.writer)) + + for size > 0 { + n, err := bs.WriteTo(w.writer) + if err != nil { + return err + } + size -= int32(n) + } + return nil }