From 3f5984c93d11c4cbbc435c628d156421ef1dddda Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Thu, 3 Jul 2014 23:52:58 -0700 Subject: [PATCH] panic handler + construct --- codec.go | 10 +++++++++- index.go | 9 ++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) 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 }