From 58f426207e2f0310ecde2d7e641fab1e96462618 Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Mon, 27 Jan 2020 14:33:13 +0100 Subject: [PATCH] Handle possible address descriptor mismatch in db column addresses --- db/rocksdb.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/db/rocksdb.go b/db/rocksdb.go index 2f86d6f9..b3eacf6c 100644 --- a/db/rocksdb.go +++ b/db/rocksdb.go @@ -373,6 +373,7 @@ func (d *RocksDB) GetTransactions(address string, lower uint32, higher uint32, f // Transaction are passed to callback function in the order from newest block to the oldest func (d *RocksDB) GetAddrDescTransactions(addrDesc bchain.AddressDescriptor, lower uint32, higher uint32, fn GetTransactionsCallback) (err error) { txidUnpackedLen := d.chainParser.PackedTxidLen() + addrDescLen := len(addrDesc) startKey := packAddressKey(addrDesc, higher) stopKey := packAddressKey(addrDesc, lower) indexes := make([]int32, 0, 16) @@ -380,10 +381,16 @@ func (d *RocksDB) GetAddrDescTransactions(addrDesc bchain.AddressDescriptor, low defer it.Close() for it.Seek(startKey); it.Valid(); it.Next() { key := it.Key().Data() - val := it.Value().Data() if bytes.Compare(key, stopKey) > 0 { break } + if len(key) != addrDescLen+packedHeightBytes { + if glog.V(2) { + glog.Warningf("rocksdb: addrDesc %s - mixed with %s", addrDesc, hex.EncodeToString(key)) + } + continue + } + val := it.Value().Data() if glog.V(2) { glog.Infof("rocksdb: addresses %s: %s", hex.EncodeToString(key), hex.EncodeToString(val)) }