mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-01 03:14:16 +00:00
c2b76eee36
Change-Id: I2db557669ada6e031140a09b3a92bd901220f8f3 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/580975 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Lasse Folger <lassefolger@google.com> Reviewed-by: Michael Stapelberg <stapelberg@google.com> Auto-Submit: Michael Stapelberg <stapelberg@google.com>
138 lines
4.8 KiB
Go
138 lines
4.8 KiB
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Program generate-corpus generates a seed corpus for the fuzzers.
|
|
//
|
|
// This command is not run automatically because its output is not stable.
|
|
// It's present in source control mainly as documentation of where the seed
|
|
// corpus came from.
|
|
package main
|
|
|
|
import (
|
|
"crypto/sha1"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"google.golang.org/protobuf/encoding/protojson"
|
|
"google.golang.org/protobuf/encoding/prototext"
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
fuzzpb "google.golang.org/protobuf/internal/testprotos/fuzz"
|
|
testpb "google.golang.org/protobuf/internal/testprotos/test"
|
|
)
|
|
|
|
var messages = []proto.Message{
|
|
&fuzzpb.Fuzz{
|
|
TestAllTypes: &testpb.TestAllTypes{
|
|
OptionalInt32: proto.Int32(1001),
|
|
OptionalInt64: proto.Int64(1002),
|
|
OptionalUint32: proto.Uint32(1003),
|
|
OptionalUint64: proto.Uint64(1004),
|
|
OptionalSint32: proto.Int32(1005),
|
|
OptionalSint64: proto.Int64(1006),
|
|
OptionalFixed32: proto.Uint32(1007),
|
|
OptionalFixed64: proto.Uint64(1008),
|
|
OptionalSfixed32: proto.Int32(1009),
|
|
OptionalSfixed64: proto.Int64(1010),
|
|
OptionalFloat: proto.Float32(1011.5),
|
|
OptionalDouble: proto.Float64(1012.5),
|
|
OptionalBool: proto.Bool(true),
|
|
OptionalString: proto.String("string"),
|
|
OptionalBytes: []byte("bytes"),
|
|
OptionalNestedEnum: testpb.TestAllTypes_BAR.Enum(),
|
|
Optionalgroup: &testpb.TestAllTypes_OptionalGroup{
|
|
A: proto.Int32(1017),
|
|
},
|
|
OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
|
|
A: proto.Int32(42),
|
|
Corecursive: &testpb.TestAllTypes{
|
|
OptionalInt32: proto.Int32(43),
|
|
},
|
|
},
|
|
RepeatedInt32: []int32{1001, 2001},
|
|
RepeatedInt64: []int64{1002, 2002},
|
|
RepeatedUint32: []uint32{1003, 2003},
|
|
RepeatedUint64: []uint64{1004, 2004},
|
|
RepeatedSint32: []int32{1005, 2005},
|
|
RepeatedSint64: []int64{1006, 2006},
|
|
RepeatedFixed32: []uint32{1007, 2007},
|
|
RepeatedFixed64: []uint64{1008, 2008},
|
|
RepeatedSfixed32: []int32{1009, 2009},
|
|
RepeatedSfixed64: []int64{1010, 2010},
|
|
RepeatedFloat: []float32{1011.5, 2011.5},
|
|
RepeatedDouble: []float64{1012.5, 2012.5},
|
|
RepeatedBool: []bool{true, false},
|
|
RepeatedString: []string{"foo", "bar"},
|
|
RepeatedBytes: [][]byte{[]byte("FOO"), []byte("BAR")},
|
|
RepeatedNestedEnum: []testpb.TestAllTypes_NestedEnum{
|
|
testpb.TestAllTypes_FOO,
|
|
testpb.TestAllTypes_BAR,
|
|
},
|
|
RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{
|
|
{A: proto.Int32(1)},
|
|
nil,
|
|
{A: proto.Int32(2)},
|
|
},
|
|
Repeatedgroup: []*testpb.TestAllTypes_RepeatedGroup{
|
|
{A: proto.Int32(1017)},
|
|
nil,
|
|
{A: proto.Int32(2017)},
|
|
},
|
|
MapInt32Int32: map[int32]int32{1056: 1156, 2056: 2156},
|
|
MapInt64Int64: map[int64]int64{1057: 1157, 2057: 2157},
|
|
MapUint32Uint32: map[uint32]uint32{1058: 1158, 2058: 2158},
|
|
MapUint64Uint64: map[uint64]uint64{1059: 1159, 2059: 2159},
|
|
MapSint32Sint32: map[int32]int32{1060: 1160, 2060: 2160},
|
|
MapSint64Sint64: map[int64]int64{1061: 1161, 2061: 2161},
|
|
MapFixed32Fixed32: map[uint32]uint32{1062: 1162, 2062: 2162},
|
|
MapFixed64Fixed64: map[uint64]uint64{1063: 1163, 2063: 2163},
|
|
MapSfixed32Sfixed32: map[int32]int32{1064: 1164, 2064: 2164},
|
|
MapSfixed64Sfixed64: map[int64]int64{1065: 1165, 2065: 2165},
|
|
MapInt32Float: map[int32]float32{1066: 1166.5, 2066: 2166.5},
|
|
MapInt32Double: map[int32]float64{1067: 1167.5, 2067: 2167.5},
|
|
MapBoolBool: map[bool]bool{true: false, false: true},
|
|
MapStringString: map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"},
|
|
MapStringBytes: map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")},
|
|
MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{
|
|
"71.1.key": {A: proto.Int32(1171)},
|
|
"71.2.key": {A: proto.Int32(2171)},
|
|
},
|
|
MapStringNestedEnum: map[string]testpb.TestAllTypes_NestedEnum{
|
|
"73.1.key": testpb.TestAllTypes_FOO,
|
|
"73.2.key": testpb.TestAllTypes_BAR,
|
|
},
|
|
OneofField: &testpb.TestAllTypes_OneofUint32{1111},
|
|
},
|
|
},
|
|
}
|
|
|
|
func main() {
|
|
for _, m := range messages {
|
|
wire, err := proto.Marshal(m)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(fmt.Sprintf("internal/fuzz/wirefuzz/corpus/%x", sha1.Sum(wire)), wire, 0777); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
text, err := prototext.Marshal(m)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(fmt.Sprintf("internal/fuzz/textfuzz/corpus/%x", sha1.Sum(text)), text, 0777); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
json, err := protojson.Marshal(m)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(fmt.Sprintf("internal/fuzz/jsonfuzz/corpus/%x", sha1.Sum(json)), json, 0777); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
}
|