Skip to content

Commit

Permalink
Move Fuzz tests into their own file
Browse files Browse the repository at this point in the history
This is required for google/oss-fuzz#11453
  • Loading branch information
erikdubbelboer authored and Max-Cheng committed Feb 12, 2024
1 parent a19671a commit 78ce2cf
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 87 deletions.
22 changes: 0 additions & 22 deletions cookie_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package fasthttp

import (
"bytes"
"strings"
"testing"
"time"
Expand All @@ -16,27 +15,6 @@ func TestCookiePanic(t *testing.T) {
}
}

func FuzzCookieParse(f *testing.F) {
inputs := []string{
`xxx=yyy`,
`xxx=yyy; expires=Tue, 10 Nov 2009 23:00:00 GMT; domain=foobar.com; path=/a/b`,
" \n\t\"",
}
for _, input := range inputs {
f.Add([]byte(input))
}
c := AcquireCookie()
defer ReleaseCookie(c)
f.Fuzz(func(t *testing.T, cookie []byte) {
_ = c.ParseBytes(cookie)

w := bytes.Buffer{}
if _, err := c.WriteTo(&w); err != nil {
t.Fatalf("unexpected error: %v", err)
}
})
}

func TestCookieValueWithEqualAndSpaceChars(t *testing.T) {
t.Parallel()

Expand Down
93 changes: 93 additions & 0 deletions fuzz_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package fasthttp

import (
"bufio"
"bytes"
"testing"
)

func FuzzCookieParse(f *testing.F) {
inputs := []string{
`xxx=yyy`,
`xxx=yyy; expires=Tue, 10 Nov 2009 23:00:00 GMT; domain=foobar.com; path=/a/b`,
" \n\t\"",
}
for _, input := range inputs {
f.Add([]byte(input))
}
c := AcquireCookie()
defer ReleaseCookie(c)
f.Fuzz(func(t *testing.T, cookie []byte) {
_ = c.ParseBytes(cookie)

w := bytes.Buffer{}
if _, err := c.WriteTo(&w); err != nil {
t.Fatalf("unexpected error: %v", err)
}
})
}

func FuzzVisitHeaderParams(f *testing.F) {
inputs := []string{
`application/json; v=1; foo=bar; q=0.938; param=param; param="big fox"; q=0.43`,
`*/*`,
`\\`,
`text/plain; foo="\\\"\'\\''\'"`,
}
for _, input := range inputs {
f.Add([]byte(input))
}
f.Fuzz(func(t *testing.T, header []byte) {
VisitHeaderParams(header, func(key, value []byte) bool {
if len(key) == 0 {
t.Errorf("Unexpected length zero parameter, failed input was: %s", header)
}
return true
})
})
}

func FuzzResponseReadLimitBody(f *testing.F) {
res := AcquireResponse()
defer ReleaseResponse(res)

f.Add([]byte("HTTP/1.1 200 OK\r\nContent-Type: aa\r\nContent-Length: 10\r\n\r\n9876543210"), 1024*1024)

f.Fuzz(func(t *testing.T, body []byte, max int) {
_ = res.ReadLimitBody(bufio.NewReader(bytes.NewReader(body)), max)
w := bytes.Buffer{}
_, _ = res.WriteTo(&w)
})
}

func FuzzRequestReadLimitBody(f *testing.F) {
req := AcquireRequest()
defer ReleaseRequest(req)

f.Add([]byte("POST /a HTTP/1.1\r\nHost: a.com\r\nTransfer-Encoding: chunked\r\nContent-Type: aa\r\n\r\n6\r\nfoobar\r\n3\r\nbaz\r\n0\r\nfoobar\r\n\r\n"), 1024*1024)

f.Fuzz(func(t *testing.T, body []byte, max int) {
_ = req.ReadLimitBody(bufio.NewReader(bytes.NewReader(body)), max)
w := bytes.Buffer{}
_, _ = req.WriteTo(&w)
})
}

func FuzzURIUpdateBytes(f *testing.F) {
u := AcquireURI()
defer ReleaseURI(u)

f.Add([]byte(`http://foobar.com/aaa/bb?cc`))
f.Add([]byte(`//foobar.com/aaa/bb?cc`))
f.Add([]byte(`/aaa/bb?cc`))
f.Add([]byte(`xx?yy=abc`))

f.Fuzz(func(t *testing.T, uri []byte) {
u.UpdateBytes(uri)

w := bytes.Buffer{}
if _, err := u.WriteTo(&w); err != nil {
t.Fatalf("unexpected error: %v", err)
}
})
}
20 changes: 0 additions & 20 deletions header_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1110,26 +1110,6 @@ func testVisitHeaderParams(t *testing.T, header string, expectedParams [][2]stri
}
}

