From a66849ae3536e273464cf5f9218f38c07794a84d Mon Sep 17 00:00:00 2001 From: kv1sidisi Date: Wed, 10 Jun 2026 18:31:13 +0000 Subject: [PATCH] fix: handle apostrophes in fingerprint globs --- internal/execext/exec.go | 1 + internal/fingerprint/glob_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 internal/fingerprint/glob_test.go diff --git a/internal/execext/exec.go b/internal/execext/exec.go index a418a2aa11..78e90d9ea2 100644 --- a/internal/execext/exec.go +++ b/internal/execext/exec.go @@ -96,6 +96,7 @@ func escape(s string) string { s = strings.ReplaceAll(s, "&", `\&`) s = strings.ReplaceAll(s, "(", `\(`) s = strings.ReplaceAll(s, ")", `\)`) + s = strings.ReplaceAll(s, "'", `\'`) return s } diff --git a/internal/fingerprint/glob_test.go b/internal/fingerprint/glob_test.go new file mode 100644 index 0000000000..6c4c9371ad --- /dev/null +++ b/internal/fingerprint/glob_test.go @@ -0,0 +1,24 @@ +package fingerprint + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGlobHandlesApostropheInPath(t *testing.T) { + t.Parallel() + + baseDir := t.TempDir() + dir := filepath.Join(baseDir, "test'd") + require.NoError(t, os.Mkdir(dir, 0o755)) + + file := filepath.Join(dir, "test.in") + require.NoError(t, os.WriteFile(file, []byte("input"), 0o644)) + + matches, err := glob(dir, "test.in") + require.NoError(t, err) + require.Equal(t, []string{filepath.ToSlash(file)}, matches) +}