From ec6c8b5883eccdf304b932e25f847a2546ec46f5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 6 Aug 2015 17:10:50 +0200 Subject: fix UnmarshalOID --- ber/obj.go | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'ber/obj.go') diff --git a/ber/obj.go b/ber/obj.go index c92e657..fa19891 100644 --- a/ber/obj.go +++ b/ber/obj.go @@ -4,7 +4,7 @@ import "strconv" type OID []int -func marshalOID(obj OID) (b []byte) { +func MarshalOID(obj OID) (b []byte) { if len(obj) < 2 || obj[0] > 2 { return []byte{} } @@ -19,23 +19,27 @@ func marshalOID(obj OID) (b []byte) { return b } -func unmarshalOID(b []byte) OID { - return OID{} -} - func (o OID) Marshal() ([]byte, error) { - b := marshalOID(o) + b := MarshalOID(o) return b, nil } func UnmarshalOID(b []byte) (o OID) { - o = append(o, int(b[0])/40) - o = append(o, int(b[0])%40) - b = b[2:] - for i := 0; i < len(b); { - d, n := debase128(b[i:]) - o = append(o, d) - i += n + if len(b) < 1 { + return + } + v, n := debase128(b) + if v < 80 { + o = append(o, v/40) + o = append(o, v%40) + } else { + o = append(o, 2) + o = append(o, v-80) + } + + for i := n; i < len(b); i += n { + v, n = debase128(b[i:]) + o = append(o, v) } return } @@ -49,3 +53,15 @@ func (o OID) String() (s string) { } return } + +func (o OID) Equal(a OID) bool { + if len(o) != len(a) { + return false + } + for i := 0; i < len(o); i++ { + if o[i] != a[i] { + return false + } + } + return true +} -- cgit v1.2.3