mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
fuzz: avoid FuzzedSock::Recv() repeated errors with EAGAIN
If `recv(2)` returns an error (`-1`) and sets `errno` to a temporary error like `EAGAIN` a proper application code is expected to retry the operation. If the fuzz data is exhausted, then `FuzzedSock::Recv()` will keep returning `-1` and setting `errno` to the first element of `recv_errnos[]` which happened to be `EAGAIN`. This may continue forever or cause the fuzz test to run for a long time before some higher level application "receive timeout" is triggered. Thus, put `ECONNREFUSED` as first element of `recv_errnos[]`.
This commit is contained in:
parent
3088f83d01
commit
5a887d49b2
1 changed files with 4 additions and 1 deletions
|
@ -622,10 +622,13 @@ public:
|
|||
|
||||
ssize_t Recv(void* buf, size_t len, int flags) const override
|
||||
{
|
||||
// Have a permanent error at recv_errnos[0] because when the fuzzed data is exhausted
|
||||
// SetFuzzedErrNo() will always return the first element and we want to avoid Recv()
|
||||
// returning -1 and setting errno to EAGAIN repeatedly.
|
||||
constexpr std::array recv_errnos{
|
||||
ECONNREFUSED,
|
||||
EAGAIN,
|
||||
EBADF,
|
||||
ECONNREFUSED,
|
||||
EFAULT,
|
||||
EINTR,
|
||||
EINVAL,
|
||||
|
|
Loading…
Add table
Reference in a new issue