append to a byte slice instead of a bytes.Buffer when serializing frames

This commit is contained in:
Marten Seemann
2022-08-28 23:05:07 +03:00
parent 65dd82ad90
commit 3ca1001951
50 changed files with 443 additions and 425 deletions

View File

@@ -1,7 +1,6 @@
package main
import (
"bytes"
"log"
"math/rand"
"time"
@@ -253,11 +252,11 @@ func getFrames() []wire.Frame {
func main() {
for _, f := range getFrames() {
b := &bytes.Buffer{}
if err := f.Write(b, version); err != nil {
b, err := f.Write(nil, version)
if err != nil {
log.Fatal(err)
}
if err := helper.WriteCorpusFileWithPrefix("corpus", b.Bytes(), 1); err != nil {
if err := helper.WriteCorpusFileWithPrefix("corpus", b, 1); err != nil {
log.Fatal(err)
}
}
@@ -265,20 +264,22 @@ func main() {
for i := 0; i < 30; i++ {
frames := getFrames()
b := &bytes.Buffer{}
var b []byte
for j := 0; j < rand.Intn(30)+2; j++ {
if rand.Intn(10) == 0 { // write a PADDING frame
b.WriteByte(0x0)
b = append(b, 0)
}
f := frames[rand.Intn(len(frames))]
if err := f.Write(b, version); err != nil {
var err error
b, err = f.Write(b, version)
if err != nil {
log.Fatal(err)
}
if rand.Intn(10) == 0 { // write a PADDING frame
b.WriteByte(0x0)
b = append(b, 0)
}
}
if err := helper.WriteCorpusFileWithPrefix("corpus", b.Bytes(), 1); err != nil {
if err := helper.WriteCorpusFileWithPrefix("corpus", b, 1); err != nil {
log.Fatal(err)
}
}

View File

@@ -55,10 +55,10 @@ func Fuzz(data []byte) int {
return 0
}
b := &bytes.Buffer{}
var b []byte
for _, f := range frames {
if f == nil { // PADDING frame
b.WriteByte(0x0)
b = append(b, 0)
continue
}
// We accept empty STREAM frames, but we don't write them.
@@ -68,11 +68,12 @@ func Fuzz(data []byte) int {
continue
}
}
lenBefore := b.Len()
if err := f.Write(b, version); err != nil {
lenBefore := len(b)
b, err := f.Write(b, version)
if err != nil {
panic(fmt.Sprintf("Error writing frame %#v: %s", f, err))
}
frameLen := b.Len() - lenBefore
frameLen := len(b) - lenBefore
if f.Length(version) != protocol.ByteCount(frameLen) {
panic(fmt.Sprintf("Inconsistent frame length for %#v: expected %d, got %d", f, frameLen, f.Length(version)))
}
@@ -80,8 +81,8 @@ func Fuzz(data []byte) int {
sf.PutBack()
}
}
if b.Len() > parsedLen {
panic(fmt.Sprintf("Serialized length (%d) is longer than parsed length (%d)", b.Len(), parsedLen))
if len(b) > parsedLen {
panic(fmt.Sprintf("Serialized length (%d) is longer than parsed length (%d)", len(b), parsedLen))
}
return 1
}