diff options
| author | 2026-03-22 17:27:37 +0000 | |
|---|---|---|
| committer | 2026-03-22 17:27:37 +0000 | |
| commit | 8f577284f47f699855dcb3ceda21aa9d8be77c2f (patch) | |
| tree | 36f8d47a1584bd80e9e114d5c68ad5ec6c333b88 /objectstore/loose/helpers_test.go | |
| parent | internal/testgit: why not make it more annoying to use ambient authority (diff) | |
| signature | No signature | |
objectstore{,/loose}: Document contracts more clearly
Diffstat (limited to 'objectstore/loose/helpers_test.go')
| -rw-r--r-- | objectstore/loose/helpers_test.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/objectstore/loose/helpers_test.go b/objectstore/loose/helpers_test.go index 6cc50163..f4c8dbb3 100644 --- a/objectstore/loose/helpers_test.go +++ b/objectstore/loose/helpers_test.go @@ -2,6 +2,7 @@ package loose_test import ( "io" + "os" "testing" "codeberg.org/lindenii/furgit/internal/testgit" @@ -65,3 +66,41 @@ func expectedRawObject(t *testing.T, testRepo *testgit.TestRepo, id objectid.Obj return ty, body, raw } + +func corruptLooseObjectTrailer(t *testing.T, testRepo *testgit.TestRepo, id objectid.ObjectID) { + t.Helper() + + root := testRepo.OpenObjectsRoot(t) + + hex := id.String() + relPath := hex[:2] + "/" + hex[2:] + + file, err := root.OpenFile(relPath, os.O_RDWR, 0) + if err != nil { + t.Fatalf("OpenFile(%q): %v", relPath, err) + } + + defer func() { _ = file.Close() }() + + info, err := file.Stat() + if err != nil { + t.Fatalf("Stat(%q): %v", relPath, err) + } + + if info.Size() == 0 { + t.Fatalf("corrupt trailer on empty file %q", relPath) + } + + last := make([]byte, 1) + _, err = file.ReadAt(last, info.Size()-1) + if err != nil { + t.Fatalf("ReadAt(%q): %v", relPath, err) + } + + last[0] ^= 0xff + + _, err = file.WriteAt(last, info.Size()-1) + if err != nil { + t.Fatalf("WriteAt(%q): %v", relPath, err) + } +} |
