diff --git a/mdstat.go b/mdstat.go index f0b9e5f75..2c7900f35 100644 --- a/mdstat.go +++ b/mdstat.go @@ -166,8 +166,12 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { } func evalStatusLine(deviceLine, statusLine string) (active, total, down, size int64, err error) { + statusFields := strings.Fields(statusLine) + if len(statusFields) < 1 { + return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q", statusLine) + } - sizeStr := strings.Fields(statusLine)[0] + sizeStr := statusFields[0] size, err = strconv.ParseInt(sizeStr, 10, 64) if err != nil { return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) diff --git a/mdstat_test.go b/mdstat_test.go index d572cb346..871e95ae3 100644 --- a/mdstat_test.go +++ b/mdstat_test.go @@ -56,16 +56,23 @@ func TestFS_MDStat(t *testing.T) { } func TestInvalidMdstat(t *testing.T) { - invalidMount := []byte(` + invalidMount := [][]byte{[]byte(` Personalities : [invalid] md3 : invalid 314159265 blocks 64k chunks unused devices: -`) +`), + []byte(` +md12 : active raid0 sdc2[0] sdd2[1] - _, err := parseMDStat(invalidMount) - if err == nil { - t.Fatalf("parsing of invalid reference file did not find any errors") + 3886394368 blocks super 1.2 512k chunks +`)} + + for _, invalid := range invalidMount { + _, err := parseMDStat(invalid) + if err == nil { + t.Fatalf("parsing of invalid reference file did not find any errors") + } } }