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