[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#45595: recvfrom! optional start and end parameter invalid
From: |
d4ryus |
Subject: |
bug#45595: recvfrom! optional start and end parameter invalid |
Date: |
Fri, 1 Jan 2021 12:34:57 +0100 |
hi,
the parameter validation for the optional "start" and "end" arguments to
"recvfrom!" are off by one if "end" is passed. From libguile/socket.c
(master commit 64c89458e6):
...
if (SCM_UNBNDP (end))
cend = SCM_BYTEVECTOR_LENGTH (buf);
else
{
cend = scm_to_size_t (end);
if (SCM_UNLIKELY (cend >= SCM_BYTEVECTOR_LENGTH (buf)
|| cend < offset))
scm_out_of_range (FUNC_NAME, end);
}
...
"end" is the optional end argument, "offset" is 0 or "start" if start
was given. The check must be:
cend > SCM_BYTEVECTOR_LENGTH (buf) || cend <= offset
to allow filling the last byte in the buffer and verify that start is
not equal to end. A workaround to skip the validation is to not pass
end. But i think a better way would be to always validate start (and
end), if one (or both) of them are passed. A potentional fix is
attached.
If you need any additional information, please let me know.
Thank you for your great work!
- d4ryus
recvfrom-fix.patch
Description: Text document
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug#45595: recvfrom! optional start and end parameter invalid,
d4ryus <=