Skip to content

Commit 968bc7c

Browse files
authored
test(fuzz): fix broken OSS-Fuz build (#21940)
Signed-off-by: Adam Korczynski <[email protected]>
1 parent 7ce403f commit 968bc7c

File tree

2 files changed

+114
-7
lines changed

2 files changed

+114
-7
lines changed

fuzz/fuzz.patch

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
diff --git a/types/address_test.go b/types/address_test.go
2+
index 014a48b73..99f9a1a86 100644
3+
--- a/types/address_test.go
4+
+++ b/types/address_test.go
5+
@@ -26,10 +26,6 @@ type addressTestSuite struct {
6+
suite.Suite
7+
}
8+
9+
-func TestAddressTestSuite(t *testing.T) {
10+
- suite.Run(t, new(addressTestSuite))
11+
-}
12+
-
13+
func (s *addressTestSuite) SetupSuite() {
14+
s.T().Parallel()
15+
}
16+
@@ -403,65 +399,6 @@ func (s *addressTestSuite) TestAddressInterface() {
17+
}
18+
}
19+
20+
-func (s *addressTestSuite) TestBech32ifyAddressBytes() {
21+
- type args struct {
22+
- prefix string
23+
- bs []byte
24+
- }
25+
- tests := []struct {
26+
- name string
27+
- args args
28+
- want string
29+
- wantErr bool
30+
- }{
31+
- {"empty address", args{"prefixa", []byte{}}, "", false},
32+
- {"empty prefix", args{"", addr20byte}, "", true},
33+
- {"10-byte address", args{"prefixa", addr10byte}, "prefixa1qqqsyqcyq5rqwzqf3953cc", false},
34+
- {"10-byte address", args{"prefixb", addr10byte}, "prefixb1qqqsyqcyq5rqwzqf20xxpc", false},
35+
- {"20-byte address", args{"prefixa", addr20byte}, "prefixa1qqqsyqcyq5rqwzqfpg9scrgwpugpzysn7hzdtn", false},
36+
- {"20-byte address", args{"prefixb", addr20byte}, "prefixb1qqqsyqcyq5rqwzqfpg9scrgwpugpzysnrujsuw", false},
37+
- }
38+
- for _, tt := range tests {
39+
- s.T().Run(tt.name, func(t *testing.T) {
40+
- got, err := types.Bech32ifyAddressBytes(tt.args.prefix, tt.args.bs)
41+
- if (err != nil) != tt.wantErr {
42+
- t.Errorf("Bech32ifyBytes() error = %v, wantErr %v", err, tt.wantErr)
43+
- return
44+
- }
45+
- require.Equal(t, tt.want, got)
46+
- })
47+
- }
48+
-}
49+
-
50+
-func (s *addressTestSuite) TestMustBech32ifyAddressBytes() {
51+
- type args struct {
52+
- prefix string
53+
- bs []byte
54+
- }
55+
- tests := []struct {
56+
- name string
57+
- args args
58+
- want string
59+
- wantPanic bool
60+
- }{
61+
- {"empty address", args{"prefixa", []byte{}}, "", false},
62+
- {"empty prefix", args{"", addr20byte}, "", true},
63+
- {"10-byte address", args{"prefixa", addr10byte}, "prefixa1qqqsyqcyq5rqwzqf3953cc", false},
64+
- {"10-byte address", args{"prefixb", addr10byte}, "prefixb1qqqsyqcyq5rqwzqf20xxpc", false},
65+
- {"20-byte address", args{"prefixa", addr20byte}, "prefixa1qqqsyqcyq5rqwzqfpg9scrgwpugpzysn7hzdtn", false},
66+
- {"20-byte address", args{"prefixb", addr20byte}, "prefixb1qqqsyqcyq5rqwzqfpg9scrgwpugpzysnrujsuw", false},
67+
- }
68+
- for _, tt := range tests {
69+
- s.T().Run(tt.name, func(t *testing.T) {
70+
- if tt.wantPanic {
71+
- require.Panics(t, func() { types.MustBech32ifyAddressBytes(tt.args.prefix, tt.args.bs) })
72+
- return
73+
- }
74+
- require.Equal(t, tt.want, types.MustBech32ifyAddressBytes(tt.args.prefix, tt.args.bs))
75+
- })
76+
- }
77+
-}
78+
-
79+
func (s *addressTestSuite) TestAddressTypesEquals() {
80+
addr1 := secp256k1.GenPrivKey().PubKey().Address()
81+
accAddr1 := types.AccAddress(addr1)

fuzz/oss-fuzz-build.sh

+33-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,34 @@
11
#!/bin/bash
22

3+
set -o nounset
4+
set -o pipefail
5+
set -o errexit
6+
set -x
7+
8+
cd $SRC
9+
wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
10+
mkdir $SRC/new-go
11+
rm -rf /root/.go && tar -C $SRC/new-go/ -xzf go1.23.1.linux-amd64.tar.gz
12+
mv $SRC/new-go/go /root/.go
13+
ls /root/.go
14+
15+
cd $SRC/go-118-fuzz-build
16+
go build .
17+
mv go-118-fuzz-build /root/go/bin/
18+
cd $SRC/cosmos-sdk
19+
git apply ./fuzz/fuzz.patch
20+
21+
mkdir $SRC/cosmos-sdk/types/fuzzing
22+
mv $SRC/cosmos-sdk/types/address*_test.go $SRC/cosmos-sdk/types/fuzzing/
23+
sed 's/package types_test/package fuzzing/g' -i "$SRC"/cosmos-sdk/types/fuzzing/*
24+
25+
rm $SRC/cosmos-sdk/math/dec_internal_test.go
26+
rm $SRC/cosmos-sdk/math/int_internal_test.go
27+
rm $SRC/cosmos-sdk/math/uint_internal_test.go
28+
mv $SRC/cosmos-sdk/types/fuzz_test.go $SRC/cosmos-sdk/types/fuzz.go
29+
rm $SRC/cosmos-sdk/types/*_test.go
30+
mv $SRC/cosmos-sdk/types/fuzz.go $SRC/cosmos-sdk/types/fuzz_test.go
31+
332
set -euo pipefail
433

534
export FUZZ_ROOT="github.com/cosmos/cosmos-sdk"
@@ -18,25 +47,22 @@ build_go_fuzzer() {
1847
compile_native_go_fuzzer cosmossdk.io/math FuzzLegacyNewDecFromStr fuzz_math_legacy_new_dec_from_str
1948
)
2049

21-
go get github.com/AdamKorcz/go-118-fuzz-build/testing
50+
printf "package types \nimport _ \"github.com/AdamKorcz/go-118-fuzz-build/testing\"\n" > ./types/fuzz-register.go
51+
go mod edit -replace github.com/AdamKorcz/go-118-fuzz-build=$SRC/go-118-fuzz-build
52+
go mod tidy
2253

2354
# TODO: fails to build with
2455
# main.413864645.go:12:2: found packages query (collections_pagination.go) and query_test (fuzz_test.go_fuzz.go) in /src/cosmos-sdk/types/query
2556
# because of the separate query_test package.
2657
# compile_native_go_fuzzer "$FUZZ_ROOT"/types/query FuzzPagination fuzz_types_query_pagination
2758
compile_native_go_fuzzer "$FUZZ_ROOT"/types FuzzCoinUnmarshalJSON fuzz_types_coin_unmarshal_json
28-
compile_native_go_fuzzer "$FUZZ_ROOT"/types FuzzBech32AccAddrConsistencyYAML fuzz_types_bech32_acc_addr_consistency_yaml
29-
59+
compile_native_go_fuzzer "$FUZZ_ROOT"/types/fuzzing FuzzBech32AccAddrConsistencyYAML fuzz_types_bech32_acc_addr_consistency_yaml
3060
build_go_fuzzer FuzzCryptoHDDerivePrivateKeyForPath fuzz_crypto_hd_deriveprivatekeyforpath
3161
build_go_fuzzer FuzzCryptoHDNewParamsFromPath fuzz_crypto_hd_newparamsfrompath
32-
3362
build_go_fuzzer FuzzCryptoTypesCompactbitarrayMarshalUnmarshal fuzz_crypto_types_compactbitarray_marshalunmarshal
34-
3563
build_go_fuzzer FuzzTendermintAminoDecodeTime fuzz_tendermint_amino_decodetime
36-
3764
build_go_fuzzer FuzzTypesParseCoin fuzz_types_parsecoin
3865
build_go_fuzzer FuzzTypesParseDecCoin fuzz_types_parsedeccoin
3966
build_go_fuzzer FuzzTypesParseTimeBytes fuzz_types_parsetimebytes
4067
build_go_fuzzer FuzzTypesDecSetString fuzz_types_dec_setstring
41-
4268
build_go_fuzzer FuzzUnknownProto fuzz_unknownproto

0 commit comments

Comments
 (0)