aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--lib/dsv/metadata_test.go49
-rw-r--r--lib/dsv/writer.go1
-rw-r--r--lib/email/body.go2
-rw-r--r--lib/ini/reader.go6
-rw-r--r--lib/math/big/rat_example_test.go4
-rw-r--r--lib/memfs/memfs_test.go13
-rw-r--r--lib/memfs/node.go7
-rw-r--r--lib/os/extract.go46
-rw-r--r--lib/smtp/server.go10
-rw-r--r--lib/websocket/request.go2
11 files changed, 83 insertions, 61 deletions
diff --git a/Makefile b/Makefile
index a9ae897b..c9b3f94c 100644
--- a/Makefile
+++ b/Makefile
@@ -31,15 +31,11 @@ test.prof:
go test -race -timeout=1m -cpuprofile $(CPU_PROF) -memprofile $(MEM_PROF) ./...
lint:
- -go vet ./...
-fieldalignment ./...
-shadow ./...
-golangci-lint run \
--presets bugs,metalinter,performance,unused \
--disable exhaustive \
- --disable gosec \
- --disable ineffassign \
- --disable makezero \
--disable musttag \
./...
diff --git a/lib/dsv/metadata_test.go b/lib/dsv/metadata_test.go
index 373bfddd..0d602adb 100644
--- a/lib/dsv/metadata_test.go
+++ b/lib/dsv/metadata_test.go
@@ -9,39 +9,38 @@ import (
)
func TestMetadataIsEqual(t *testing.T) {
- cases := []struct {
+ type testCase struct {
in Metadata
out Metadata
result bool
- }{
- {
- Metadata{
- Name: "A",
- Separator: ",",
- },
- Metadata{
- Name: "A",
- Separator: ",",
- },
- true,
+ }
+ var listCase = []testCase{{
+ Metadata{
+ Name: `A`,
+ Separator: `,`,
},
- {
- Metadata{
- Name: "A",
- Separator: ",",
- },
- Metadata{
- Name: "A",
- Separator: ";",
- },
- false,
+ Metadata{
+ Name: `A`,
+ Separator: `,`,
},
- }
+ true,
+ }, {
+ Metadata{
+ Name: `A`,
+ Separator: `,`,
+ },
+ Metadata{
+ Name: `A`,
+ Separator: `;`,
+ },
+ false,
+ }}
- for _, c := range cases {
+ var c testCase
+ for _, c = range listCase {
var got = c.in.IsEqual(&c.out)
if got != c.result {
- t.Error("Test failed on ", c.in, c.out)
+ t.Error(`Test failed on `, c.in, c.out)
}
}
}
diff --git a/lib/dsv/writer.go b/lib/dsv/writer.go
index 1293a6c8..65c9298c 100644
--- a/lib/dsv/writer.go
+++ b/lib/dsv/writer.go
@@ -470,7 +470,6 @@ func (writer *Writer) Write(reader ReaderInterface) (int, error) {
// String yes, it will print it in JSON like format.
func (writer *Writer) String() string {
r, e := json.MarshalIndent(writer, "", "\t")
-
if nil != e {
log.Print(e)
}
diff --git a/lib/email/body.go b/lib/email/body.go
index 07970fae..91ebcb04 100644
--- a/lib/email/body.go
+++ b/lib/email/body.go
@@ -241,7 +241,7 @@ func (body *Body) Simple() (out []byte) {
case 1:
default:
if out[x-1] != cr && out[x] != lf {
- out = append(out, "\r\n"...)
+ out = append(out, "\r\n"...) //nolint:makezero
}
}
diff --git a/lib/ini/reader.go b/lib/ini/reader.go
index 35d31bef..9e7b1ad7 100644
--- a/lib/ini/reader.go
+++ b/lib/ini/reader.go
@@ -351,7 +351,6 @@ func (reader *reader) parseVariable() (err error) {
if err != nil {
// The only possible error here is [io.EOF], so we
// end it.
- err = nil
break
}
switch {
@@ -395,7 +394,7 @@ func (reader *reader) parseVariable() (err error) {
reader._var.format = reader.bufFormat.String()
reader._var.key = reader.buf.String()
- return nil
+ return nil //nolint:nilerr
}
// parsePossibleValue will check if the next character after space is comment
@@ -407,7 +406,6 @@ func (reader *reader) parsePossibleValue() (err error) {
if err != nil {
// The only possible error here is [io.EOF], so we
// end it.
- err = nil
break
}
switch reader.b {
@@ -432,7 +430,7 @@ func (reader *reader) parsePossibleValue() (err error) {
reader._var.mode = lineModeKeyOnly
reader._var.format = reader.bufFormat.String()
- return nil
+ return nil //nolint:nilerr
}
// At this point we found `=` on source, and we expect the rest of source will
diff --git a/lib/math/big/rat_example_test.go b/lib/math/big/rat_example_test.go
index c78f132b..d1669765 100644
--- a/lib/math/big/rat_example_test.go
+++ b/lib/math/big/rat_example_test.go
@@ -414,7 +414,7 @@ func ExampleRat_MarshalJSON() {
func ExampleRat_MarshalJSON_withStruct() {
type T struct {
- V *Rat
+ V *Rat `json:"V"`
}
inputs := []T{
@@ -430,7 +430,7 @@ func ExampleRat_MarshalJSON_withStruct() {
)
MarshalJSONAsString = true
for _, in = range inputs {
- out, err = json.Marshal(in)
+ out, err = json.Marshal(&in)
if err != nil {
log.Fatal(err)
}
diff --git a/lib/memfs/memfs_test.go b/lib/memfs/memfs_test.go
index e6dffb0a..3c0f3f5e 100644
--- a/lib/memfs/memfs_test.go
+++ b/lib/memfs/memfs_test.go
@@ -58,14 +58,16 @@ func TestMain(m *testing.M) {
}
func TestNew(t *testing.T) {
- afile := filepath.Join(_testWD, "testdata/index.html")
-
- cases := []struct {
+ type testCase struct {
desc string
expErr string
expMapKeys []string
opts Options
- }{{
+ }
+
+ var afile = filepath.Join(_testWD, `testdata/index.html`)
+
+ var listCase = []testCase{{
desc: "With empty dir",
expErr: "open : no such file or directory",
}, {
@@ -152,10 +154,11 @@ func TestNew(t *testing.T) {
}}
var (
+ c testCase
mfs *MemFS
err error
)
- for _, c := range cases {
+ for _, c = range listCase {
t.Log(c.desc)
mfs, err = New(&c.opts)
diff --git a/lib/memfs/node.go b/lib/memfs/node.go
index 34ed18a5..5ed87b02 100644
--- a/lib/memfs/node.go
+++ b/lib/memfs/node.go
@@ -262,9 +262,10 @@ func (node *Node) Readdir(count int) (fis []os.FileInfo, err error) {
return nil, nil
}
if count <= 0 || count >= len(node.Childs) {
- fis = make([]os.FileInfo, len(node.Childs))
- for x := 0; x < len(node.Childs); x++ {
- fis[x] = node.Childs[x]
+ fis = make([]os.FileInfo, 0, len(node.Childs))
+ var child *Node
+ for _, child = range node.Childs {
+ fis = append(fis, child)
}
node.off = 0
return fis, nil
diff --git a/lib/os/extract.go b/lib/os/extract.go
index 1d7841f5..3125429f 100644
--- a/lib/os/extract.go
+++ b/lib/os/extract.go
@@ -231,10 +231,15 @@ func (xtrk *extractor) bunzip2(fin *os.File) (fout *os.File, err error) {
bz2Reader = bzip2.NewReader(bufio.NewReader(fin))
- _, err = io.Copy(fout, bz2Reader)
- if err != nil {
- _ = fout.Close()
- return nil, fmt.Errorf("%s: %w", logp, err)
+ for {
+ _, err = io.CopyN(fout, bz2Reader, 1024)
+ if err != nil {
+ if errors.Is(err, io.EOF) {
+ break
+ }
+ _ = fout.Close()
+ return nil, fmt.Errorf(`%s: %w`, logp, err)
+ }
}
// Reset the file output descriptor to the beginning.
@@ -273,11 +278,16 @@ func (xtrk *extractor) gunzip(fin *os.File) (fout *os.File, err error) {
return nil, fmt.Errorf("%s: %w", logp, err)
}
- _, err = io.Copy(fout, gzReader)
- if err != nil {
- _ = fout.Close()
- _ = gzReader.Close()
- return nil, fmt.Errorf("%s: %w", logp, err)
+ for {
+ _, err = io.CopyN(fout, gzReader, 1024)
+ if err != nil {
+ if errors.Is(err, io.EOF) {
+ break
+ }
+ _ = fout.Close()
+ _ = gzReader.Close()
+ return nil, fmt.Errorf(`%s: %w`, logp, err)
+ }
}
err = gzReader.Close()
@@ -319,13 +329,20 @@ func (xtrk *extractor) untar(fin io.Reader) (err error) {
return fmt.Errorf("%s: %w", logp, err)
}
- fi = hdr.FileInfo()
+ // gosec detect the following line as G305 or [CWE-22].
+ // We handle it by detecting the joined path, if its not
+ // under the dirOutput, then we return it as error.
+ //
+ // [CWE-22]: https://cwe.mitre.org/data/definitions/22.html
+ //
+ //nolint:gosec
filePath = filepath.Join(xtrk.dirOutput, hdr.Name)
if !strings.HasPrefix(filePath, xtrk.dirOutput) {
return fmt.Errorf(`%s: extract path outside of output directory`, logp)
}
+ fi = hdr.FileInfo()
if fi.IsDir() {
err = os.Mkdir(filePath, fi.Mode())
if err != nil {
@@ -399,13 +416,20 @@ func (xtrk *extractor) unzip(fin *os.File) (err error) {
return fmt.Errorf("%s: %w", logp, err)
}
- fi = zipFile.FileInfo()
+ // gosec detect the following line as G305 or [CWE-22].
+ // We handle it by detecting the joined path, if its not
+ // under the dirOutput, then we return it as error.
+ //
+ // [CWE-22]: https://cwe.mitre.org/data/definitions/22.html
+ //
+ //nolint:gosec
filePath = filepath.Join(xtrk.dirOutput, zipFile.Name)
if !strings.HasPrefix(filePath, xtrk.dirOutput) {
return fmt.Errorf(`%s: extract path outside of output directory`, logp)
}
+ fi = zipFile.FileInfo()
if fi.IsDir() {
err = os.Mkdir(filePath, fi.Mode())
if err != nil {
diff --git a/lib/smtp/server.go b/lib/smtp/server.go
index 78e657c0..42a76352 100644
--- a/lib/smtp/server.go
+++ b/lib/smtp/server.go
@@ -412,10 +412,12 @@ func (srv *Server) handleDATA(recv *receiver) (err error) {
func (srv *Server) handleEHLO(recv *receiver, cmd *Command) (err error) {
recv.clientDomain = cmd.Arg
- body := make([]string, len(srv.Exts))
- for x, ext := range srv.Exts {
- body[x] = ext.Name()
- body[x] += " " + ext.Params()
+ var (
+ body = make([]string, 0, len(srv.Exts))
+ ext Extension
+ )
+ for _, ext = range srv.Exts {
+ body = append(body, ext.Name()+` `+ext.Params())
}
if !recv.isAuthenticated() {
diff --git a/lib/websocket/request.go b/lib/websocket/request.go
index d56d6406..60a44349 100644
--- a/lib/websocket/request.go
+++ b/lib/websocket/request.go
@@ -59,7 +59,7 @@ type Request struct {
ID uint64 `json:"id"`
// Conn is the client connection, where the request come from.
- Conn int
+ Conn int `json:"-"`
}
// reset all Request field's value to zero.