From fd345113149b541f26b1e96bc21e7c89a2f15995 Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 23 Oct 2025 23:18:17 -0400 Subject: [PATCH] Switch to Go 1.23 and fix CI failures Some new upcoming changes require us to use Go 1.23. However, if we switch to Go 1.23 some new linter errors are showing up. This commit fixes most of the errors and adds an exclusion for integer overflow errors. Signed-off-by: Amit --- .golangci.yml | 4 ++++ backup.go | 1 - backup_test.go | 1 - backuptar/tar.go | 1 - backuptar/tar_test.go | 1 - ea_test.go | 1 - file.go | 1 - fileinfo.go | 1 - fileinfo_test.go | 1 - go.mod | 13 +++++++++---- go.sum | 18 ++++++++++-------- hvsock.go | 1 - hvsock_test.go | 4 ++-- pipe.go | 1 - pipe_test.go | 1 - pkg/bindfilter/bind_filter.go | 9 ++++----- pkg/bindfilter/bind_filter_test.go | 1 - pkg/etw/eventdata.go | 1 - pkg/etw/eventopt.go | 1 - pkg/etw/fieldopt.go | 1 - pkg/etw/newprovider.go | 2 -- pkg/etw/newprovider_unsupported.go | 1 - pkg/etw/provider.go | 1 - pkg/etw/provider_test.go | 1 - pkg/etw/providerglobal.go | 1 - pkg/etw/ptr64_32.go | 2 -- pkg/etw/ptr64_64.go | 2 -- pkg/etw/sample/main_other.go | 1 - pkg/etw/sample/main_windows.go | 1 - pkg/etw/wrapper_32.go | 2 -- pkg/etw/wrapper_64.go | 2 -- pkg/etwlogrus/hook.go | 1 - pkg/etwlogrus/hook_test.go | 1 - pkg/guid/guid_nonwindows.go | 1 - pkg/guid/guid_windows.go | 1 - pkg/process/process.go | 1 - pkg/process/syscall.go | 1 - pkg/security/grantvmgroupaccess.go | 1 - pkg/security/grantvmgroupaccess_test.go | 1 - privilege.go | 1 - privileges_test.go | 1 - reparse.go | 1 - sd.go | 1 - sd_test.go | 1 - tools/etw-provider-gen/main_others.go | 1 - tools/etw-provider-gen/main_windows.go | 1 - vhd/vhd.go | 1 - wim/decompress.go | 1 - wim/lzx/lzx.go | 24 ++++++++++++------------ wim/validate/main_other.go | 1 - wim/validate/main_windows.go | 1 - wim/wim.go | 1 - 52 files changed, 41 insertions(+), 82 deletions(-) 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. //