From 01ab09c11d1489d8894bbf07b5a014abb80718c0 Mon Sep 17 00:00:00 2001 From: "daniel.vladco" Date: Tue, 4 Feb 2025 14:44:45 +0200 Subject: [PATCH] feat: handle nil cases --- pkg/serialization/codec/jam/decode.go | 3 +++ pkg/serialization/codec/jam/encode.go | 15 ++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pkg/serialization/codec/jam/decode.go b/pkg/serialization/codec/jam/decode.go index a7c763e..eb75dfe 100644 --- a/pkg/serialization/codec/jam/decode.go +++ b/pkg/serialization/codec/jam/decode.go @@ -478,6 +478,9 @@ func (br *byteReader) decodeBitsFixedLength(v *BitSequence, bytesLength uint) (e if _, err = br.Reader.Read(bb); err != nil { return err } + if bytesLength == 0 { + return nil + } *v = make(BitSequence, bytesLength*8) for i := range *v { mod := i % 8 diff --git a/pkg/serialization/codec/jam/encode.go b/pkg/serialization/codec/jam/encode.go index 8a22fa3..fb87e00 100644 --- a/pkg/serialization/codec/jam/encode.go +++ b/pkg/serialization/codec/jam/encode.go @@ -54,7 +54,6 @@ func (bw *byteWriter) marshal(in interface{}) error { default: return bw.handleReflectTypes(v) } - return nil } func (bw *byteWriter) handleReflectTypes(in interface{}) error { @@ -77,10 +76,16 @@ func (bw *byteWriter) handleReflectTypes(in interface{}) error { case reflect.Array: return bw.encodeArray(in) case reflect.Slice: - if pk, ok := in.(ed25519.PublicKey); ok { - return bw.encodeEd25519PublicKey(pk) + switch v := in.(type) { + case ed25519.PublicKey: + return bw.encodeEd25519PublicKey(v) + case BitSequence: + return bw.encodeBits(v) + case []byte: + return bw.encodeBytes(v) + default: + return bw.encodeSlice(in) } - return bw.encodeSlice(in) case reflect.Map: return bw.encodeMap(in) default: @@ -293,7 +298,7 @@ func (bw *byteWriter) encodeBytes(b []byte) error { func (bw *byteWriter) encodeBits(bitSequence BitSequence) error { length := len(bitSequence) / 8 - if length%8 == 0 { + if length > 0 && length%8 == 0 { length += 1 } err := bw.encodeLength(length)