diff --git a/.golangci.yml b/.golangci.yml index faedfe9..924b5ce 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -59,6 +59,10 @@ issues: text: "^directive `//nolint:errorlint` should provide explanation" source: '[=|!]= io.EOF' + - linters: + - gosec + text: "^G115: integer overflow conversion" + linters-settings: exhaustive: diff --git a/backup.go b/backup.go index b54341d..7c2e4ba 100644 --- a/backup.go +++ b/backup.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/backup_test.go b/backup_test.go index 54b7b9d..47f3609 100644 --- a/backup_test.go +++ b/backup_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/backuptar/tar.go b/backuptar/tar.go index 7f852bb..a4d2202 100644 --- a/backuptar/tar.go +++ b/backuptar/tar.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package backuptar diff --git a/backuptar/tar_test.go b/backuptar/tar_test.go index d6687ca..b4772af 100644 --- a/backuptar/tar_test.go +++ b/backuptar/tar_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package backuptar diff --git a/ea_test.go b/ea_test.go index 0a11502..2d9cad1 100644 --- a/ea_test.go +++ b/ea_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/file.go b/file.go index fe82a18..f382137 100644 --- a/file.go +++ b/file.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/fileinfo.go b/fileinfo.go index c860eb9..01cd891 100644 --- a/fileinfo.go +++ b/fileinfo.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/fileinfo_test.go b/fileinfo_test.go index 28b8f84..8d2d44d 100644 --- a/fileinfo_test.go +++ b/fileinfo_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/go.mod b/go.mod index add720f..cc5995e 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,16 @@ module github.com/Microsoft/go-winio -go 1.21 +go 1.23.0 + +toolchain go1.23.8 require ( github.com/sirupsen/logrus v1.9.3 - golang.org/x/sys v0.10.0 - golang.org/x/tools v0.11.0 + golang.org/x/sys v0.35.0 + golang.org/x/tools v0.36.0 ) -require golang.org/x/mod v0.12.0 // indirect +require ( + golang.org/x/mod v0.27.0 // indirect + golang.org/x/sync v0.16.0 // indirect +) diff --git a/go.sum b/go.sum index 11aef99..1608729 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= @@ -8,15 +10,15 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hvsock.go b/hvsock.go index c4fdd9d..d4960f5 100644 --- a/hvsock.go +++ b/hvsock.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/hvsock_test.go b/hvsock_test.go index f492f47..74552ac 100644 --- a/hvsock_test.go +++ b/hvsock_test.go @@ -437,7 +437,7 @@ func TestHvSockCloseReadWriteDial(t *testing.T) { n, err = c.Read(b) if n != 0 { - return fmt.Errorf("server did not get EOF") + return errors.New("server did not get EOF") } if !errors.Is(err, io.EOF) { return errors.New("server did not get EOF") @@ -632,7 +632,7 @@ func (u testUtil) Assert(b bool, msgs ...string) { return } u.T.Helper() - u.T.Fatalf(msgJoin(msgs, "failed assertion")) + u.T.Fatal(msgJoin(msgs, "failed assertion")) } func (u testUtil) Is(err, target error, msgs ...string) { diff --git a/pipe.go b/pipe.go index a2da663..58c68e9 100644 --- a/pipe.go +++ b/pipe.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/pipe_test.go b/pipe_test.go index 8b1d5b9..842f5cc 100644 --- a/pipe_test.go +++ b/pipe_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/pkg/bindfilter/bind_filter.go b/pkg/bindfilter/bind_filter.go index 7c7f145..f3e9d7b 100644 --- a/pkg/bindfilter/bind_filter.go +++ b/pkg/bindfilter/bind_filter.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package bindfilter @@ -109,7 +108,7 @@ func GetBindMappings(volumePath string) ([]BindMapping, error) { } if outBuffSize < 12 { - return nil, fmt.Errorf("invalid buffer returned") + return nil, errors.New("invalid buffer returned") } result := buf[:outBuffSize] @@ -185,7 +184,7 @@ func decodeEntry(buffer []byte) (string, error) { func getTargetsFromBuffer(buffer []byte, offset, count int) ([]string, error) { if len(buffer) < offset+count*6 { - return nil, fmt.Errorf("invalid buffer") + return nil, errors.New("invalid buffer") } targets := make([]string, count) @@ -193,7 +192,7 @@ func getTargetsFromBuffer(buffer []byte, offset, count int) ([]string, error) { entryBuf := buffer[offset+i*8 : offset+i*8+8] tgt := *(*mappingTargetEntry)(unsafe.Pointer(&entryBuf[0])) if len(buffer) < int(tgt.TargetRootOffset)+int(tgt.TargetRootLength) { - return nil, fmt.Errorf("invalid buffer") + return nil, errors.New("invalid buffer") } decoded, err := decodeEntry(buffer[tgt.TargetRootOffset : tgt.TargetRootOffset+tgt.TargetRootLength]) if err != nil { @@ -259,7 +258,7 @@ func getFinalPath(pth string) (string, error) { func getBindMappingFromBuffer(buffer []byte, entry mappingEntry) (BindMapping, error) { if len(buffer) < int(entry.VirtRootOffset)+int(entry.VirtRootLength) { - return BindMapping{}, fmt.Errorf("invalid buffer") + return BindMapping{}, errors.New("invalid buffer") } src, err := decodeEntry(buffer[entry.VirtRootOffset : entry.VirtRootOffset+entry.VirtRootLength]) diff --git a/pkg/bindfilter/bind_filter_test.go b/pkg/bindfilter/bind_filter_test.go index 533df23..9987496 100644 --- a/pkg/bindfilter/bind_filter_test.go +++ b/pkg/bindfilter/bind_filter_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package bindfilter diff --git a/pkg/etw/eventdata.go b/pkg/etw/eventdata.go index f971cc7..7ac6b50 100644 --- a/pkg/etw/eventdata.go +++ b/pkg/etw/eventdata.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/eventopt.go b/pkg/etw/eventopt.go index 7340322..9c06fef 100644 --- a/pkg/etw/eventopt.go +++ b/pkg/etw/eventopt.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/fieldopt.go b/pkg/etw/fieldopt.go index 57114d8..2798e97 100644 --- a/pkg/etw/fieldopt.go +++ b/pkg/etw/fieldopt.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/newprovider.go b/pkg/etw/newprovider.go index 3669b4f..0c3e301 100644 --- a/pkg/etw/newprovider.go +++ b/pkg/etw/newprovider.go @@ -1,6 +1,4 @@ //go:build windows && (amd64 || arm64 || 386) -// +build windows -// +build amd64 arm64 386 package etw diff --git a/pkg/etw/newprovider_unsupported.go b/pkg/etw/newprovider_unsupported.go index e0057cf..18f9dfe 100644 --- a/pkg/etw/newprovider_unsupported.go +++ b/pkg/etw/newprovider_unsupported.go @@ -1,5 +1,4 @@ //go:build windows && arm -// +build windows,arm package etw diff --git a/pkg/etw/provider.go b/pkg/etw/provider.go index 8174bff..089808a 100644 --- a/pkg/etw/provider.go +++ b/pkg/etw/provider.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/provider_test.go b/pkg/etw/provider_test.go index 7d5f808..7df2699 100644 --- a/pkg/etw/provider_test.go +++ b/pkg/etw/provider_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/providerglobal.go b/pkg/etw/providerglobal.go index 0a1d90d..831697a 100644 --- a/pkg/etw/providerglobal.go +++ b/pkg/etw/providerglobal.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etw diff --git a/pkg/etw/ptr64_32.go b/pkg/etw/ptr64_32.go index 26c9f19..e89da49 100644 --- a/pkg/etw/ptr64_32.go +++ b/pkg/etw/ptr64_32.go @@ -1,6 +1,4 @@ //go:build windows && (386 || arm) -// +build windows -// +build 386 arm package etw diff --git a/pkg/etw/ptr64_64.go b/pkg/etw/ptr64_64.go index 1524c64..d991938 100644 --- a/pkg/etw/ptr64_64.go +++ b/pkg/etw/ptr64_64.go @@ -1,6 +1,4 @@ //go:build windows && (amd64 || arm64) -// +build windows -// +build amd64 arm64 package etw diff --git a/pkg/etw/sample/main_other.go b/pkg/etw/sample/main_other.go index 7c3e856..16d1d1f 100644 --- a/pkg/etw/sample/main_other.go +++ b/pkg/etw/sample/main_other.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package main diff --git a/pkg/etw/sample/main_windows.go b/pkg/etw/sample/main_windows.go index d6b185d..dac543d 100644 --- a/pkg/etw/sample/main_windows.go +++ b/pkg/etw/sample/main_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows // Shows a sample usage of the ETW logging package. package main diff --git a/pkg/etw/wrapper_32.go b/pkg/etw/wrapper_32.go index 14c4998..eba93fd 100644 --- a/pkg/etw/wrapper_32.go +++ b/pkg/etw/wrapper_32.go @@ -1,6 +1,4 @@ //go:build windows && (386 || arm) -// +build windows -// +build 386 arm package etw diff --git a/pkg/etw/wrapper_64.go b/pkg/etw/wrapper_64.go index 8cfe2e8..8f53ad7 100644 --- a/pkg/etw/wrapper_64.go +++ b/pkg/etw/wrapper_64.go @@ -1,6 +1,4 @@ //go:build windows && (amd64 || arm64) -// +build windows -// +build amd64 arm64 package etw diff --git a/pkg/etwlogrus/hook.go b/pkg/etwlogrus/hook.go index 76f6239..71f658e 100644 --- a/pkg/etwlogrus/hook.go +++ b/pkg/etwlogrus/hook.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etwlogrus diff --git a/pkg/etwlogrus/hook_test.go b/pkg/etwlogrus/hook_test.go index f6e24bd..3451311 100644 --- a/pkg/etwlogrus/hook_test.go +++ b/pkg/etwlogrus/hook_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package etwlogrus diff --git a/pkg/guid/guid_nonwindows.go b/pkg/guid/guid_nonwindows.go index 805bd35..b933821 100644 --- a/pkg/guid/guid_nonwindows.go +++ b/pkg/guid/guid_nonwindows.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package guid diff --git a/pkg/guid/guid_windows.go b/pkg/guid/guid_windows.go index 27e45ee..4aa95a7 100644 --- a/pkg/guid/guid_windows.go +++ b/pkg/guid/guid_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package guid diff --git a/pkg/process/process.go b/pkg/process/process.go index 873d24e..b1305e0 100644 --- a/pkg/process/process.go +++ b/pkg/process/process.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package process diff --git a/pkg/process/syscall.go b/pkg/process/syscall.go index 3d47dd7..1bff3bc 100644 --- a/pkg/process/syscall.go +++ b/pkg/process/syscall.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package process diff --git a/pkg/security/grantvmgroupaccess.go b/pkg/security/grantvmgroupaccess.go index 2cef49d..a752352 100644 --- a/pkg/security/grantvmgroupaccess.go +++ b/pkg/security/grantvmgroupaccess.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package security diff --git a/pkg/security/grantvmgroupaccess_test.go b/pkg/security/grantvmgroupaccess_test.go index 6e27530..c218498 100644 --- a/pkg/security/grantvmgroupaccess_test.go +++ b/pkg/security/grantvmgroupaccess_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package security diff --git a/privilege.go b/privilege.go index d9b90b6..747eefd 100644 --- a/privilege.go +++ b/privilege.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/privileges_test.go b/privileges_test.go index 2e2175b..36cc042 100644 --- a/privileges_test.go +++ b/privileges_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/reparse.go b/reparse.go index 67d1a10..b03e517 100644 --- a/reparse.go +++ b/reparse.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/sd.go b/sd.go index c3685e9..7834c6a 100644 --- a/sd.go +++ b/sd.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/sd_test.go b/sd_test.go index c72bcbf..6151002 100644 --- a/sd_test.go +++ b/sd_test.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/tools/etw-provider-gen/main_others.go b/tools/etw-provider-gen/main_others.go index 7c3e856..16d1d1f 100644 --- a/tools/etw-provider-gen/main_others.go +++ b/tools/etw-provider-gen/main_others.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package main diff --git a/tools/etw-provider-gen/main_windows.go b/tools/etw-provider-gen/main_windows.go index 9d316fb..77b3ad8 100644 --- a/tools/etw-provider-gen/main_windows.go +++ b/tools/etw-provider-gen/main_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package main diff --git a/vhd/vhd.go b/vhd/vhd.go index b54cad1..c0a22d6 100644 --- a/vhd/vhd.go +++ b/vhd/vhd.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package vhd diff --git a/wim/decompress.go b/wim/decompress.go index 993a413..aa33341 100644 --- a/wim/decompress.go +++ b/wim/decompress.go @@ -1,5 +1,4 @@ //go:build windows || linux -// +build windows linux package wim diff --git a/wim/lzx/lzx.go b/wim/lzx/lzx.go index e5db826..a7c9bc9 100644 --- a/wim/lzx/lzx.go +++ b/wim/lzx/lzx.go @@ -100,7 +100,7 @@ func (f *decompressor) ensureAtLeast(n int) error { } n, err := io.ReadAtLeast(f.r, f.b[f.bv-f.bo:], n) if err != nil { - if err == io.EOF { //nolint:errorlint + if err == io.EOF { err = io.ErrUnexpectedEOF } else { f.fail(err) @@ -153,28 +153,28 @@ func buildTable(codelens []byte) *huffman { // Determine the number of codes of each length, and the // maximum length. var count [maxTreePathLen + 1]uint - var max byte + var maxValue byte for _, cl := range codelens { count[cl]++ - if max < cl { - max = cl + if maxValue < cl { + maxValue = cl } } - if max == 0 { + if maxValue == 0 { return &huffman{} } // Determine the first code of each length. var first [maxTreePathLen + 1]uint code := uint(0) - for i := byte(1); i <= max; i++ { + for i := byte(1); i <= maxValue; i++ { code <<= 1 first[i] = code code += count[i] } - if code != 1< tablebits, split long codes into additional tables // of suffixes of max-tablebits length. - h := &huffman{maxbits: max} - if max > tablebits { + h := &huffman{maxbits: maxValue} + if maxValue > tablebits { core := first[tablebits+1] / 2 // Number of codes that fit without extra tables nextra := 1<> (cl - tablebits) suffix := code & (1<<(cl-tablebits) - 1) - extendedCode := suffix << (max - cl) - for j := uint(0); j < 1<<(max-cl); j++ { + extendedCode := suffix << (maxValue - cl) + for j := uint(0); j < 1<<(maxValue-cl); j++ { h.extra[h.table[prefix]][extendedCode+j] = v } } diff --git a/wim/validate/main_other.go b/wim/validate/main_other.go index 7c3e856..16d1d1f 100644 --- a/wim/validate/main_other.go +++ b/wim/validate/main_other.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package main diff --git a/wim/validate/main_windows.go b/wim/validate/main_windows.go index b7329ff..6f0f6f0 100644 --- a/wim/validate/main_windows.go +++ b/wim/validate/main_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package main diff --git a/wim/wim.go b/wim/wim.go index 8f272f3..220b309 100644 --- a/wim/wim.go +++ b/wim/wim.go @@ -1,5 +1,4 @@ //go:build windows || linux -// +build windows linux // Package wim implements a WIM file parser. //