From 6a4ecd79149a25124db339f5f8a5ac85f605248f Mon Sep 17 00:00:00 2001 From: Callum Morris Date: Wed, 25 Mar 2026 08:13:15 +1300 Subject: [PATCH] fix: lint errors --- aws/keyspaces/keyspaces.go | 2 +- aws/s3/s3.go | 20 +++++++++--- aws/s3/s3_integration_test.go | 60 +++++++++++++++++++---------------- cfg/cfg.go | 16 +++++----- cfg/cfg_test.go | 32 +++++++++---------- health/check.go | 2 +- map180/bbox.go | 12 +++---- map180/label.go | 27 ++++++++-------- map180/map.go | 22 ++++++------- map180/marker.go | 14 ++++---- map180/nzmap/nzmap_test.go | 38 +++++++++++----------- metrics/ddog_http.go | 2 +- metrics/ddog_msg.go | 4 +-- sc3ml/quake_test.go | 7 ++-- sc3ml/sc3ml_test.go | 14 ++++---- seis/dl/conn.go | 2 +- seis/ms/blockette.go | 2 +- seis/ms/decode_test.go | 6 ++-- seis/ms/header.go | 8 ++--- seis/ms/record_test.go | 4 +-- seis/ms/steim.go | 24 ++++++++------ seis/ms/unpack.go | 24 +++++++------- seis/sl/conn.go | 2 +- seis/sl/info_test.go | 2 +- seis/sl/slink.go | 6 ++-- seis/sl/state.go | 2 +- seis/sl/state_test.go | 4 ++- shake/stream_test.go | 6 ++-- weft/assets.go | 10 ++++-- weft/handlers.go | 6 ++-- weft/wefttest/wefttest.go | 6 ++-- 31 files changed, 212 insertions(+), 174 deletions(-) diff --git a/aws/keyspaces/keyspaces.go b/aws/keyspaces/keyspaces.go index c68dd064..3d7b0a3b 100644 --- a/aws/keyspaces/keyspaces.go +++ b/aws/keyspaces/keyspaces.go @@ -131,7 +131,7 @@ func generateAuthenticator() (gocql.Authenticator, error) { if err != nil { return nil, err } - var auth sigv4.AwsAuthenticator = sigv4.NewAwsAuthenticator() + auth := sigv4.NewAwsAuthenticator() auth.Region = cfg.Region auth.AccessKeyId = creds.AccessKeyID auth.SecretAccessKey = creds.SecretAccessKey diff --git a/aws/s3/s3.go b/aws/s3/s3.go index f2005cb8..5989a69d 100644 --- a/aws/s3/s3.go +++ b/aws/s3/s3.go @@ -153,7 +153,9 @@ func (s *S3) GetWithContext( if err != nil { return 0, err } - defer result.Body.Close() + defer func() { + _ = result.Body.Close() + }() n, err := io.Copy(w, result.Body) @@ -180,7 +182,9 @@ func (s *S3) GetByteRange(bucket, key, version, byteRange string, b *bytes.Buffe if err != nil { return err } - defer result.Body.Close() + defer func() { + _ = result.Body.Close() + }() _, err = b.ReadFrom(result.Body) @@ -201,7 +205,9 @@ func (s *S3) GetWithLastModified(bucket, key, version string, b *bytes.Buffer) ( if err != nil { return time.Time{}, err } - defer result.Body.Close() + defer func() { + _ = result.Body.Close() + }() _, err = b.ReadFrom(result.Body) @@ -221,7 +227,9 @@ func (s *S3) LastModified(bucket, key, version string) (time.Time, error) { if err != nil { return time.Time{}, err } - defer result.Body.Close() + defer func() { + _ = result.Body.Close() + }() return aws.ToTime(result.LastModified), nil } @@ -538,7 +546,9 @@ func (s *S3) PutStreamWithContext(ctx context.Context, bucket, key string, reade // putStream is the common code used internally to upload a data stream to // an S3 bucket using the client's uploader. func (s *S3) putStream(ctx context.Context, bucket, key string, reader io.ReadCloser) error { - defer reader.Close() + defer func() { + _ = reader.Close() + }() if s.uploader == nil { return errors.New("error uploading to s3, uploader not initialised") diff --git a/aws/s3/s3_integration_test.go b/aws/s3/s3_integration_test.go index 0ba6e644..a76380d1 100644 --- a/aws/s3/s3_integration_test.go +++ b/aws/s3/s3_integration_test.go @@ -39,11 +39,11 @@ const ( // helper functions func setAwsEnv() { - os.Setenv("AWS_REGION", testRegion) - os.Setenv("AWS_SECRET_ACCESS_KEY", "test") - os.Setenv("AWS_ACCESS_KEY_ID", "test") - os.Setenv("AWS_ENDPOINT_URL", customAWSEndpoint) - os.Setenv("AWS_S3_DISABLE_CHECKSUM", "true") + _ = os.Setenv("AWS_REGION", testRegion) + _ = os.Setenv("AWS_SECRET_ACCESS_KEY", "test") + _ = os.Setenv("AWS_ACCESS_KEY_ID", "test") + _ = os.Setenv("AWS_ENDPOINT_URL", customAWSEndpoint) + _ = os.Setenv("AWS_S3_DISABLE_CHECKSUM", "true") } func setup() { @@ -79,21 +79,21 @@ func teardown() { func awsCmdPopulateBucket() { // create test data - tmpDir, _ := os.MkdirTemp("", "") - defer os.RemoveAll(tmpDir) + testFile, _ := os.CreateTemp("", "data-*.txt") + defer func() { + _ = os.Remove(testFile.Name()) + }() - testDataFilepath := filepath.Join(tmpDir, "data.txt") - testFile, _ := os.Create(testDataFilepath) _, _ = testFile.WriteString(testObjectData) - testFile.Close() + _ = testFile.Close() // populate bucket - if err := exec.Command( + if err := exec.Command( //nolint:gosec "aws", "s3api", "put-object", "--bucket", testBucket, "--key", testObjectKey, - "--body", testDataFilepath, + "--body", testFile.Name(), "--metadata", fmt.Sprintf("%v=%v", testMetaKey, testMetaValue), ).Run(); err != nil { @@ -102,7 +102,7 @@ func awsCmdPopulateBucket() { } func awsCmdBucketExists(bucket string) bool { - if err := exec.Command( + if err := exec.Command( //nolint:gosec "aws", "s3api", "head-bucket", "--bucket", bucket, @@ -113,7 +113,7 @@ func awsCmdBucketExists(bucket string) bool { } func awsCmdExists(key string) bool { - if err := exec.Command( + if err := exec.Command( //nolint:gosec "aws", "s3api", "head-object", "--bucket", testBucket, @@ -126,7 +126,7 @@ func awsCmdExists(key string) bool { } func awsCmdPutKey(key string) { - if err := exec.Command( + if err := exec.Command( //nolint:gosec "aws", "s3api", "put-object", "--bucket", testBucket, @@ -140,16 +140,18 @@ func awsCmdPutKey(key string) { func awsCmdPutKeys(keys []string) { // create test data tmpDir, _ := os.MkdirTemp("", "") - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() for _, k := range keys { testDataFilepath := filepath.Join(tmpDir, k) - testFile, _ := os.Create(testDataFilepath) + testFile, _ := os.Create(testDataFilepath) //nolint:gosec _, _ = testFile.WriteString(testObjectData) - testFile.Close() + _ = testFile.Close() } // sync to bucket - cmd := exec.Command( + cmd := exec.Command( //nolint:gosec "aws", "s3", "sync", tmpDir, fmt.Sprintf("s3://%v", testBucket), ) @@ -200,21 +202,21 @@ func awsCmdMeta() awsMeta { } func awsCmdGetTestObject() string { - tmpDir, _ := os.MkdirTemp("", "") - defer os.RemoveAll(tmpDir) - - testDataFilepath := filepath.Join(tmpDir, "data.txt") + testFile, _ := os.CreateTemp("", "data-*.txt") + defer func() { + _ = os.Remove(testFile.Name()) + }() - if err := exec.Command( + if err := exec.Command( //nolint:gosec "aws", "s3api", "get-object", "--bucket", testBucket, "--key", testObjectKey, - testDataFilepath).Run(); err != nil { + testFile.Name()).Run(); err != nil { panic(err) } - testFileContents, _ := os.ReadFile(testDataFilepath) + testFileContents, _ := os.ReadFile(testFile.Name()) return string(testFileContents) } @@ -255,7 +257,8 @@ func TestCreateS3ClientAndReady(t *testing.T) { // test bad case // ARRANGE - os.Unsetenv("AWS_REGION") + err = os.Unsetenv("AWS_REGION") + require.Nil(t, err) // ACTION client, err = New() @@ -279,7 +282,8 @@ func TestCreateS3ClientWithMaxRetries(t *testing.T) { // test bad case // ARRANGE - os.Unsetenv("AWS_REGION") + err = os.Unsetenv("AWS_REGION") + require.Nil(t, err) // ACTION _, err = NewWithMaxRetries(2) diff --git a/cfg/cfg.go b/cfg/cfg.go index fb3ce223..e4ff3ce4 100644 --- a/cfg/cfg.go +++ b/cfg/cfg.go @@ -36,21 +36,21 @@ func PostgresEnv() (Postgres, error) { switch "" { case p.Host: - return Postgres{}, errors.New("DB_HOST env var must be set.") + return Postgres{}, errors.New("DB_HOST env var must be set") case p.User: - return Postgres{}, errors.New("DB_USER env var must be set.") + return Postgres{}, errors.New("DB_USER env var must be set") case p.Password: - return Postgres{}, errors.New("DB_PASSWD env var must be set.") + return Postgres{}, errors.New("DB_PASSWD env var must be set") case p.Name: - return Postgres{}, errors.New("DB_NAME env var must be set.") + return Postgres{}, errors.New("DB_NAME env var must be set") case p.SSLMode: - return Postgres{}, errors.New("DB_SSLMODE env var must be set.") + return Postgres{}, errors.New("DB_SSLMODE env var must be set") case c: - return Postgres{}, errors.New("DB_CONN_TIMEOUT env var must be set.") + return Postgres{}, errors.New("DB_CONN_TIMEOUT env var must be set") case idle: - return Postgres{}, errors.New("DB_MAX_IDLE_CONNS env var must be set.") + return Postgres{}, errors.New("DB_MAX_IDLE_CONNS env var must be set") case open: - return Postgres{}, errors.New("DB_MAX_OPEN_CONNS env var must be set.") + return Postgres{}, errors.New("DB_MAX_OPEN_CONNS env var must be set") } var err error diff --git a/cfg/cfg_test.go b/cfg/cfg_test.go index 42741fcf..17eba5c2 100644 --- a/cfg/cfg_test.go +++ b/cfg/cfg_test.go @@ -9,14 +9,14 @@ import ( ) func TestPostgresEnv(t *testing.T) { - os.Setenv("DB_HOST", "") - os.Setenv("DB_USER", "") - os.Setenv("DB_PASSWD", "") - os.Setenv("DB_NAME", "") - os.Setenv("DB_SSLMODE", "") - os.Setenv("DB_CONN_TIMEOUT", "") - os.Setenv("DB_MAX_IDLE_CONNS", "") - os.Setenv("DB_MAX_OPEN_CONNS", "") + _ = os.Setenv("DB_HOST", "") + _ = os.Setenv("DB_USER", "") + _ = os.Setenv("DB_PASSWD", "") + _ = os.Setenv("DB_NAME", "") + _ = os.Setenv("DB_SSLMODE", "") + _ = os.Setenv("DB_CONN_TIMEOUT", "") + _ = os.Setenv("DB_MAX_IDLE_CONNS", "") + _ = os.Setenv("DB_MAX_OPEN_CONNS", "") var err error @@ -28,7 +28,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_HOST... got: %s", err.Error()) } - os.Setenv("DB_HOST", "host") + _ = os.Setenv("DB_HOST", "host") _, err = cfg.PostgresEnv() if err == nil { @@ -38,7 +38,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_USER... got: %s", err.Error()) } - os.Setenv("DB_USER", "user") + _ = os.Setenv("DB_USER", "user") _, err = cfg.PostgresEnv() if err == nil { @@ -48,7 +48,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_NAME... got: %s", err.Error()) } - os.Setenv("DB_PASSWD", "passwd") + _ = os.Setenv("DB_PASSWD", "passwd") _, err = cfg.PostgresEnv() if err == nil { @@ -58,7 +58,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_NAME... got: %s", err.Error()) } - os.Setenv("DB_NAME", "name") + _ = os.Setenv("DB_NAME", "name") _, err = cfg.PostgresEnv() if err == nil { @@ -68,7 +68,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_SSLMODE... got: %s", err.Error()) } - os.Setenv("DB_SSLMODE", "false") + _ = os.Setenv("DB_SSLMODE", "false") _, err = cfg.PostgresEnv() if err == nil { @@ -78,7 +78,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_CONN_TIMEOUT... got: %s", err.Error()) } - os.Setenv("DB_CONN_TIMEOUT", "30") + _ = os.Setenv("DB_CONN_TIMEOUT", "30") _, err = cfg.PostgresEnv() if err == nil { @@ -88,7 +88,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_MAX_IDLE_CONNS... got: %s", err.Error()) } - os.Setenv("DB_MAX_IDLE_CONNS", "1") + _ = os.Setenv("DB_MAX_IDLE_CONNS", "1") _, err = cfg.PostgresEnv() if err == nil { @@ -98,7 +98,7 @@ func TestPostgresEnv(t *testing.T) { t.Errorf("expected error starting with DB_MAX_OPEN_CONNS... got: %s", err.Error()) } - os.Setenv("DB_MAX_OPEN_CONNS", "2") + _ = os.Setenv("DB_MAX_OPEN_CONNS", "2") p, err := cfg.PostgresEnv() if err != nil { diff --git a/health/check.go b/health/check.go index a770ae60..a59c29b0 100644 --- a/health/check.go +++ b/health/check.go @@ -39,7 +39,7 @@ func Check(ctx context.Context, servicePath string, timeout time.Duration) ([]by } defer func() { _, _ = io.Copy(io.Discard, resp.Body) - resp.Body.Close() + _ = resp.Body.Close() }() body, err := io.ReadAll(resp.Body) diff --git a/map180/bbox.go b/map180/bbox.go index c914b3ff..e06b37f3 100644 --- a/map180/bbox.go +++ b/map180/bbox.go @@ -65,25 +65,25 @@ func newBbox(boundingBox string) (b bbox, err error) { b.llx, err = strconv.ParseFloat(s[0], 64) if err != nil { - err = fmt.Errorf("Invalid boundingBox: %s", boundingBox) + err = fmt.Errorf("invalid boundingBox: %s", boundingBox) return } b.lly, err = strconv.ParseFloat(s[1], 64) if err != nil { - err = fmt.Errorf("Invalid boundingBox: %s", boundingBox) + err = fmt.Errorf("invalid boundingBox: %s", boundingBox) return } b.urx, err = strconv.ParseFloat(s[2], 64) if err != nil { - err = fmt.Errorf("Invalid boundingBox: %s", boundingBox) + err = fmt.Errorf("invalid boundingBox: %s", boundingBox) return } b.ury, err = strconv.ParseFloat(s[3], 64) if err != nil { - err = fmt.Errorf("Invalid boundingBox: %s", boundingBox) + err = fmt.Errorf("invalid boundingBox: %s", boundingBox) return } @@ -176,7 +176,7 @@ func (b *bbox) newMap3857(width int) (m map3857, err error) { // tried using st_MakeEnvelope so that only needed to hit DB once // but it does not do what I for crossing 180 err = db.QueryRow(`with p as ( - select st_transform(st_setsrid(st_makepoint($1, $2), 4326), 3857) as pt + select st_transform(st_setsrid(st_makepoint($1, $2), 4326), 3857) as pt ) select ST_X(pt), ST_Y(pt) from p;`, b.llx, b.lly).Scan(&m.llx, &m.lly) if err != nil { @@ -184,7 +184,7 @@ func (b *bbox) newMap3857(width int) (m map3857, err error) { } err = db.QueryRow(`with p as ( - select st_transform(st_setsrid(st_makepoint($1, $2), 4326), 3857) as pt + select st_transform(st_setsrid(st_makepoint($1, $2), 4326), 3857) as pt ) select ST_X(pt), ST_Y(pt) from p;`, b.urx, b.ury).Scan(&m.urx, &m.ury) if err != nil { diff --git a/map180/label.go b/map180/label.go index ad694da1..43b5b91a 100644 --- a/map180/label.go +++ b/map180/label.go @@ -16,8 +16,8 @@ type label struct { func (m *map3857) labels() (l []label, err error) { rows, err := db.Query(`with l as ( - select st_transScale(geom, $5, $6, $7, $8) as pt, type, name from public.map180_labels - where + select st_transScale(geom, $5, $6, $7, $8) as pt, type, name from public.map180_labels + where ST_Within(geom, ST_MakeEnvelope($1,$2,$3,$4, 3857)) AND zoom = $9 ) @@ -25,7 +25,9 @@ func (m *map3857) labels() (l []label, err error) { if err != nil { return } - defer rows.Close() + defer func() { + _ = rows.Close() + }() for rows.Next() { lb := label{} @@ -35,7 +37,6 @@ func (m *map3857) labels() (l []label, err error) { } l = append(l, lb) } - rows.Close() return } @@ -44,23 +45,23 @@ func labelsToSVG(labels []label) string { var b bytes.Buffer for _, l := range labels { - l.label = strings.Replace(l.label, `Mount`, `Mt`, -1) + l.label = strings.ReplaceAll(l.label, `Mount`, `Mt`) caser := cases.Title(language.BritishEnglish) l.label = caser.String(strings.ToLower(l.label)) switch l.featureType { case 0: - b.WriteString(fmt.Sprintf("", l.x, l.y)) - b.WriteString(fmt.Sprintf("%s", l.x+3, l.y+5, 11, l.label)) + fmt.Fprintf(&b, "", l.x, l.y) + fmt.Fprintf(&b, "%s", l.x+3, l.y+5, 11, l.label) case 1: - b.WriteString(fmt.Sprintf(" ", l.x, l.y)) - b.WriteString(fmt.Sprintf("%s", l.x+3, l.y+5, 11, l.label)) + fmt.Fprintf(&b, " ", l.x, l.y) + fmt.Fprintf(&b, "%s", l.x+3, l.y+5, 11, l.label) case 3: - b.WriteString(fmt.Sprintf("", l.x, l.y)) - b.WriteString(fmt.Sprintf("%s", l.x+3, l.y+5, 11, l.label)) + fmt.Fprintf(&b, "", l.x, l.y) + fmt.Fprintf(&b, "%s", l.x+3, l.y+5, 11, l.label) case 4: - b.WriteString(fmt.Sprintf("", l.x, l.y)) - b.WriteString(fmt.Sprintf("%s", l.x+3, l.y+5, 11, l.label)) + fmt.Fprintf(&b, "", l.x, l.y) + fmt.Fprintf(&b, "%s", l.x+3, l.y+5, 11, l.label) } } diff --git a/map180/map.go b/map180/map.go index 595f2e8b..b5438444 100644 --- a/map180/map.go +++ b/map180/map.go @@ -138,8 +138,8 @@ func (w *Map180) SVG(boundingBox string, width int, markers []Marker, insetBbox } buf.WriteString(``) - buf.WriteString(fmt.Sprintf("", - m.height, m.width)) + fmt.Fprintf(&buf, "", + m.height, m.width) if b.title != "" { buf.WriteString(`Map of ` + b.title + `.`) } else { @@ -201,8 +201,8 @@ func (w *Map180) SVG(boundingBox string, width int, markers []Marker, insetBbox ibboxul.y = ibboxul.y - 2 } - buf.WriteString(fmt.Sprintf("", - in.width+6, in.height+6)) + fmt.Fprintf(&buf, "", + in.width+6, in.height+6) buf.WriteString(insetMap) @@ -245,8 +245,8 @@ func (w *Map180) Map(boundingBox string, width int, pts Points, insetBbox string } buf.WriteString(``) - buf.WriteString(fmt.Sprintf("", - m.width, m.height)) + fmt.Fprintf(buf, "", + m.width, m.height) if b.title != "" { buf.WriteString(`Map of ` + b.title + `.`) } else { @@ -308,8 +308,8 @@ func (w *Map180) Map(boundingBox string, width int, pts Points, insetBbox string ibboxul.y = ibboxul.y - 2 } - buf.WriteString(fmt.Sprintf("", - in.width+6, in.height+6)) + fmt.Fprintf(buf, "", + in.width+6, in.height+6) buf.WriteString(insetMap) @@ -454,8 +454,8 @@ func layerGetter(ctx context.Context, key string, dest groupcache.Sink) error { var b bytes.Buffer - b.WriteString(fmt.Sprintf("", land)) - b.WriteString(fmt.Sprintf("", lakes)) + fmt.Fprintf(&b, "", land) + fmt.Fprintf(&b, "", lakes) b.WriteString(labelsToSVG(l)) return dest.SetString(b.String()) @@ -497,7 +497,7 @@ func (m *map3857) toKey() string { func fromKey(key string) (m map3857, err error) { k := strings.Split(key, ",") if len(k) != 12 { - err = fmt.Errorf("Wrong length for key exptected 12 got %d", len(k)) + err = fmt.Errorf("wrong length for key exptected 12 got %d", len(k)) return } diff --git a/map180/marker.go b/map180/marker.go index 28230e9c..99c1d099 100644 --- a/map180/marker.go +++ b/map180/marker.go @@ -61,12 +61,12 @@ func SVGTriangle(m Marker, b *bytes.Buffer) { h := w * 2 c := int(float64(h) * 0.33) - b.WriteString(fmt.Sprintf("", - m.id, int(m.x), int(m.y)+c, w, w, h, w, h, m.svgColour)) + fmt.Fprintf(b, "", + m.id, int(m.x), int(m.y)+c, w, w, h, w, h, m.svgColour) b.WriteString(`` + m.label + `.`) b.WriteString(``) - b.WriteString(fmt.Sprintf("", - int(m.x), int(m.y)+c, w, w, h, w, h, m.svgColour)) + fmt.Fprintf(b, "", + int(m.x), int(m.y)+c, w, w, h, w, h, m.svgColour) } // puts the label or short label on the SVG image all at the same place. @@ -74,14 +74,14 @@ func SVGTriangle(m Marker, b *bytes.Buffer) { func labelMarkers(m []Marker, x, y int, anchor string, fontSize int, short bool, b *bytes.Buffer) { b.WriteString(``) for _, mr := range m { - b.WriteString(fmt.Sprintf("", x, y, fontSize, anchor)) + fmt.Fprintf(b, "", x, y, fontSize, anchor) if short { b.WriteString(mr.shortLabel) } else { b.WriteString(mr.label) } - b.WriteString(fmt.Sprintf("", - mr.id, mr.id)) + fmt.Fprintf(b, "", + mr.id, mr.id) b.WriteString(``) } b.WriteString(``) diff --git a/map180/nzmap/nzmap_test.go b/map180/nzmap/nzmap_test.go index 0c9705ed..fe0a995e 100644 --- a/map180/nzmap/nzmap_test.go +++ b/map180/nzmap/nzmap_test.go @@ -9,7 +9,7 @@ import ( // these tests also output SVG to svg_test/ for visual inspection. func init() { - if err := os.Mkdir("svg_test", 0755); err != nil { + if err := os.Mkdir("svg_test", 0700); err != nil { fmt.Println("Error creating svg_test directory", err) } } @@ -26,9 +26,9 @@ func TestIconWellington(t *testing.T) { t.Error("point should be on the icon map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) - if err := os.WriteFile("svg_test/nzicon-wellington.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzicon-wellington.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -45,9 +45,9 @@ func TestIconRaoul(t *testing.T) { t.Error("point should be on the icon map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) - if err := os.WriteFile("svg_test/nzicon-raoul.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzicon-raoul.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -64,9 +64,9 @@ func TestIconAucklandIsland(t *testing.T) { t.Error("point should be on the icon map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) - if err := os.WriteFile("svg_test/nzicon-aucklandisland.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzicon-aucklandisland.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -83,9 +83,9 @@ func TestIconCanberra(t *testing.T) { t.Error("point should not be on the icon map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) - if err := os.WriteFile("svg_test/nzicon-canberra.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzicon-canberra.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -107,12 +107,12 @@ func TestMediumWellington(t *testing.T) { t.Error("point should be on the map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) } b.WriteString("") - if err := os.WriteFile("svg_test/nzmedium-wellington.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzmedium-wellington.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -135,12 +135,12 @@ func TestMediumIob(t *testing.T) { t.Error("point should not be on the map") } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) } b.WriteString("") - if err := os.WriteFile("svg_test/nzmedium-iob.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzmedium-iob.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -148,7 +148,7 @@ func TestMediumIob(t *testing.T) { func TestMediumRegionWellington(t *testing.T) { var b bytes.Buffer - var pt Points = Points{ + pt := Points{ // ~ Wellington Point{Longitude: 174.7, Latitude: -41.2, @@ -190,12 +190,12 @@ func TestMediumRegionWellington(t *testing.T) { } } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) } b.WriteString("") - if err := os.WriteFile("svg_test/nzmediumregion-wellington.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzmediumregion-wellington.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } @@ -203,7 +203,7 @@ func TestMediumRegionWellington(t *testing.T) { func TestMediumRegionRaoul(t *testing.T) { var b bytes.Buffer - var pt Points = Points{ + pt := Points{ // ~ Raoul Point{Longitude: -177.9286, Latitude: -29.2684, @@ -244,12 +244,12 @@ func TestMediumRegionRaoul(t *testing.T) { } } - b.WriteString(fmt.Sprintf("", p.X(), p.Y())) + fmt.Fprintf(&b, "", p.X(), p.Y()) } b.WriteString("") - if err := os.WriteFile("svg_test/nzmediumregion-raoul.svg", b.Bytes(), 0644); err != nil { // nolint: gosec + if err := os.WriteFile("svg_test/nzmediumregion-raoul.svg", b.Bytes(), 0600); err != nil { t.Fatal(err) } } diff --git a/metrics/ddog_http.go b/metrics/ddog_http.go index f4694ab8..65115b7c 100644 --- a/metrics/ddog_http.go +++ b/metrics/ddog_http.go @@ -186,7 +186,7 @@ func dogHttp(apiKey, hostName, appName string, m runtime.MemStats, t []TimerStat time.Sleep(time.Second << uint(tries)) //nolint:gosec } if res != nil { - res.Body.Close() + _ = res.Body.Close() } return err diff --git a/metrics/ddog_msg.go b/metrics/ddog_msg.go index c102d1da..7acf7a94 100644 --- a/metrics/ddog_msg.go +++ b/metrics/ddog_msg.go @@ -33,7 +33,7 @@ type series struct { // AppName returns the application name. func AppName() string { s := os.Args[0] - return strings.Replace(s[strings.LastIndex(s, "/")+1:], "-", "_", -1) + return strings.ReplaceAll(s[strings.LastIndex(s, "/")+1:], "-", "_") } // Hostname returns the hostname (can be empty). @@ -219,7 +219,7 @@ func dogMsg(apiKey, hostName, appName string, m runtime.MemStats, t []TimerStats time.Sleep(time.Second << uint(tries)) //nolint:gosec } if res != nil { - res.Body.Close() + _ = res.Body.Close() } return err diff --git a/sc3ml/quake_test.go b/sc3ml/quake_test.go index 6b71a9ab..a6ed47cd 100644 --- a/sc3ml/quake_test.go +++ b/sc3ml/quake_test.go @@ -10,7 +10,7 @@ import ( func TestFromSC3ML(t *testing.T) { for _, input := range []string{"2015p768477_0.7.xml", "2015p768477_0.8.xml", "2015p768477_0.9.xml", "2015p768477_0.10.xml"} { - r, err := os.Open("testdata/" + input) + r, err := os.Open("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -19,7 +19,10 @@ func TestFromSC3ML(t *testing.T) { if err != nil { t.Errorf("%s: %s", input, err.Error()) } - r.Close() + err = r.Close() + if err != nil { + t.Fatal(err) + } if e.PublicID != "2015p768477" { t.Errorf("%s: expected publicID 2015p768477 got %s", input, e.PublicID) diff --git a/sc3ml/sc3ml_test.go b/sc3ml/sc3ml_test.go index a4b64596..ac29bf4c 100644 --- a/sc3ml/sc3ml_test.go +++ b/sc3ml/sc3ml_test.go @@ -23,7 +23,7 @@ the version. The validating them using the XSDs: */ func TestUnmarshal(t *testing.T) { for _, input := range []string{"2015p768477_0.7.xml", "2015p768477_0.8.xml", "2015p768477_0.9.xml", "2015p768477_0.10.xml", "2015p768477_0.11.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -205,7 +205,7 @@ func TestUnmarshal(t *testing.T) { t.Errorf("%s: m.MethodID expected trimmed mean got %s", input, m.MethodID) } - if !(len(m.StationMagnitudeContributions) > 1) { + if len(m.StationMagnitudeContributions) < 2 { t.Error("expected more than 1 StationMagnitudeContribution") } @@ -266,7 +266,7 @@ func TestUnmarshal(t *testing.T) { func TestUnmarshall10(t *testing.T) { for _, input := range []string{"2018p587301-201808060715471135_0.10.xml", "2018p632195-201808222155051312_0.10.xml", "2018p587301-201808060715471135_0.11.xml", "2018p632195-201808222155051312_0.11.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -311,7 +311,7 @@ func TestUnmarshall10(t *testing.T) { func TestDecodeSC3ML07CMT(t *testing.T) { for _, input := range []string{"2016p408314-201606010431276083_0.7.xml", "2016p408314-201606010431276083_0.8.xml", "2016p408314-201606010431276083_0.9.xml", "2016p408314-201606010431276083_0.10.xml", "2016p408314-201606010431276083_0.11.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -392,7 +392,7 @@ func TestDecodeSC3ML07CMT(t *testing.T) { func TestUnmarshall06(t *testing.T) { for _, input := range []string{"2801727_0.6.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -473,7 +473,7 @@ func TestUnmarshall06(t *testing.T) { func TestUnmarshall12_13(t *testing.T) { for _, input := range []string{"2024p344188_0.12.xml", "2024p344188_0.13.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } @@ -554,7 +554,7 @@ func TestUnmarshall12_13(t *testing.T) { func TestUnmarshalUnsupported(t *testing.T) { for _, input := range []string{"2015p768477_0.4.xml"} { - b, err := os.ReadFile("testdata/" + input) + b, err := os.ReadFile("testdata/" + input) //nolint:gosec if err != nil { t.Fatal(err) } diff --git a/seis/dl/conn.go b/seis/dl/conn.go index 03894b9d..d49e94ba 100644 --- a/seis/dl/conn.go +++ b/seis/dl/conn.go @@ -141,7 +141,7 @@ func (d *DLConn) WriteMS(srcname string, start, end time.Time, data []byte) erro } func (d *DLConn) setDeadline() error { - if !(d.timeout > 0) { + if d.timeout < 1 { return nil } return d.SetDeadline(time.Now().Add(d.timeout)) diff --git a/seis/ms/blockette.go b/seis/ms/blockette.go index e70d3eb9..3a932c90 100644 --- a/seis/ms/blockette.go +++ b/seis/ms/blockette.go @@ -116,7 +116,7 @@ func DecodeBlockette1001(data []byte) Blockette1001 { return Blockette1001{ TimingQuality: b[0], - MicroSec: int8(b[1]), + MicroSec: int8(b[1]), //nolint:gosec Reserved: b[2], FrameCount: b[3], } diff --git a/seis/ms/decode_test.go b/seis/ms/decode_test.go index a2f851cb..ff4dc361 100644 --- a/seis/ms/decode_test.go +++ b/seis/ms/decode_test.go @@ -16,7 +16,7 @@ func TestRecord_Bytes(t *testing.T) { for k, v := range files { t.Run("decode data: "+k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + k) + raw, err := os.ReadFile("testdata/" + k) //nolint:gosec if err != nil { t.Fatal(err) } @@ -58,7 +58,7 @@ func TestRecord_Int32s(t *testing.T) { for k, v := range files { t.Run("decode data: "+k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + k) + raw, err := os.ReadFile("testdata/" + k) //nolint:gosec if err != nil { t.Fatal(err) } @@ -95,7 +95,7 @@ func TestRecord_Float32s(t *testing.T) { for k, v := range files { t.Run("decode data: "+k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + k) + raw, err := os.ReadFile("testdata/" + k) //nolint:gosec if err != nil { t.Fatal(err) } diff --git a/seis/ms/header.go b/seis/ms/header.go index 13c26ee8..b15c6018 100644 --- a/seis/ms/header.go +++ b/seis/ms/header.go @@ -144,20 +144,20 @@ func (h RecordHeader) SamplePeriod() time.Duration { // IsValid performs a simple consistency check of the RecordHeader contents. func (h RecordHeader) IsValid() bool { for _, b := range h.SequenceNumber { - if !((b >= '0' && b <= '9') || (b == ' ') || (b == 0)) { + if (b < '0' || b > '9') && (b != ' ') && (b != 0) { return false } } - if q := h.DataQualityIndicator; !(q == 'D' || q == 'R' || q == 'M' || q == 'Q') { + if q := h.DataQualityIndicator; q != 'D' && q != 'R' && q != 'M' && q != 'Q' { return false } - if b := h.ReservedByte; !(b == ' ' || b == 0) { + if b := h.ReservedByte; b != ' ' && b != 0 { return false } - if s := h.RecordStartTime; !(s.Hour <= 23 && s.Minute <= 59 && s.Second <= 60) { + if s := h.RecordStartTime; s.Hour > 23 || s.Minute > 59 || s.Second > 60 { return false } diff --git a/seis/ms/record_test.go b/seis/ms/record_test.go index 75654e40..2b207d29 100644 --- a/seis/ms/record_test.go +++ b/seis/ms/record_test.go @@ -20,7 +20,7 @@ func TestRecord_Unpack(t *testing.T) { for _, k := range files { t.Run("unpack header: "+k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + k) + raw, err := os.ReadFile("testdata/" + k) //nolint:gosec if err != nil { t.Fatal(err) } @@ -47,7 +47,7 @@ func TestRecord_File(t *testing.T) { for k, v := range files { t.Run("unpack header: "+k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + k) + raw, err := os.ReadFile("testdata/" + k) //nolint:gosec if err != nil { t.Fatal(err) } diff --git a/seis/ms/steim.go b/seis/ms/steim.go index 107e83ea..1d88dbd6 100644 --- a/seis/ms/steim.go +++ b/seis/ms/steim.go @@ -109,7 +109,8 @@ func decodeSteim(version int, raw []byte, wordOrder, frameCount uint8, expectedS skipFirstDiff = 1 } - if version == 2 { + switch version { + case 2: switch nib { case 1: //4 8bit differences d = applyDifferencesFromWord(wb, 4-skipFirstDiff, 8, d) @@ -136,16 +137,21 @@ func decodeSteim(version int, raw []byte, wordOrder, frameCount uint8, expectedS return d, fmt.Errorf("steim%v: nib 11 dnib 11 is an illegal configuration @ frame %v word %v", version, f, w) } } - } else if version == 1 { - switch nib { - case 1: //4 8bit differences - d = applyDifferencesFromWord(wb, 4-skipFirstDiff, 8, d) - case 2: //2 16bit differences - d = applyDifferencesFromWord(wb, 2-skipFirstDiff, 16, d) - case 3: //1 32bit difference - d = applyDifferencesFromWord(wb, 1-skipFirstDiff, 32, d) + case 1: + { + switch nib { + case 1: //4 8bit differences + d = applyDifferencesFromWord(wb, 4-skipFirstDiff, 8, d) + case 2: //2 16bit differences + d = applyDifferencesFromWord(wb, 2-skipFirstDiff, 16, d) + case 3: //1 32bit difference + d = applyDifferencesFromWord(wb, 1-skipFirstDiff, 32, d) + } } + default: + // invalid version } + } } diff --git a/seis/ms/unpack.go b/seis/ms/unpack.go index 57519dfb..e1b89ea3 100644 --- a/seis/ms/unpack.go +++ b/seis/ms/unpack.go @@ -14,12 +14,12 @@ func (m *Record) Unpack(buf []byte) error { } m.RecordHeader = DecodeRecordHeader(buf[0:RecordHeaderSize]) - if !m.RecordHeader.IsValid() { + if !m.IsValid() { return fmt.Errorf("unpack: input is not a valid MSEED record: incorrect header") } - pointer := m.RecordHeader.FirstBlockette //TODO: This could be replaced with bytes.Reader() - for i := 0; i < int(m.RecordHeader.NumberOfBlockettesThatFollow); i++ { + pointer := m.FirstBlockette //TODO: This could be replaced with bytes.Reader() + for i := 0; i < int(m.NumberOfBlockettesThatFollow); i++ { if pointer == 0 { return fmt.Errorf("unpack: next blockette pointer == 0 after %v blockettes", i-1) } @@ -47,8 +47,8 @@ func (m *Record) Unpack(buf []byte) error { pointer = bhead.NextBlockette } - m.Data = make([]byte, len(buf)-int(m.RecordHeader.BeginningOfData)) - copy(m.Data, buf[m.RecordHeader.BeginningOfData:]) + m.Data = make([]byte, len(buf)-int(m.BeginningOfData)) + copy(m.Data, buf[m.BeginningOfData:]) return nil } @@ -56,7 +56,7 @@ func (m *Record) Unpack(buf []byte) error { func (m Record) Bytes() ([]byte, error) { switch enc := Encoding(m.B1000.Encoding); enc { case EncodingASCII: - return trimRight(m.Data[:m.RecordHeader.NumberOfSamples]), nil + return trimRight(m.Data[:m.NumberOfSamples]), nil default: return nil, fmt.Errorf("invalid encoding %v", enc) } @@ -66,7 +66,7 @@ func (m Record) Strings() ([]string, error) { switch enc := Encoding(m.B1000.Encoding); enc { case EncodingASCII: var lines []string - buf := bytes.NewBuffer(trimRight(m.Data[:m.RecordHeader.NumberOfSamples])) + buf := bytes.NewBuffer(trimRight(m.Data[:m.NumberOfSamples])) scanner := bufio.NewScanner(buf) for scanner.Scan() { lines = append(lines, scanner.Text()) @@ -83,7 +83,7 @@ func (m Record) Strings() ([]string, error) { func (m Record) Int32s() ([]int32, error) { switch enc := Encoding(m.B1000.Encoding); enc { case EncodingInt32: - return decodeInt32(m.Data, m.B1000.WordOrder, m.RecordHeader.NumberOfSamples) + return decodeInt32(m.Data, m.B1000.WordOrder, m.NumberOfSamples) case EncodingSTEIM1: framecount := uint8(len(m.Data) / 64) //nolint:gosec if m.B1001.FrameCount != 0 { @@ -92,7 +92,7 @@ func (m Record) Int32s() ([]int32, error) { if int(framecount)*64 > len(m.Data) { //make sure the decoding doesn't overrun the buffer return nil, fmt.Errorf("unpack: header reported more bytes then are present in data packet: %v > %v", framecount*64, len(m.Data)) } - return decodeSteim(1, m.Data, m.B1000.WordOrder, framecount, m.RecordHeader.NumberOfSamples) + return decodeSteim(1, m.Data, m.B1000.WordOrder, framecount, m.NumberOfSamples) case EncodingSTEIM2: //STEIM2 framecount := uint8(len(m.Data) / 64) //nolint:gosec if m.B1001.FrameCount != 0 { @@ -101,7 +101,7 @@ func (m Record) Int32s() ([]int32, error) { if int(framecount)*64 > len(m.Data) { //make sure the decoding doesn't overrun the buffer return nil, fmt.Errorf("unpack: header reported more bytes then are present in data packet: %v > %v", framecount*64, len(m.Data)) } - return decodeSteim(2, m.Data, m.B1000.WordOrder, framecount, m.RecordHeader.NumberOfSamples) + return decodeSteim(2, m.Data, m.B1000.WordOrder, framecount, m.NumberOfSamples) case EncodingIEEEFloat, EncodingIEEEDouble: samples, err := m.Float64s() if err != nil { @@ -130,7 +130,7 @@ func (m Record) Float64s() ([]float64, error) { } return res, nil case EncodingIEEEFloat: - samples, err := decodeFloat32(m.Data, m.B1000.WordOrder, m.RecordHeader.NumberOfSamples) + samples, err := decodeFloat32(m.Data, m.B1000.WordOrder, m.NumberOfSamples) if err != nil { return nil, err } @@ -140,7 +140,7 @@ func (m Record) Float64s() ([]float64, error) { } return res, nil case EncodingIEEEDouble: - return decodeFloat64(m.Data, m.B1000.WordOrder, m.RecordHeader.NumberOfSamples) + return decodeFloat64(m.Data, m.B1000.WordOrder, m.NumberOfSamples) default: return nil, fmt.Errorf("invalid encoding %v", enc) } diff --git a/seis/sl/conn.go b/seis/sl/conn.go index c67d5db7..d7419b75 100644 --- a/seis/sl/conn.go +++ b/seis/sl/conn.go @@ -95,7 +95,7 @@ func NewConn(service string, timeout time.Duration) (*Conn, error) { } func (c *Conn) setDeadline() error { - if !(c.timeout > 0) { + if c.timeout < 1 { return nil } return c.SetDeadline(time.Now().Add(c.timeout)) diff --git a/seis/sl/info_test.go b/seis/sl/info_test.go index fa76e8e9..3859be66 100644 --- a/seis/sl/info_test.go +++ b/seis/sl/info_test.go @@ -16,7 +16,7 @@ func TestStationInfo(t *testing.T) { for k, v := range checks { t.Run(k, func(t *testing.T) { - raw, err := os.ReadFile("testdata/" + v) + raw, err := os.ReadFile("testdata/" + v) //nolint:gosec if err != nil { t.Fatal(err) } diff --git a/seis/sl/slink.go b/seis/sl/slink.go index 74f51368..c1b6e316 100644 --- a/seis/sl/slink.go +++ b/seis/sl/slink.go @@ -209,7 +209,9 @@ func (s *SLink) CollectWithContext(ctx context.Context, fn CollectFunc) error { if err != nil { return err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() for _, l := range list { if err := conn.CommandStation(l.station, l.network); err != nil { @@ -231,7 +233,7 @@ func (s *SLink) CollectWithContext(ctx context.Context, fn CollectFunc) error { return err } // there may be a sequence number - case !(sequence < 0): + case sequence >= 0: //convert the next sequence number into uppercase hex seq := fmt.Sprintf("%06X", (s.Sequence+1)&0xffffff) if err := conn.CommandData(seq, starttime); err != nil { diff --git a/seis/sl/state.go b/seis/sl/state.go index d0a5918d..819207e8 100644 --- a/seis/sl/state.go +++ b/seis/sl/state.go @@ -119,7 +119,7 @@ func (s *State) ReadFile(path string) error { return nil } - data, err := os.ReadFile(path) + data, err := os.ReadFile(path) //nolint:gosec if err != nil { return err } diff --git a/seis/sl/state_test.go b/seis/sl/state_test.go index 1e97480c..c6269a1d 100644 --- a/seis/sl/state_test.go +++ b/seis/sl/state_test.go @@ -43,7 +43,9 @@ func TestState(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.Remove(tmpfile.Name()) + defer func() { + _ = os.Remove(tmpfile.Name()) + }() raw, err := os.ReadFile("testdata/state.json") if err != nil { diff --git a/shake/stream_test.go b/shake/stream_test.go index 4fdf73c7..cf24690c 100644 --- a/shake/stream_test.go +++ b/shake/stream_test.go @@ -94,11 +94,13 @@ func TestStreams(t *testing.T) { Integrator: NewIntegrator(1.0, 1.0/x.sps, x.q), } d, err := func(path string) ([]int32, error) { - file, err := os.Open(path) + file, err := os.Open(path) //nolint:gosec if err != nil { return nil, err } - defer file.Close() + defer func() { + _ = file.Close() + }() var samples []int32 scanner := bufio.NewScanner(file) diff --git a/weft/assets.go b/weft/assets.go index a586900d..10bb22a2 100644 --- a/weft/assets.go +++ b/weft/assets.go @@ -70,7 +70,9 @@ func getCspNonce(len int) (string, error) { } var buf bytes.Buffer enc := base64.NewEncoder(base64.StdEncoding, &buf) - defer enc.Close() + defer func() { + _ = enc.Close() + }() _, err := enc.Write(b) if err != nil { return "", fmt.Errorf("failed to create nonce: %v", err) @@ -256,11 +258,13 @@ func AssetHandler(r *http.Request, h http.Header, b *bytes.Buffer) error { // loadAsset loads file and finger prints it with a sha256 hash. prefix is stripped // from path members in the returned asset. func loadAsset(file, prefix string) (*asset, error) { - f, err := os.Open(file) + f, err := os.Open(file) //nolint:gosec if err != nil { return nil, err } - defer f.Close() + defer func() { + _ = f.Close() + }() // calculate a hash for the file and prefix the asset name with a short hash. h := sha256.New() diff --git a/weft/handlers.go b/weft/handlers.go index b4db8ede..3c65e343 100644 --- a/weft/handlers.go +++ b/weft/handlers.go @@ -263,7 +263,9 @@ func writeResponseAndLogMetrics(err error, w http.ResponseWriter, r *http.Reques if strings.Contains(r.Header.Get("Accept-Encoding"), GZIP) && compressibleMimes[contentType] && b.Len() > 20 { w.Header().Set("Content-Encoding", GZIP) gz := gzip.NewWriter(w) - defer gz.Close() + defer func() { + _ = gz.Close() + }() w.WriteHeader(status) n, writeErr = b.WriteTo(gz) } else { @@ -328,7 +330,7 @@ func SetBestPracticeHeaders(w http.ResponseWriter, r *http.Request, customCsp ma csp.WriteString(" ") if k == "script-src" && nonce != "" && s != "'none'" { //add nonce to CSP - csp.WriteString(fmt.Sprintf(" 'nonce-%s' 'strict-dynamic' ", nonce)) + fmt.Fprintf(&csp, " 'nonce-%s' 'strict-dynamic' ", nonce) } csp.WriteString(s) csp.WriteString("; ") diff --git a/weft/wefttest/wefttest.go b/weft/wefttest/wefttest.go index 4752e3bd..70c6029b 100644 --- a/weft/wefttest/wefttest.go +++ b/weft/wefttest/wefttest.go @@ -99,7 +99,9 @@ func (r Request) Do(server string) ([]byte, error) { if res, err = client.Do(req); err != nil { return nil, fmt.Errorf("%s %s %s error: %s", r.ID, r.URL, r.Method, err.Error()) } - defer res.Body.Close() + defer func() { + _ = res.Body.Close() + }() if r.Status != res.StatusCode { return nil, fmt.Errorf("%s %s %s got status %d expected %d", r.ID, r.URL, r.Method, res.StatusCode, r.Status) @@ -162,7 +164,7 @@ func checkCSP(respCsp, expectedCsp map[string]string) error { for k, v := range expectedCsp { v1 := respCsp[k] if k == "script-src" && strings.Contains(v1, "nonce-") { //check nonce - escapedV := strings.Replace(v, "*", "\\*", -1) // escape wildcards to avoid regex clash + escapedV := strings.ReplaceAll(v, "*", "\\*") // escape wildcards to avoid regex clash pattern := fmt.Sprintf(noncePattern, escapedV) if !patternMatch(pattern, v1) { return fmt.Errorf("## Response CSP %s=%s doesn't match expected %s=%s", k, v1, k, v)