aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--utils/merkletrie/change.go9
-rw-r--r--utils/merkletrie/change_test.go11
2 files changed, 20 insertions, 0 deletions
diff --git a/utils/merkletrie/change.go b/utils/merkletrie/change.go
index cc6dc89..450feb4 100644
--- a/utils/merkletrie/change.go
+++ b/utils/merkletrie/change.go
@@ -1,12 +1,17 @@
package merkletrie
import (
+ "errors"
"fmt"
"io"
"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)
+var (
+ ErrEmptyFileName = errors.New("empty filename in tree entry")
+)
+
// Action values represent the kind of things a Change can represent:
// insertion, deletions or modifications of files.
type Action int
@@ -121,6 +126,10 @@ func (l *Changes) AddRecursiveDelete(root noder.Path) error {
type noderToChangeFn func(noder.Path) Change // NewInsert or NewDelete
func (l *Changes) addRecursive(root noder.Path, ctor noderToChangeFn) error {
+ if root.String() == "" {
+ return ErrEmptyFileName
+ }
+
if !root.IsDir() {
l.Add(ctor(root))
return nil
diff --git a/utils/merkletrie/change_test.go b/utils/merkletrie/change_test.go
index f73eb86..cd28bfe 100644
--- a/utils/merkletrie/change_test.go
+++ b/utils/merkletrie/change_test.go
@@ -28,6 +28,17 @@ func (s *ChangeSuite) TestUnsupportedAction(c *C) {
c.Assert(a.String, PanicMatches, "unsupported action.*")
}
+func (s ChangeSuite) TestEmptyChanges(c *C) {
+ ret := merkletrie.NewChanges()
+ p := noder.Path{}
+
+ err := ret.AddRecursiveInsert(p)
+ c.Assert(err, Equals, merkletrie.ErrEmptyFileName)
+
+ err = ret.AddRecursiveDelete(p)
+ c.Assert(err, Equals, merkletrie.ErrEmptyFileName)
+}
+
func (s ChangeSuite) TestNewInsert(c *C) {
tree, err := fsnoder.New("(a(b(z<>)))")
c.Assert(err, IsNil)