diff --git a/server/websocket.go b/server/websocket.go index 607d1bd8..963b9bcb 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -919,13 +919,13 @@ func (s *WebsocketServer) unmarshalAddresses(params []byte) ([]string, bool, err r := WsSubscribeAddressesReq{} err := json.Unmarshal(params, &r) if err != nil { - return nil, false, err + return nil, false, api.NewAPIError("Invalid subscribeAddresses params", true) } rv := make([]string, len(r.Addresses)) for i, a := range r.Addresses { ad, err := s.chainParser.GetAddrDescFromAddress(a) if err != nil { - return nil, false, err + return nil, false, api.NewAPIError("Invalid address "+strconv.Quote(a)+", "+err.Error(), true) } rv[i] = string(ad) } diff --git a/server/websocket_unmarshal_test.go b/server/websocket_unmarshal_test.go new file mode 100644 index 00000000..be2640cf --- /dev/null +++ b/server/websocket_unmarshal_test.go @@ -0,0 +1,32 @@ +//go:build unittest + +package server + +import ( + "strings" + "testing" + + "github.com/trezor/blockbook/api" + "github.com/trezor/blockbook/bchain/coins/eth" +) + +func TestUnmarshalAddressesReturnsPublicAPIError(t *testing.T) { + s := &WebsocketServer{ + chainParser: eth.NewEthereumParser(0, false), + } + + _, _, err := s.unmarshalAddresses([]byte(`{"addresses":[""]}`)) + if err == nil { + t.Fatal("expected error") + } + apiErr, ok := err.(*api.APIError) + if !ok { + t.Fatalf("expected *api.APIError, got %T", err) + } + if !apiErr.Public { + t.Fatal("expected public api error") + } + if !strings.Contains(apiErr.Error(), "Address missing") { + t.Fatalf("unexpected error message %q", apiErr.Error()) + } +}