diff --git a/cmd/main.go b/cmd/main.go index fd09a09..2de10a2 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -27,6 +27,7 @@ func main() { if err != nil { log.Fatal(err) } + defer f.Close() dirname := "cmd/data/" entries, err := os.ReadDir(dirname) @@ -55,9 +56,11 @@ func main() { } func insert_purls(builder *vellum.Builder, file string) int { - var err error // #nosec G304 - data, _ := os.ReadFile(file) + data, err := os.ReadFile(file) + if err != nil { + log.Fatal(err) + } lines := strings.FieldsFunc(string(data), func(r rune) bool { return r == '\n' }) diff --git a/purlvalidator.go b/purlvalidator.go index 6c609c8..524e814 100644 --- a/purlvalidator.go +++ b/purlvalidator.go @@ -14,7 +14,7 @@ package purlvalidator import ( _ "embed" "fmt" - "log" + "sync" "github.com/blevesearch/vellum" "github.com/package-url/packageurl-go" @@ -23,14 +23,17 @@ import ( //go:embed purls.fst var fstData []byte -var validator *vellum.FST +var ( + validator *vellum.FST + validatorOnce sync.Once + validatorErr error +) -func init() { - var err error - validator, err = vellum.Load(fstData) - if err != nil { - log.Fatal(err) - } +func getValidator() (*vellum.FST, error) { + validatorOnce.Do(func() { + validator, validatorErr = vellum.Load(fstData) + }) + return validator, validatorErr } func validate_purl(packageURL string, fstMap *vellum.FST) (bool, error) { @@ -47,5 +50,9 @@ func validate_purl(packageURL string, fstMap *vellum.FST) (bool, error) { } func Validate(packageURL string) (bool, error) { - return validate_purl(packageURL, validator) + v, err := getValidator() + if err != nil { + return false, err + } + return validate_purl(packageURL, v) }