From 504efbc507a50bd2cf63001511733e232927089f Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Thu, 27 Oct 2022 11:29:31 +0200 Subject: [PATCH] net/http: Fix error unwrapping in transport --- src/net/http/transport.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/net/http/transport.go b/src/net/http/transport.go index 671d9959ea..e39dd35f19 100644 --- a/src/net/http/transport.go +++ b/src/net/http/transport.go @@ -2043,7 +2043,7 @@ func (pc *persistConn) mapRoundTripError(req *transportRequest, startBytesWritte if pc.nwrite == startBytesWritten { return nothingWrittenError{err} } - return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %v", err) + return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %w", err) } return err } @@ -2250,7 +2250,7 @@ func (pc *persistConn) readLoopPeekFailLocked(peekErr error) { // common case. pc.closeLocked(errServerClosedIdle) } else { - pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %v", peekErr)) + pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %w", peekErr)) } } @@ -2384,6 +2384,10 @@ type nothingWrittenError struct { error } +func (nwe nothingWrittenError) Unwrap() error { + return nwe.error +} + func (pc *persistConn) writeLoop() { defer close(pc.writeLoopDone) for { @@ -2621,7 +2625,7 @@ func (pc *persistConn) roundTrip(req *transportRequest) (resp *Response, err err req.logf("writeErrCh resv: %T/%#v", err, err) } if err != nil { - pc.close(fmt.Errorf("write error: %v", err)) + pc.close(fmt.Errorf("write error: %w", err)) return nil, pc.mapRoundTripError(req, startBytesWritten, err) } if d := pc.t.ResponseHeaderTimeout; d > 0 {