Browse Source

Merge pull request #98 from digineo/fix_97

Fix possible runtime error
Julien Laffaye 8 years ago
parent
commit
769512c448
2 changed files with 7 additions and 6 deletions
  1. 6 6
      parse.go
  2. 1 0
      parse_test.go

+ 6 - 6
parse.go

@@ -192,14 +192,14 @@ func parseHostedFTPLine(line string) (*Entry, error) {
 	}
 	}
 
 
 	scanner := newScanner(line)
 	scanner := newScanner(line)
-	fields := scanner.NextFields(9)
-	if fields[1] == "0" { // Set link count to 1 and attempt to parse as Unix.
-		fields[1] = "1"
-		newLine := strings.Join(fields, " ")
-		return parseLsListLine(newLine)
+	fields := scanner.NextFields(2)
+
+	if len(fields) < 2 || fields[1] != "0" {
+		return nil, errUnsupportedListLine
 	}
 	}
-	return nil, errUnsupportedListLine
 
 
+	// Set link count to 1 and attempt to parse as Unix.
+	return parseLsListLine(fields[0] + " 1 " + scanner.Remaining())
 }
 }
 
 
 // parseListLine parses the various non-standard format returned by the LIST
 // parseListLine parses the various non-standard format returned by the LIST

+ 1 - 0
parse_test.go

@@ -69,6 +69,7 @@ var listTestsFail = []unsupportedLine{
 	{"modify=20150806235817;invalid;UNIX.owner=0; movies", "Unsupported LIST line"},
 	{"modify=20150806235817;invalid;UNIX.owner=0; movies", "Unsupported LIST line"},
 	{"Zrwxrwxrwx   1 root     other          7 Jan 25 00:17 bin -> usr/bin", "Unknown entry type"},
 	{"Zrwxrwxrwx   1 root     other          7 Jan 25 00:17 bin -> usr/bin", "Unknown entry type"},
 	{"total 1", "Unsupported LIST line"},
 	{"total 1", "Unsupported LIST line"},
+	{"000000000x ", "Unsupported LIST line"}, // see https://github.com/jlaffaye/ftp/issues/97
 	{"", "Unsupported LIST line"},
 	{"", "Unsupported LIST line"},
 }
 }