aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-07-30 19:33:02 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-07-30 19:33:02 +0200
commit7c7ded697e6322b0975f061b7e268fe44f585dab (patch)
tree400f141578159dce58b9ab2a2ba32842e29b1149
parent3b37734422dc0cb40100287bbb3628d8d946c271 (diff)
prog: fix out-of-bounds access
ParseLog can access data out-of-bounds. Fix that and fix regression fuzz tests to catch this.
-rw-r--r--pkg/report/report_test.go2
-rw-r--r--prog/parse.go2
-rw-r--r--prog/test/fuzz_test.go6
3 files changed, 6 insertions, 4 deletions
diff --git a/pkg/report/report_test.go b/pkg/report/report_test.go
index 4d3137175..983da5d1e 100644
--- a/pkg/report/report_test.go
+++ b/pkg/report/report_test.go
@@ -372,6 +372,6 @@ func TestFuzz(t *testing.T) {
"cleaned vnod\re",
"kernel\r:",
} {
- Fuzz([]byte(data))
+ Fuzz([]byte(data)[:len(data):len(data)])
}
}
diff --git a/prog/parse.go b/prog/parse.go
index 8a8fdf9b1..7a46322df 100644
--- a/prog/parse.go
+++ b/prog/parse.go
@@ -26,7 +26,7 @@ func (target *Target) ParseLog(data []byte) []*LogEntry {
for pos := 0; pos < len(data); {
nl := bytes.IndexByte(data[pos:], '\n')
if nl == -1 {
- nl = len(data)
+ nl = len(data) - 1
} else {
nl += pos
}
diff --git a/prog/test/fuzz_test.go b/prog/test/fuzz_test.go
index b3a123749..3774b2fba 100644
--- a/prog/test/fuzz_test.go
+++ b/prog/test/fuzz_test.go
@@ -22,9 +22,11 @@ mutate4()
mutate7()
mutate8()
`,
+ `E`,
} {
t.Logf("test #%v: %q", i, data)
- FuzzDeserialize([]byte(data))
- FuzzParseLog([]byte(data))
+ inp := []byte(data)[:len(data):len(data)]
+ FuzzDeserialize(inp)
+ FuzzParseLog(inp)
}
}