diff --git a/codec.go b/codec.go index 0a8c660..3e056a9 100644 --- a/codec.go +++ b/codec.go @@ -31,7 +31,15 @@ func StringToBytes(s string) ([]byte, error) { return b, nil } -func BytesToString(b []byte) (string, error) { +func BytesToString(b []byte) (ret string, err error) { + // panic handler, in case we try accessing bytes incorrectly. + defer func() { + if e := recover(); e != nil { + ret = "" + err = e.(error) + } + }() + s := "" for ; len(b) > 0 ; { diff --git a/index.go b/index.go index aaef5d3..b0165e1 100644 --- a/index.go +++ b/index.go @@ -4,7 +4,10 @@ type Multiaddr struct { Bytes []byte } -func NewString(s string) *Multiaddr { - m := &Multiaddr{} - return m +func NewString(s string) (*Multiaddr, error) { + b, err := StringToBytes(s) + if err != nil { + return nil, err + } + return &Multiaddr{Bytes: b}, nil }