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)

{
    for (size_t bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; ++bucket) {
        for (size_t i = 0; i < ADDRMAN_BUCKET_SIZE; ++i) {
            const auto id = vvNew[bucket][i];
            if (id != -1 && !mapInfo[id].IsValid()) {
                ClearNew(bucket, i);
            }
        }
    }
    for (size_t bucket = 0; bucket < ADDRMAN_TRIED_BUCKET_COUNT; ++bucket) {
        for (size_t i = 0; i < ADDRMAN_BUCKET_SIZE; ++i) {
            const auto id = vvTried[bucket][i];
            if (id == -1) {
                continue;
            }
            const auto& addr_info = mapInfo[id];
            if (addr_info.IsValid()) {
                continue;
            }
            vvTried[bucket][i] = -1;
            --nTried;
            SwapRandom(addr_info.nRandomPos, vRandom.size() - 1);
            vRandom.pop_back();
            mapAddr.erase(addr_info);
            mapInfo.erase(id);
            m_tried_collisions.erase(id);
        }
    }
}
CAddrInfo* CAddrMan::Find(const CNetAddr& addr, int* pnId)