func FuzzVisitHeaderParams(f *testing.F) {
inputs := []string{
`application/json; v=1; foo=bar; q=0.938; param=param; param="big fox"; q=0.43`,
`*/*`,
`\\`,
`text/plain; foo="\\\"\'\\''\'"`,
}
for _, input := range inputs {
f.Add([]byte(input))
}
f.Fuzz(func(t *testing.T, header []byte) {
VisitHeaderParams(header, func(key, value []byte) bool {
if len(key) == 0 {
t.Errorf("Unexpected length zero parameter, failed input was: %s", header)
}
return true
})
})
}

func TestRequestMultipartFormBoundary(t *testing.T) {
t.Parallel()

Expand Down
26 changes: 0 additions & 26 deletions http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1700,32 +1700,6 @@ func testRequestReadLimitBodySuccess(t *testing.T, s string, maxBodySize int) {
}
}

func FuzzResponseReadLimitBody(f *testing.F) {
res := AcquireResponse()
defer ReleaseResponse(res)

f.Add([]byte("HTTP/1.1 200 OK\r\nContent-Type: aa\r\nContent-Length: 10\r\n\r\n9876543210"), 1024*1024)

f.Fuzz(func(t *testing.T, body []byte, max int) {
_ = res.ReadLimitBody(bufio.NewReader(bytes.NewReader(body)), max)
w := bytes.Buffer{}
_, _ = res.WriteTo(&w)
})
}

func FuzzRequestReadLimitBody(f *testing.F) {
req := AcquireRequest()
defer ReleaseRequest(req)

f.Add([]byte("POST /a HTTP/1.1\r\nHost: a.com\r\nTransfer-Encoding: chunked\r\nContent-Type: aa\r\n\r\n6\r\nfoobar\r\n3\r\nbaz\r\n0\r\nfoobar\r\n\r\n"), 1024*1024)

f.Fuzz(func(t *testing.T, body []byte, max int) {
_ = req.ReadLimitBody(bufio.NewReader(bytes.NewReader(body)), max)
w := bytes.Buffer{}
_, _ = req.WriteTo(&w)
})
}

func TestRequestString(t *testing.T) {
t.Parallel()

Expand Down
19 changes: 0 additions & 19 deletions uri_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,6 @@ import (
"time"
)

func FuzzURIUpdateBytes(f *testing.F) {
u := AcquireURI()
defer ReleaseURI(u)

f.Add([]byte(`http://foobar.com/aaa/bb?cc`))
f.Add([]byte(`//foobar.com/aaa/bb?cc`))
f.Add([]byte(`/aaa/bb?cc`))
f.Add([]byte(`xx?yy=abc`))

f.Fuzz(func(t *testing.T, uri []byte) {
u.UpdateBytes(uri)

w := bytes.Buffer{}
if _, err := u.WriteTo(&w); err != nil {
t.Fatalf("unexpected error: %v", err)
}
})
}

func TestURICopyToQueryArgs(t *testing.T) {
t.Parallel()

Expand Down

0 comments on commit 78ce2cf

Please sign in to comment.