Browse Source

rpc/lib: fix RPC client, which was previously resolving https protocol to http (#4131) (#4284)

Fixes #4051

Function `parseRemoteAddr` is forcing protocol HTTP and protocol HTTPs to tcp. This causes the bug in the issue #4051.

I find that the tcp is only needed where `net.Dial`. So I moved the switch to makeHTTPDialer.

This is a backport to the v0.32 branch.

Co-authored-by: yk <tankhoon@gmail.com>
Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
rc1/v0.32.12
Greg Szabo 4 years ago
committed by Jack Zampolin
parent
commit
aad59f2a9a
3 changed files with 29 additions and 6 deletions
  1. +1
    -0
      CHANGELOG_PENDING.md
  2. +6
    -6
      rpc/lib/client/http_client.go
  3. +22
    -0
      rpc/lib/client/http_client_test.go

+ 1
- 0
CHANGELOG_PENDING.md View File

@ -20,4 +20,5 @@ program](https://hackerone.com/tendermint).
### IMPROVEMENTS:
### BUG FIXES:
- [rpc/lib] [\#4051](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon)
- [cs] \#4069 Don't panic when block meta is not found in store (@gregzaitsev)

+ 6
- 6
rpc/lib/client/http_client.go View File

@ -82,12 +82,6 @@ func parseRemoteAddr(remoteAddr string) (network string, s string, err error) {
return "", "", fmt.Errorf("invalid addr: %s", remoteAddr)
}
// accept http(s) as an alias for tcp
switch protocol {
case protoHTTP, protoHTTPS:
protocol = protoTCP
}
return protocol, address, nil
}
@ -103,6 +97,12 @@ func makeHTTPDialer(remoteAddr string) func(string, string) (net.Conn, error) {
return makeErrorDialer(err)
}
// accept http(s) as an alias for tcp
switch protocol {
case protoHTTP, protoHTTPS:
protocol = protoTCP
}
return func(proto, addr string) (net.Conn, error) {
return net.Dial(protocol, address)
}


+ 22
- 0
rpc/lib/client/http_client_test.go View File

@ -0,0 +1,22 @@
package rpcclient
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestHTTPClientMakeHTTPDialer(t *testing.T) {
remote := []string{"https://foo-bar.com:80", "http://foo-bar.net:80"}
for _, f := range remote {
protocol, address, err := parseRemoteAddr(f)
require.NoError(t, err)
dialFn := makeHTTPDialer(f)
addr, err := dialFn(protocol, address)
require.NoError(t, err)
require.NotNil(t, addr)
}
}

Loading…
Cancel
Save