From 8f577284f47f699855dcb3ceda21aa9d8be77c2f Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 22 Mar 2026 17:27:37 +0000 Subject: objectstore{,/loose}: Document contracts more clearly --- objectstore/loose/read_test.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'objectstore/loose/read_test.go') diff --git a/objectstore/loose/read_test.go b/objectstore/loose/read_test.go index 44e25910..7ecc1b10 100644 --- a/objectstore/loose/read_test.go +++ b/objectstore/loose/read_test.go @@ -11,6 +11,7 @@ import ( "codeberg.org/lindenii/furgit/objectid" "codeberg.org/lindenii/furgit/objectstore" "codeberg.org/lindenii/furgit/objectstore/loose" + "codeberg.org/lindenii/furgit/objecttype" ) func TestLooseStoreReadAgainstGit(t *testing.T) { @@ -174,3 +175,37 @@ func TestLooseStoreNewValidation(t *testing.T) { t.Fatalf("loose.New(root, unknown) expected error") } } + +func TestLooseStoreReadHeaderDoesNotVerifyAdler32(t *testing.T) { + t.Parallel() + testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper + testRepo := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true}) + store := openLooseStore(t, testRepo, algo) + + content := []byte("header-only-check\n") + id, err := store.WriteBytesContent(objecttype.TypeBlob, content) + if err != nil { + t.Fatalf("WriteBytesContent: %v", err) + } + + corruptLooseObjectTrailer(t, testRepo, id) + + ty, size, err := store.ReadHeader(id) + if err != nil { + t.Fatalf("ReadHeader: %v", err) + } + + if ty != objecttype.TypeBlob { + t.Fatalf("ReadHeader type = %v, want %v", ty, objecttype.TypeBlob) + } + + if size != int64(len(content)) { + t.Fatalf("ReadHeader size = %d, want %d", size, len(content)) + } + + _, err = store.ReadBytesFull(id) + if err == nil { + t.Fatalf("ReadBytesFull on corrupted trailer succeeded") + } + }) +} -- cgit v1.3.1-10-gc9f91