mirror of
https://github.com/logos-messaging/go-multiaddr.git
synced 2026-01-02 13:03:11 +00:00
Merge pull request #105 from multiformats/feat/no-empty-multiadd
forbid empty multiaddrs
This commit is contained in:
commit
5b1de2f51f
10
codec.go
10
codec.go
@ -20,6 +20,10 @@ func stringToBytes(s string) ([]byte, error) {
|
||||
// consume first empty elem
|
||||
sp = sp[1:]
|
||||
|
||||
if len(sp) == 0 {
|
||||
return nil, fmt.Errorf("failed to parse multiaddr %q: empty multiaddr", s)
|
||||
}
|
||||
|
||||
for len(sp) > 0 {
|
||||
name := sp[0]
|
||||
p := ProtocolWithName(name)
|
||||
@ -58,6 +62,9 @@ func stringToBytes(s string) ([]byte, error) {
|
||||
}
|
||||
|
||||
func validateBytes(b []byte) (err error) {
|
||||
if len(b) == 0 {
|
||||
return fmt.Errorf("empty multiaddr")
|
||||
}
|
||||
for len(b) > 0 {
|
||||
code, n, err := ReadVarintCode(b)
|
||||
if err != nil {
|
||||
@ -136,6 +143,9 @@ func readComponent(b []byte) (int, Component, error) {
|
||||
}
|
||||
|
||||
func bytesToString(b []byte) (ret string, err error) {
|
||||
if len(b) == 0 {
|
||||
return "", fmt.Errorf("empty multiaddr")
|
||||
}
|
||||
var buf strings.Builder
|
||||
|
||||
for len(b) > 0 {
|
||||
|
||||
@ -159,6 +159,10 @@ func (m *multiaddr) Decapsulate(o Multiaddr) Multiaddr {
|
||||
return &multiaddr{bytes: cpy}
|
||||
}
|
||||
|
||||
if i == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
ma, err := NewMultiaddr(s1[:i])
|
||||
if err != nil {
|
||||
panic("Multiaddr.Decapsulate incorrect byte boundaries.")
|
||||
|
||||
@ -74,6 +74,8 @@ func TestConstructFails(t *testing.T) {
|
||||
"/unix",
|
||||
"/ip4/1.2.3.4/tcp/80/unix",
|
||||
"/ip4/127.0.0.1/tcp/9090/http/p2p-webcrt-direct",
|
||||
"/",
|
||||
"",
|
||||
}
|
||||
|
||||
for _, a := range cases {
|
||||
@ -83,6 +85,13 @@ func TestConstructFails(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmptyMultiaddr(t *testing.T) {
|
||||
_, err := NewMultiaddrBytes([]byte{})
|
||||
if err == nil {
|
||||
t.Fatal("should have failed to parse empty multiaddr")
|
||||
}
|
||||
}
|
||||
|
||||
func TestConstructSucceeds(t *testing.T) {
|
||||
cases := []string{
|
||||
"/ip4/1.2.3.4",
|
||||
@ -377,8 +386,8 @@ func TestEncapsulate(t *testing.T) {
|
||||
|
||||
m4, _ := NewMultiaddr("/ip4/127.0.0.1")
|
||||
d := c.Decapsulate(m4)
|
||||
if s := d.String(); s != "" {
|
||||
t.Error("decapsulate /ip4 failed.", "/", s)
|
||||
if d != nil {
|
||||
t.Error("decapsulate /ip4 failed: ", d)
|
||||
}
|
||||
}
|
||||
|
||||
@ -582,11 +591,11 @@ func TestBinaryMarshaler(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
addr2 := newMultiaddr(t, "")
|
||||
var addr2 multiaddr
|
||||
if err = addr2.UnmarshalBinary(b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !addr.Equal(addr2) {
|
||||
if !addr.Equal(&addr2) {
|
||||
t.Error("expected equal addresses in circular marshaling test")
|
||||
}
|
||||
}
|
||||
@ -598,11 +607,11 @@ func TestTextMarshaler(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
addr2 := newMultiaddr(t, "")
|
||||
var addr2 multiaddr
|
||||
if err = addr2.UnmarshalText(b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !addr.Equal(addr2) {
|
||||
if !addr.Equal(&addr2) {
|
||||
t.Error("expected equal addresses in circular marshaling test")
|
||||
}
|
||||
}
|
||||
@ -614,11 +623,11 @@ func TestJSONMarshaler(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
addr2 := newMultiaddr(t, "")
|
||||
var addr2 multiaddr
|
||||
if err = addr2.UnmarshalJSON(b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !addr.Equal(addr2) {
|
||||
if !addr.Equal(&addr2) {
|
||||
t.Error("expected equal addresses in circular marshaling test")
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,6 @@ func TestSplitFirstLast(t *testing.T) {
|
||||
[]string{ipStr, tcpStr, ipfsStr},
|
||||
[]string{ipStr, tcpStr},
|
||||
[]string{ipStr},
|
||||
[]string{},
|
||||
} {
|
||||
addr := StringCast(strings.Join(x, ""))
|
||||
head, tail := SplitFirst(addr)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user