Skip to content
Snippets Groups Projects
Commit bdffba12 authored by capossele's avatar capossele
Browse files

fix len checks, marshaling and unit test added

parent b02f5d6f
No related branches found
No related tags found
No related merge requests found
...@@ -74,7 +74,7 @@ func (approvers *Approvers) Marshal() (result []byte) { ...@@ -74,7 +74,7 @@ func (approvers *Approvers) Marshal() (result []byte) {
i := 0 i := 0
for hash := range approvers.hashes { for hash := range approvers.hashes {
var HASH_START = MARSHALED_APPROVERS_HASHES_START + i*(MARSHALED_APPROVERS_HASH_SIZE) var HASH_START = MARSHALED_APPROVERS_HASHES_START + i*(MARSHALED_APPROVERS_HASH_SIZE)
var HASH_END = HASH_START * MARSHALED_APPROVERS_HASH_SIZE var HASH_END = HASH_START + MARSHALED_APPROVERS_HASH_SIZE
copy(result[HASH_START:HASH_END], hash.CastToBytes()) copy(result[HASH_START:HASH_END], hash.CastToBytes())
...@@ -89,13 +89,13 @@ func (approvers *Approvers) Marshal() (result []byte) { ...@@ -89,13 +89,13 @@ func (approvers *Approvers) Marshal() (result []byte) {
func (approvers *Approvers) Unmarshal(data []byte) (err errors.IdentifiableError) { func (approvers *Approvers) Unmarshal(data []byte) (err errors.IdentifiableError) {
dataLen := len(data) dataLen := len(data)
if dataLen <= MARSHALED_APPROVERS_MIN_SIZE { if dataLen < MARSHALED_APPROVERS_MIN_SIZE {
return ErrMarshallFailed.Derive(errors.New("unmarshall failed"), "marshaled approvers are too short") return ErrMarshallFailed.Derive(errors.New("unmarshall failed"), "marshaled approvers are too short")
} }
hashesCount := binary.BigEndian.Uint64(data[MARSHALED_APPROVERS_HASHES_COUNT_START:MARSHALED_APPROVERS_HASHES_COUNT_END]) hashesCount := binary.BigEndian.Uint64(data[MARSHALED_APPROVERS_HASHES_COUNT_START:MARSHALED_APPROVERS_HASHES_COUNT_END])
if dataLen <= MARSHALED_APPROVERS_MIN_SIZE+int(hashesCount)*MARSHALED_APPROVERS_HASH_SIZE { if dataLen < MARSHALED_APPROVERS_MIN_SIZE+int(hashesCount)*MARSHALED_APPROVERS_HASH_SIZE {
return ErrMarshallFailed.Derive(errors.New("unmarshall failed"), "marshaled approvers are too short for "+strconv.FormatUint(hashesCount, 10)+" approvers") return ErrMarshallFailed.Derive(errors.New("unmarshall failed"), "marshaled approvers are too short for "+strconv.FormatUint(hashesCount, 10)+" approvers")
} }
...@@ -105,7 +105,7 @@ func (approvers *Approvers) Unmarshal(data []byte) (err errors.IdentifiableError ...@@ -105,7 +105,7 @@ func (approvers *Approvers) Unmarshal(data []byte) (err errors.IdentifiableError
approvers.hashes = make(map[ternary.Trytes]bool, hashesCount) approvers.hashes = make(map[ternary.Trytes]bool, hashesCount)
for i := uint64(0); i < hashesCount; i++ { for i := uint64(0); i < hashesCount; i++ {
var HASH_START = MARSHALED_APPROVERS_HASHES_START + i*(MARSHALED_APPROVERS_HASH_SIZE) var HASH_START = MARSHALED_APPROVERS_HASHES_START + i*(MARSHALED_APPROVERS_HASH_SIZE)
var HASH_END = HASH_START * MARSHALED_APPROVERS_HASH_SIZE var HASH_END = HASH_START + MARSHALED_APPROVERS_HASH_SIZE
approvers.hashes[ternary.Trytes(typeutils.BytesToString(data[HASH_START:HASH_END]))] = true approvers.hashes[ternary.Trytes(typeutils.BytesToString(data[HASH_START:HASH_END]))] = true
} }
......
package approvers
import (
"fmt"
"testing"
"github.com/iotaledger/goshimmer/packages/ternary"
"github.com/magiconair/properties/assert"
)
func TestApprovers_SettersGetters(t *testing.T) {
hashA := ternary.Trytes("A9999999999999999999999999999999999999999999999999999999999999999999999999999999F")
hashB := ternary.Trytes("B9999999999999999999999999999999999999999999999999999999999999999999999999999999F")
approversTest := New(hashA)
approversTest.Add(hashB)
assert.Equal(t, approversTest.GetHash(), hashA, "hash")
assert.Equal(t, approversTest.GetHashes()[0], hashB, "hashes")
}
func TestApprovers_MarshalUnmarshalGetters(t *testing.T) {
hashA := ternary.Trytes("A9999999999999999999999999999999999999999999999999999999999999999999999999999999F")
hashB := ternary.Trytes("B9999999999999999999999999999999999999999999999999999999999999999999999999999999F")
approversTest := New(hashA)
approversTest.Add(hashB)
approversTestBytes := approversTest.Marshal()
//var approversUnmarshaled *Approvers
approversUnmarshaled := New(hashA)
err := approversUnmarshaled.Unmarshal(approversTestBytes)
if err != nil {
fmt.Println(err, len(approversTestBytes))
}
assert.Equal(t, approversUnmarshaled.GetHash(), approversTest.GetHash(), "hash")
assert.Equal(t, approversUnmarshaled.GetHashes(), approversTest.GetHashes(), "hashes")
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment