The problem was originally reported in https://github.com/bitcoin/bitcoin/issues/22450#issuecomment-880629375. This is a dedicated issue to track it independently because it is a different problem than the one reported in #22450 OP/description.

```
fuzz: addrman.cpp:149: void CAddrMan::SwapRandom(unsigned int, unsigned int): Assertion `nRndPos1 < vRandom.size() && nRndPos2 < vRandom.size()' failed.
```

To reproduce:
```sh
FUZZ=addrman_deserialize ./src/test/fuzz/fuzz /tmp/crash-ef7d4a4f940b8fdb4999f6a92969260cf8e1405f.log
```
[crash-ef7d4a4f940b8fdb4999f6a92969260cf8e1405f.log](https://github.com/bitcoin/bitcoin/files/6830072/crash-ef7d4a4f940b8fdb4999f6a92969260cf8e1405f.log)

{
    AssertLockHeld(cs);
    if (m_tried_collisions.size() == 0) return CAddrInfo();
    std::set<int>::iterator it = m_tried_collisions.begin();
    
    std::advance(it, insecure_rand.randrange(m_tried_collisions.size()));
    int id_new = *it;
    
    if (mapInfo.count(id_new) != 1) {
        m_tried_collisions.erase(it);
        return CAddrInfo();
    }
    const CAddrInfo& newInfo = mapInfo[id_new];
    
    int tried_bucket = newInfo.GetTriedBucket(nKey, m_asmap);
    int tried_bucket_pos = newInfo.GetBucketPosition(nKey, false, tried_bucket);
    int id_old = vvTried[tried_bucket][tried_bucket_pos];
    return mapInfo[id_old];
}
std::vector<bool> CAddrMan::DecodeAsmap(fs::path path)