From 0186ddc119a1e6c06a8d6e8249d5d9f838904060 Mon Sep 17 00:00:00 2001 From: Snider Date: Tue, 17 Mar 2026 07:11:04 +0000 Subject: [PATCH] fix(docs,tests): fix stale coreerr example and add missing test coverage - docs/architecture.md: replace fmt.Errorf with coreerr.E() to match actual implementation - cache_test.go: add TestGitHubKeys for GitHubReposKey/GitHubRepoKey (was 0% coverage) - cache_test.go: add TestPathTraversalRejected for Path() traversal guard Co-Authored-By: Virgil --- cache_test.go | 25 +++++++++++++++++++++++++ docs/architecture.md | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/cache_test.go b/cache_test.go index 2a4e06e..c630f2c 100644 --- a/cache_test.go +++ b/cache_test.go @@ -102,3 +102,28 @@ func TestCacheDefaults(t *testing.T) { t.Fatal("expected cache instance") } } + +func TestGitHubKeys(t *testing.T) { + key := cache.GitHubReposKey("myorg") + if key != "github/myorg/repos" { + t.Errorf("unexpected GitHubReposKey: %q", key) + } + + key = cache.GitHubRepoKey("myorg", "myrepo") + if key != "github/myorg/myrepo/meta" { + t.Errorf("unexpected GitHubRepoKey: %q", key) + } +} + +func TestPathTraversalRejected(t *testing.T) { + m := coreio.NewMockMedium() + c, err := cache.New(m, "/tmp/cache-traversal", 1*time.Minute) + if err != nil { + t.Fatalf("failed to create cache: %v", err) + } + + _, err = c.Path("../../etc/passwd") + if err == nil { + t.Error("expected error for path traversal key, got nil") + } +} diff --git a/docs/architecture.md b/docs/architecture.md index 51e0e01..b2199b0 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -179,7 +179,7 @@ paths, then checks that the result is still a prefix of the base: ```go if !strings.HasPrefix(absPath, absBase) { - return "", fmt.Errorf("invalid cache key: path traversal attempt") + return "", coreerr.E("cache.Path", "invalid cache key: path traversal attempt", nil) } ``` -- 2.45.3