From 413d78ffee8b51a350b9f63fdb3d53ed5b1e76bc Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Thu, 27 Jan 2022 22:45:52 -0800 Subject: [PATCH] Fix lint warnings This commit fixes most of warnings, but not all of them. Signed-off-by: Kazuyoshi Kato --- .golangci.yml | 3 ++- bytestream.go | 2 ++ client/keepalive.go | 5 ++++- client/request.go | 21 +++++++++++++-------- request.go | 2 +- text.go | 1 - 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 90f38cf8..b1aa7928 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,7 @@ linters-settings: govet: - check-shadowing: true + # Using err repeatedly considered as shadowing. + check-shadowing: false golint: min-confidence: 0 gocyclo: diff --git a/bytestream.go b/bytestream.go index 6db92e7b..6eb6ceb5 100644 --- a/bytestream.go +++ b/bytestream.go @@ -58,6 +58,7 @@ func ByteStreamConsumer(opts ...byteStreamOpt) Consumer { close = cl.Close } } + //nolint:errcheck // closing a reader wouldn't fail. defer close() if wrtr, ok := data.(io.Writer); ok { @@ -114,6 +115,7 @@ func ByteStreamProducer(opts ...byteStreamOpt) Producer { close = cl.Close } } + //nolint:errcheck // TODO: closing a writer would fail. defer close() if rc, ok := data.(io.ReadCloser); ok { diff --git a/client/keepalive.go b/client/keepalive.go index f8325451..e9c250d6 100644 --- a/client/keepalive.go +++ b/client/keepalive.go @@ -46,7 +46,10 @@ func (d *drainingReadCloser) Read(p []byte) (n int, err error) { func (d *drainingReadCloser) Close() error { // drain buffer if atomic.LoadUint32(&d.seenEOF) != 1 { - //#nosec + // If the reader side (a HTTP server) is misbehaving, it still may send + // some bytes, but the closer ignores them to keep the underling + // connection open. + //nolint:errcheck io.Copy(ioutil.Discard, d.rdr) } return d.rdr.Close() diff --git a/client/request.go b/client/request.go index 079911f2..7d622eee 100644 --- a/client/request.go +++ b/client/request.go @@ -93,6 +93,15 @@ func (r *request) BuildHTTP(mediaType, basePath string, producers map[string]run func escapeQuotes(s string) string { return strings.NewReplacer("\\", "\\\\", `"`, "\\\"").Replace(s) } + +func logClose(err error, pw *io.PipeWriter) { + log.Println(err) + closeErr := pw.CloseWithError(err) + if closeErr != nil { + log.Println(closeErr) + } +} + func (r *request) buildHTTP(mediaType, basePath string, producers map[string]runtime.Producer, registry strfmt.Registry, auth runtime.ClientAuthInfoWriter) (*http.Request, error) { // build the data if err := r.writer.WriteToRequest(r, registry); err != nil { @@ -137,8 +146,7 @@ func (r *request) buildHTTP(mediaType, basePath string, producers map[string]run for fn, v := range r.formFields { for _, vi := range v { if err := mp.WriteField(fn, vi); err != nil { - pw.CloseWithError(err) - log.Println(err) + logClose(err, pw) return } } @@ -157,8 +165,7 @@ func (r *request) buildHTTP(mediaType, basePath string, producers map[string]run buf := make([]byte, 512) size, err := fi.Read(buf) if err != nil { - _ = pw.CloseWithError(err) - log.Println(err) + logClose(err, pw) return } fileContentType := http.DetectContentType(buf) @@ -173,13 +180,11 @@ func (r *request) buildHTTP(mediaType, basePath string, producers map[string]run wrtr, err := mp.CreatePart(h) if err != nil { - pw.CloseWithError(err) - log.Println(err) + logClose(err, pw) return } if _, err := io.Copy(wrtr, newFi); err != nil { - pw.CloseWithError(err) - log.Println(err) + logClose(err, pw) } } } diff --git a/request.go b/request.go index 9e51b42b..078fda17 100644 --- a/request.go +++ b/request.go @@ -48,7 +48,7 @@ func HasBody(r *http.Request) bool { return true } - if r.Header.Get(http.CanonicalHeaderKey("content-length")) != "" { + if r.Header.Get("content-length") != "" { // in this case, no Transfer-Encoding should be present // we have a header set but it was explicitly set to 0, so we assume no body return false diff --git a/text.go b/text.go index c7fd04c3..f33320b7 100644 --- a/text.go +++ b/text.go @@ -41,7 +41,6 @@ func TextConsumer() Consumer { // If the buffer is empty, no need to unmarshal it, which causes a panic. if len(b) == 0 { - data = "" return nil }