From 0445d859419a4eb09fcd35b0fcc340fcf1e3674f Mon Sep 17 00:00:00 2001 From: Julian Kornberger Date: Thu, 20 Jul 2017 21:09:00 +0200 Subject: [PATCH] Fix possible runtime error closes #97 --- parse.go | 14 +++++++------- parse_test.go | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/parse.go b/parse.go index 2f5fd74..12e9efa 100644 --- a/parse.go +++ b/parse.go @@ -192,14 +192,14 @@ func parseHostedFTPLine(line string) (*Entry, error) { } 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) - } - return nil, errUnsupportedListLine + fields := scanner.NextFields(2) + if len(fields) < 2 || fields[1] != "0" { + 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 diff --git a/parse_test.go b/parse_test.go index 2c042c5..91a17f7 100644 --- a/parse_test.go +++ b/parse_test.go @@ -69,6 +69,7 @@ var listTestsFail = []unsupportedLine{ {"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"}, {"total 1", "Unsupported LIST line"}, + {"000000000x ", "Unsupported LIST line"}, // see https://github.com/jlaffaye/ftp/issues/97 {"", "Unsupported LIST line"}, }