From 2d7b0e8cd4f1fc6ec840891dbc03b4e781d0a5ad Mon Sep 17 00:00:00 2001 From: RPRX <63339210+RPRX@users.noreply.github.com> Date: Sun, 17 Nov 2024 06:03:25 +0000 Subject: [PATCH] XHTTP client: Fix upload issue in "packet-up" mode inherited from SplitHTTP Fixes https://github.com/XTLS/Xray-core/issues/3972 --- transport/internet/splithttp/dialer.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/transport/internet/splithttp/dialer.go b/transport/internet/splithttp/dialer.go index a63d3253..d2e89eb4 100644 --- a/transport/internet/splithttp/dialer.go +++ b/transport/internet/splithttp/dialer.go @@ -324,7 +324,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me // WithSizeLimit(0) will still allow single bytes to pass, and a lot of // code relies on this behavior. Subtract 1 so that together with // uploadWriter wrapper, exact size limits can be enforced - uploadPipeReader, uploadPipeWriter := pipe.New(pipe.WithSizeLimit(maxUploadSize - 1)) + // uploadPipeReader, uploadPipeWriter := pipe.New(pipe.WithSizeLimit(maxUploadSize - 1)) + uploadPipeReader, uploadPipeWriter := pipe.New(pipe.WithSizeLimit(maxUploadSize - buf.Size)) conn.writer = uploadWriter{ uploadPipeWriter, @@ -400,10 +401,12 @@ type uploadWriter struct { } func (w uploadWriter) Write(b []byte) (int, error) { - capacity := int(w.maxLen - w.Len()) - if capacity > 0 && capacity < len(b) { - b = b[:capacity] - } + /* + capacity := int(w.maxLen - w.Len()) + if capacity > 0 && capacity < len(b) { + b = b[:capacity] + } + */ buffer := buf.New() n, err := buffer.Write(b)