collector: add bounds check and test for tcpstat collector (#1134)

Signed-off-by: Matt Layher <mdlayher@gmail.com>
This commit is contained in:
Matt Layher 2018-10-27 03:21:36 -04:00 committed by Ben Kochie
parent 3d798aa4a1
commit 778124a56c
2 changed files with 25 additions and 0 deletions

View File

@ -118,6 +118,10 @@ func parseTCPStats(r io.Reader) (map[tcpConnectionState]float64, error) {
if len(parts) == 0 { if len(parts) == 0 {
continue continue
} }
if len(parts) < 4 {
return nil, fmt.Errorf("invalid TCP stats line: %q", scanner.Text())
}
if strings.HasPrefix(parts[0], "sl") { if strings.HasPrefix(parts[0], "sl") {
continue continue
} }

View File

@ -15,9 +15,30 @@ package collector
import ( import (
"os" "os"
"strings"
"testing" "testing"
) )
func Test_parseTCPStatsError(t *testing.T) {
tests := []struct {
name string
in string
}{
{
name: "too few fields",
in: "hello world",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if _, err := parseTCPStats(strings.NewReader(tt.in)); err == nil {
t.Fatal("expected an error, but none occurred")
}
})
}
}
func TestTCPStat(t *testing.T) { func TestTCPStat(t *testing.T) {
file, err := os.Open("fixtures/proc/net/tcpstat") file, err := os.Open("fixtures/proc/net/tcpstat")
if err != nil { if err != nil {