diff --git a/.github/workflows/go-test-template.yml b/.github/workflows/go-test-template.yml index fa7c974ea2..f79719ec4b 100644 --- a/.github/workflows/go-test-template.yml +++ b/.github/workflows/go-test-template.yml @@ -109,7 +109,7 @@ jobs: run: test_analysis ${{ env.GOTESTFLAGS }} - name: Upload test results if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }}_${{ matrix.go }}_test_results.db path: ./test_results.db @@ -131,7 +131,7 @@ jobs: run: test_analysis -race ${{ env.GORACEFLAGS }} ./... - name: Upload test results (Race) if: (steps.race.conclusion == 'success' || steps.race.conclusion == 'failure') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }}_${{ matrix.go }}_test_results_race.db path: ./test_results.db diff --git a/go.mod b/go.mod index 7da5a50105..561428c60d 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,7 @@ require ( github.com/pion/webrtc/v3 v3.3.5 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 - github.com/quic-go/quic-go v0.48.2 + github.com/quic-go/quic-go v0.49.0 github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 github.com/raulk/go-watchdog v1.3.0 github.com/stretchr/testify v1.10.0 diff --git a/go.sum b/go.sum index 7a822e8481..a405c853b2 100644 --- a/go.sum +++ b/go.sum @@ -333,8 +333,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= -github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/quic-go v0.49.0 h1:w5iJHXwHxs1QxyBv1EHKuC50GX5to8mJAxvtnttJp94= +github.com/quic-go/quic-go v0.49.0/go.mod h1:s2wDnmCdooUQBmQfpUSTCYBl1/D4FcqbULMMkASvR6s= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= diff --git a/p2p/transport/quic/stream.go b/p2p/transport/quic/stream.go index 56f12dade2..ee21babe68 100644 --- a/p2p/transport/quic/stream.go +++ b/p2p/transport/quic/stream.go @@ -19,16 +19,20 @@ type stream struct { var _ network.MuxedStream = &stream{} func (s *stream) Read(b []byte) (n int, err error) { + var streamErr *quic.StreamError + n, err = s.Stream.Read(b) - if err != nil && errors.Is(err, &quic.StreamError{}) { + if err != nil && errors.As(err, &streamErr) { err = network.ErrReset } return n, err } func (s *stream) Write(b []byte) (n int, err error) { + var streamErr *quic.StreamError + n, err = s.Stream.Write(b) - if err != nil && errors.Is(err, &quic.StreamError{}) { + if err != nil && errors.As(err, &streamErr) { err = network.ErrReset } return n, err diff --git a/p2p/transport/webtransport/crypto.go b/p2p/transport/webtransport/crypto.go index bdc121c52a..90504ead01 100644 --- a/p2p/transport/webtransport/crypto.go +++ b/p2p/transport/webtransport/crypto.go @@ -86,6 +86,15 @@ func generateCert(key ic.PrivKey, start, end time.Time) (*x509.Certificate, *ecd return ca, caPrivateKey, nil } +type ErrCertHashMismatch struct { + Expected []byte + Actual [][]byte +} + +func (e ErrCertHashMismatch) Error() string { + return fmt.Sprintf("cert hash not found: %x (expected: %#x)", e.Expected, e.Actual) +} + func verifyRawCerts(rawCerts [][]byte, certHashes []multihash.DecodedMultihash) error { if len(rawCerts) < 1 { return errors.New("no cert") @@ -105,7 +114,7 @@ func verifyRawCerts(rawCerts [][]byte, certHashes []multihash.DecodedMultihash) for _, h := range certHashes { digests = append(digests, h.Digest) } - return fmt.Errorf("cert hash not found: %#x (expected: %#x)", hash, digests) + return ErrCertHashMismatch{Expected: hash[:], Actual: digests} } cert, err := x509.ParseCertificate(leaf) diff --git a/p2p/transport/webtransport/transport_test.go b/p2p/transport/webtransport/transport_test.go index f58f6cc009..0d43f0d30c 100644 --- a/p2p/transport/webtransport/transport_test.go +++ b/p2p/transport/webtransport/transport_test.go @@ -179,7 +179,11 @@ func TestHashVerification(t *testing.T) { var trErr *quic.TransportError require.ErrorAs(t, err, &trErr) require.Equal(t, quic.TransportErrorCode(0x12a), trErr.ErrorCode) - require.Contains(t, errors.Unwrap(trErr).Error(), "cert hash not found") + var errMismatchHash libp2pwebtransport.ErrCertHashMismatch + require.ErrorAs(t, err, &errMismatchHash) + + e := sha256.Sum256([]byte("foobar")) + require.EqualValues(t, e[:], errMismatchHash.Actual[0]) }) t.Run("fails when adding a wrong hash", func(t *testing.T) { diff --git a/test-plans/go.mod b/test-plans/go.mod index a320074aed..e825c9122b 100644 --- a/test-plans/go.mod +++ b/test-plans/go.mod @@ -89,7 +89,7 @@ require ( github.com/prometheus/common v0.61.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.48.2 // indirect + github.com/quic-go/quic-go v0.49.0 // indirect github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect diff --git a/test-plans/go.sum b/test-plans/go.sum index 7b62798632..f707c19e68 100644 --- a/test-plans/go.sum +++ b/test-plans/go.sum @@ -279,8 +279,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= -github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/quic-go v0.49.0 h1:w5iJHXwHxs1QxyBv1EHKuC50GX5to8mJAxvtnttJp94= +github.com/quic-go/quic-go v0.49.0/go.mod h1:s2wDnmCdooUQBmQfpUSTCYBl1/D4FcqbULMMkASvR6s= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= diff --git a/version.json b/version.json index 6a5c68d20d..23ec940a57 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "v0.38.2" + "version": "v0.38.3" }