diff --git a/internal/fingerprint/sources_checksum.go b/internal/fingerprint/sources_checksum.go index f1108e111c..f4aee43b0c 100644 --- a/internal/fingerprint/sources_checksum.go +++ b/internal/fingerprint/sources_checksum.go @@ -119,7 +119,7 @@ func (checker *ChecksumChecker) checksumFilePath(t *ast.Task) string { return filepath.Join(checker.tempDir, "checksum", normalizeFilename(t.Name())) } -var checksumFilenameRegexp = regexp.MustCompile("[^A-z0-9]") +var checksumFilenameRegexp = regexp.MustCompile("[^A-Za-z0-9]") // replaces invalid characters on filenames with "-" func normalizeFilename(f string) string { diff --git a/internal/fingerprint/sources_checksum_test.go b/internal/fingerprint/sources_checksum_test.go index a2b35cd316..9afc25b6d8 100644 --- a/internal/fingerprint/sources_checksum_test.go +++ b/internal/fingerprint/sources_checksum_test.go @@ -16,6 +16,12 @@ func TestNormalizeFilename(t *testing.T) { {"foo/bar/baz", "foo-bar-baz"}, {"foo@bar/baz", "foo-bar-baz"}, {"foo1bar2baz3", "foo1bar2baz3"}, + // Characters in the ASCII range between 'Z' (90) and 'a' (97) must + // also be normalized. A "[A-z]" class would wrongly include these. + {"foo\\bar", "foo-bar"}, + {"foo_bar", "foo-bar"}, + {"foo[bar]baz", "foo-bar-baz"}, + {"foo^bar`baz", "foo-bar-baz"}, } for _, test := range tests { assert.Equal(t, test.Out, normalizeFilename(test.In))