Browse Source

Fix crash on walker error (fixes #1507)

Audrius Butkevicius 10 years ago
parent
commit
2e1e8f764e
2 changed files with 10 additions and 1 deletions
  1. 2 1
      internal/scanner/walk.go
  2. 8 0
      internal/scanner/walk_test.go

+ 2 - 1
internal/scanner/walk.go

@@ -111,7 +111,8 @@ func (w *Walker) walkAndHashFiles(fchan chan protocol.FileInfo) filepath.WalkFun
 		// Return value used when we are returning early and don't want to
 		// process the item. For directories, this means do-not-descend.
 		var skip error // nil
-		if info.IsDir() {
+		// info nil when error is not nil
+		if info != nil && info.IsDir() {
 			skip = filepath.SkipDir
 		}
 

+ 8 - 0
internal/scanner/walk_test.go

@@ -259,6 +259,14 @@ func TestNormalization(t *testing.T) {
 	}
 }
 
+func TestIssue1507(t *testing.T) {
+	w := Walker{}
+	c := make(chan protocol.FileInfo, 100)
+	fn := w.walkAndHashFiles(c)
+
+	fn("", nil, protocol.ErrClosed)
+}
+
 func walkDir(dir string) ([]protocol.FileInfo, error) {
 	w := Walker{
 		Dir:           dir,