diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2018-04-17 11:26:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-17 11:26:26 +0200 |
commit | eec77c36c26558e470a3d882fb6c0d457f92891f (patch) | |
tree | 385728c45d7dd707c90dc9c3fd8efef06a37e4f0 /storage/filesystem | |
parent | a042efacfd3a278a9423008948022728555dcee1 (diff) | |
parent | 79db8cf8bf477c2bb9d01cbe289fbeaccaa1ee65 (diff) | |
download | go-git-eec77c36c26558e470a3d882fb6c0d457f92891f.tar.gz |
Merge pull request #807 from keybase/strib/src-d-ignore-non-hash-files
dotgit: ignore filenames that don't match a hash
Diffstat (limited to 'storage/filesystem')
-rw-r--r-- | storage/filesystem/internal/dotgit/dotgit.go | 12 | ||||
-rw-r--r-- | storage/filesystem/internal/dotgit/dotgit_test.go | 14 |
2 files changed, 23 insertions, 3 deletions
diff --git a/storage/filesystem/internal/dotgit/dotgit.go b/storage/filesystem/internal/dotgit/dotgit.go index 6f0f1a5..52b621c 100644 --- a/storage/filesystem/internal/dotgit/dotgit.go +++ b/storage/filesystem/internal/dotgit/dotgit.go @@ -162,8 +162,11 @@ func (d *DotGit) ObjectPacks() ([]plumbing.Hash, error) { n := f.Name() h := plumbing.NewHash(n[5 : len(n)-5]) //pack-(hash).pack + if h.IsZero() { + // Ignore files with badly-formatted names. + continue + } packs = append(packs, h) - } return packs, nil @@ -255,7 +258,12 @@ func (d *DotGit) ForEachObjectHash(fun func(plumbing.Hash) error) error { } for _, o := range d { - err = fun(plumbing.NewHash(base + o.Name())) + h := plumbing.NewHash(base + o.Name()) + if h.IsZero() { + // Ignore files with badly-formatted names. + continue + } + err = fun(h) if err != nil { return err } diff --git a/storage/filesystem/internal/dotgit/dotgit_test.go b/storage/filesystem/internal/dotgit/dotgit_test.go index 02cd9ec..7733eef 100644 --- a/storage/filesystem/internal/dotgit/dotgit_test.go +++ b/storage/filesystem/internal/dotgit/dotgit_test.go @@ -419,7 +419,7 @@ func findReference(refs []*plumbing.Reference, name string) *plumbing.Reference return nil } -func (s *SuiteDotGit) TestObjectsPack(c *C) { +func (s *SuiteDotGit) TestObjectPacks(c *C) { f := fixtures.Basic().ByTag(".git").One() fs := f.DotGit() dir := New(fs) @@ -428,6 +428,18 @@ func (s *SuiteDotGit) TestObjectsPack(c *C) { c.Assert(err, IsNil) c.Assert(hashes, HasLen, 1) c.Assert(hashes[0], Equals, f.PackfileHash) + + // Make sure that a random file in the pack directory doesn't + // break everything. + badFile, err := fs.Create("objects/pack/OOPS_THIS_IS_NOT_RIGHT.pack") + c.Assert(err, IsNil) + err = badFile.Close() + c.Assert(err, IsNil) + + hashes2, err := dir.ObjectPacks() + c.Assert(err, IsNil) + c.Assert(hashes2, HasLen, 1) + c.Assert(hashes[0], Equals, hashes2[0]) } func (s *SuiteDotGit) TestObjectPack(c *C) { |