From bc276720f019416cd9053cae508b00524ccdf158 Mon Sep 17 00:00:00 2001 From: web3-bot Date: Mon, 20 Mar 2023 09:37:52 +0000 Subject: [PATCH 1/5] bump go.mod to Go 1.19 and run go fix --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c38c8eb..284a8d5 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/multiformats/go-multiaddr -go 1.18 +go 1.19 require ( github.com/ipfs/go-cid v0.0.7 From 9aed57b6801fff0acee8bebdb150e4bd38d2dd9f Mon Sep 17 00:00:00 2001 From: web3-bot Date: Mon, 20 Mar 2023 09:38:08 +0000 Subject: [PATCH 2/5] update .github/workflows/go-test.yml --- .github/workflows/go-test.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml index 8a1697b..c5cb3ef 100644 --- a/.github/workflows/go-test.yml +++ b/.github/workflows/go-test.yml @@ -10,15 +10,17 @@ jobs: fail-fast: false matrix: os: [ "ubuntu", "windows", "macos" ] - go: [ "1.18.x", "1.19.x" ] + go: ["1.19.x","1.20.x"] env: COVERAGES: "" - runs-on: ${{ format('{0}-latest', matrix.os) }} + runs-on: ${{ fromJSON(vars[format('UCI_GO_TEST_RUNNER_{0}', matrix.os)] || format('"{0}-latest"', matrix.os)) }} name: ${{ matrix.os }} (go ${{ matrix.go }}) steps: - uses: actions/checkout@v3 with: submodules: recursive + - id: config + uses: protocol/.github/.github/actions/read-config@master - uses: actions/setup-go@v3 with: go-version: ${{ matrix.go }} @@ -27,7 +29,7 @@ jobs: go version go env - name: Use msys2 on windows - if: ${{ matrix.os == 'windows' }} + if: matrix.os == 'windows' shell: bash # The executable for msys2 is also called bash.cmd # https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#shells @@ -38,6 +40,7 @@ jobs: uses: ./.github/actions/go-test-setup if: hashFiles('./.github/actions/go-test-setup') != '' - name: Run tests + if: contains(fromJSON(steps.config.outputs.json).skipOSes, matrix.os) == false uses: protocol/multiple-go-modules@v1.2 with: # Use -coverpkg=./..., so that we include cross-package coverage. @@ -45,16 +48,21 @@ jobs: # this means ./B's coverage will be significantly higher than 0%. run: go test -v -shuffle=on -coverprofile=module-coverage.txt -coverpkg=./... ./... - name: Run tests (32 bit) - if: ${{ matrix.os != 'macos' }} # can't run 32 bit tests on OSX. + # can't run 32 bit tests on OSX. + if: matrix.os != 'macos' && + fromJSON(steps.config.outputs.json).skip32bit != true && + contains(fromJSON(steps.config.outputs.json).skipOSes, matrix.os) == false uses: protocol/multiple-go-modules@v1.2 env: GOARCH: 386 with: run: | - export "PATH=${{ env.PATH_386 }}:$PATH" + export "PATH=$PATH_386:$PATH" go test -v -shuffle=on ./... - name: Run tests with race detector - if: ${{ matrix.os == 'ubuntu' }} # speed things up. Windows and OSX VMs are slow + # speed things up. Windows and OSX VMs are slow + if: matrix.os == 'ubuntu' && + contains(fromJSON(steps.config.outputs.json).skipOSes, matrix.os) == false uses: protocol/multiple-go-modules@v1.2 with: run: go test -v -race ./... @@ -62,7 +70,7 @@ jobs: shell: bash run: echo "COVERAGES=$(find . -type f -name 'module-coverage.txt' | tr -s '\n' ',' | sed 's/,$//')" >> $GITHUB_ENV - name: Upload coverage to Codecov - uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # v3.1.0 + uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # v3.1.1 with: files: '${{ env.COVERAGES }}' env_vars: OS=${{ matrix.os }}, GO=${{ matrix.go }} From 31a78acae7b9b2d0e8204400f00eac91b3c6aca8 Mon Sep 17 00:00:00 2001 From: web3-bot Date: Mon, 20 Mar 2023 09:38:08 +0000 Subject: [PATCH 3/5] update .github/workflows/go-check.yml --- .github/workflows/go-check.yml | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/.github/workflows/go-check.yml b/.github/workflows/go-check.yml index 251f7fa..cc65ce6 100644 --- a/.github/workflows/go-check.yml +++ b/.github/workflows/go-check.yml @@ -8,26 +8,20 @@ jobs: unit: runs-on: ubuntu-latest name: All - env: - RUNGOGENERATE: false steps: - uses: actions/checkout@v3 with: submodules: recursive + - id: config + uses: protocol/.github/.github/actions/read-config@master - uses: actions/setup-go@v3 with: - go-version: "1.19.x" + go-version: 1.20.x - name: Run repo-specific setup uses: ./.github/actions/go-check-setup if: hashFiles('./.github/actions/go-check-setup') != '' - - name: Read config - if: hashFiles('./.github/workflows/go-check-config.json') != '' - run: | - if jq -re .gogenerate ./.github/workflows/go-check-config.json; then - echo "RUNGOGENERATE=true" >> $GITHUB_ENV - fi - name: Install staticcheck - run: go install honnef.co/go/tools/cmd/staticcheck@376210a89477dedbe6fdc4484b233998650d7b3c # 2022.1.3 (v0.3.3) + run: go install honnef.co/go/tools/cmd/staticcheck@4970552d932f48b71485287748246cf3237cebdf # 2023.1 (v0.4.0) - name: Check that go.mod is tidy uses: protocol/multiple-go-modules@v1.2 with: @@ -39,7 +33,7 @@ jobs: fi git diff --exit-code -- go.sum go.mod - name: gofmt - if: ${{ success() || failure() }} # run this step even if the previous one failed + if: success() || failure() # run this step even if the previous one failed run: | out=$(gofmt -s -l .) if [[ -n "$out" ]]; then @@ -47,12 +41,12 @@ jobs: exit 1 fi - name: go vet - if: ${{ success() || failure() }} # run this step even if the previous one failed + if: success() || failure() # run this step even if the previous one failed uses: protocol/multiple-go-modules@v1.2 with: run: go vet ./... - name: staticcheck - if: ${{ success() || failure() }} # run this step even if the previous one failed + if: success() || failure() # run this step even if the previous one failed uses: protocol/multiple-go-modules@v1.2 with: run: | @@ -60,11 +54,11 @@ jobs: staticcheck ./... | sed -e 's@\(.*\)\.go@./\1.go@g' - name: go generate uses: protocol/multiple-go-modules@v1.2 - if: (success() || failure()) && env.RUNGOGENERATE == 'true' + if: (success() || failure()) && fromJSON(steps.config.outputs.json).gogenerate == true with: run: | git clean -fd # make sure there aren't untracked files / directories - go generate ./... + go generate -x ./... # check if go generate modified or added any files if ! $(git add . && git diff-index HEAD --exit-code --quiet); then echo "go generated caused changes to the repository:" From c16b930a04d3efb8ddc73d4eeb5f0cdb3cd97ee7 Mon Sep 17 00:00:00 2001 From: web3-bot Date: Mon, 20 Mar 2023 09:38:09 +0000 Subject: [PATCH 4/5] update .github/workflows/release-check.yml --- .github/workflows/release-check.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-check.yml b/.github/workflows/release-check.yml index fde81c1..e2408e3 100644 --- a/.github/workflows/release-check.yml +++ b/.github/workflows/release-check.yml @@ -3,9 +3,11 @@ name: Release Checker on: - pull_request: + pull_request_target: paths: [ 'version.json' ] jobs: release-check: uses: protocol/.github/.github/workflows/release-check.yml@master + with: + go-version: 1.20.x From 76e2732b91ecc6a4ea93b104c2c5840a9b8d48df Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 29 Jun 2023 13:23:02 -0700 Subject: [PATCH 5/5] stop using math/rand.Seed, convert fuzz functions to actual fuzzers --- multiaddr_test.go | 58 ++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/multiaddr_test.go b/multiaddr_test.go index fc0f2a9..77aa3cb 100644 --- a/multiaddr_test.go +++ b/multiaddr_test.go @@ -3,15 +3,11 @@ package multiaddr import ( "bytes" "encoding/hex" - "math/rand" - "strings" "testing" - "time" - - "github.com/stretchr/testify/require" "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" + "github.com/stretchr/testify/require" ) func newMultiaddr(t *testing.T, a string) Multiaddr { @@ -499,56 +495,32 @@ func TestGetValue(t *testing.T) { assertValueForProto(t, a, P_UNIX, "/a/b/c/d") } -func TestFuzzBytes(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - // Bump up these numbers if you want to stress this - buf := make([]byte, 256) - for i := 0; i < 2000; i++ { - l := rand.Intn(len(buf)) - rand.Read(buf[:l]) - - // just checking that it doesnt panic - ma, err := NewMultiaddrBytes(buf[:l]) +func FuzzNewMultiaddrBytes(f *testing.F) { + f.Fuzz(func(_ *testing.T, b []byte) { + // just checking that it doesn't panic + ma, err := NewMultiaddrBytes(b) if err == nil { // for any valid multiaddrs, make sure these calls don't panic _ = ma.String() ma.Protocols() } - } + }) } -func randMaddrString() string { - good_corpus := []string{"tcp", "ip", "udp", "ipfs", "0.0.0.0", "127.0.0.1", "12345", "QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP"} - - size := rand.Intn(256) - parts := make([]string, 0, size) - for i := 0; i < size; i++ { - switch rand.Intn(5) { - case 0, 1, 2: - parts = append(parts, good_corpus[rand.Intn(len(good_corpus))]) - default: - badbuf := make([]byte, rand.Intn(256)) - rand.Read(badbuf) - parts = append(parts, string(badbuf)) - } - } - - return "/" + strings.Join(parts, "/") -} - -func TestFuzzString(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - // Bump up these numbers if you want to stress this - for i := 0; i < 2000; i++ { - - // just checking that it doesnt panic - ma, err := NewMultiaddr(randMaddrString()) +func FuzzNewMultiaddrString(f *testing.F) { + f.Add("/ip4/0.0.0.0/udp/12345/utp") + f.Add("/ip4/1.2.3.4/udp/12345/quic") + f.Add("/ip4/127.0.0.1/tcp/12345") + f.Add("/ip4/127.0.0.1/udp/1234/quic-v1/webtransport/certhash/uEiDDq4_xNyDorZBH3TlGazyJdOWSwvo4PUo5YHFMrvDE8g") + f.Fuzz(func(_ *testing.T, s string) { + // just checking that it doesn't panic + ma, err := NewMultiaddr(s) if err == nil { // for any valid multiaddrs, make sure these calls don't panic _ = ma.String() ma.Protocols() } - } + }) } func TestBinaryRepresentation(t *testing.T) {