HexBytes formatting; Make computeHashFromAunts more defensive

This commit is contained in:
Jae Kwon 2018-04-03 07:01:08 -07:00
parent 3cd4dcf13b
commit f457435199
2 changed files with 12 additions and 3 deletions

View File

@ -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))))
}
}

View File

@ -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