```
A specially-constructed BlockTransactionsRequest can cause offset to
wrap in deserialization. In the current code, there is not any way this
could be dangerous; but disallowing it reduces the potential for future
surprises.
```
Backport of core PR14685.
The bug this PR is fixing doesn't apply directly to our code, since we
are already using 32 bit indexes (renames indices) since D1146 and the
deserialization size is limited to 0x02000000 by the `MAX_SIZE` constant
(see https://bitcoin.org/en/developer-reference#message-headers), so
`MAX_SIZE < max(uint32_t)` is the limiting factor for us.
In the meantime the overflow issue will occur if the `MAX_SIZE` constant
is raised above `max(uint32_t)`.
This diff is also adapted to test the `BlockTransactionRequest`
deserialization against `MAX_SIZE` and make sure the overflow edge-case
is un der control should the constant get raised. Static asserts will
cause the build to fail if the tests assumptions are no longer valid.