diff options
| author | Shulhan <ms@kilabit.info> | 2026-01-11 14:19:41 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2026-01-11 21:35:24 +0700 |
| commit | c3fbfbeab5605e3e2d31dc9a8dd95e9ca7139145 (patch) | |
| tree | 43414d0760ef4c4fcc29a67c70e303d6d8a11288 /spdxconv.go | |
| parent | 9bcf61fd76ed3b54bc4d9847681749ba52c6e15f (diff) | |
| download | spdxconv-c3fbfbeab5605e3e2d31dc9a8dd95e9ca7139145.tar.xz | |
all: fix slice bounds out of range when scanning dir
Using for-range and slices.Delete inside it will result an error
out-of-range if the slices deleted multiple times.
Diffstat (limited to 'spdxconv.go')
| -rw-r--r-- | spdxconv.go | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/spdxconv.go b/spdxconv.go index dc0f31d..be13a2c 100644 --- a/spdxconv.go +++ b/spdxconv.go @@ -7,6 +7,7 @@ import ( "bytes" "fmt" "log" + "maps" "os" "path/filepath" "slices" @@ -19,6 +20,8 @@ import ( // ConfigFile the file name for configuration file. const ConfigFile = `spdxconv.cfg` +// File end with ".license" is SPDX specific file that contains only +// identifiers. var suffixLicense = `.license` // SPDXConv the main type for converting files to SPDX format. @@ -279,15 +282,13 @@ func (conv *SPDXConv) scanDir(listDir []string) (listFile []string, err error) { listde, err = os.ReadDir(dir) if err != nil { - return listFile, err + return nil, err } var listFileLicense = make(map[string]struct{}) - var listName []string + var listNamePath = map[string]string{} for _, de = range listde { var name = de.Name() - // File end with ".license" is SPDX specific file that - // contains only identifiers. if strings.HasSuffix(name, suffixLicense) { listFileLicense[name] = struct{}{} continue @@ -299,22 +300,23 @@ func (conv *SPDXConv) scanDir(listDir []string) (listFile []string, err error) { if ok { continue } - listName = append(listName, name) - name = filepath.Join(dir, name) + var fullpath = filepath.Join(dir, name) if de.IsDir() { - listDir = append(listDir, name) + listDir = append(listDir, fullpath) continue } - listFile = append(listFile, name) + listNamePath[name] = fullpath } // Remove the file that have the spdx .license file. - for x, name := range listName { - _, ok = listFileLicense[name+suffixLicense] - if ok { - listFile = slices.Delete(listFile, x, x+1) - } + for name := range listFileLicense { + name = strings.TrimSuffix(name, suffixLicense) + delete(listNamePath, name) + } + for v := range maps.Values(listNamePath) { + listFile = append(listFile, v) } } + slices.Sort(listFile) return listFile, nil } |
