diff --git a/common/bytes.go b/common/bytes.go index ba81bbe9..711720aa 100644 --- a/common/bytes.go +++ b/common/bytes.go @@ -51,3 +51,12 @@ func (bz HexBytes) Bytes() []byte { func (bz HexBytes) String() string { return strings.ToUpper(hex.EncodeToString(bz)) } + +func (bz HexBytes) Format(s fmt.State, verb rune) { + switch verb { + case 'p': + s.Write([]byte(fmt.Sprintf("%p", bz))) + default: + s.Write([]byte(fmt.Sprintf("%X", []byte(bz)))) + } +} diff --git a/merkle/simple_proof.go b/merkle/simple_proof.go index 7b8f82b4..c81ed674 100644 --- a/merkle/simple_proof.go +++ b/merkle/simple_proof.go @@ -43,9 +43,9 @@ func (sp *SimpleProof) StringIndented(indent string) string { // Use the leafHash and innerHashes to get the root merkle hash. // If the length of the innerHashes slice isn't exactly correct, the result is nil. +// Recursive impl. func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][]byte) []byte { - // Recursive impl. - if index >= total { + if index >= total || index < 0 || total <= 0 { return nil } switch total { @@ -80,7 +80,7 @@ func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][ // The node and the tree is thrown away afterwards. // Exactly one of node.Left and node.Right is nil, unless node is the root, in which case both are nil. // node.Parent.Hash = hash(node.Hash, node.Right.Hash) or -// hash(node.Left.Hash, node.Hash), depending on whether node is a left/right child. +// hash(node.Left.Hash, node.Hash), depending on whether node is a left/right child. type SimpleProofNode struct { Hash []byte Parent *SimpleProofNode