buffering: fix signed overflow in next_handle_id()
Not sure what the comment is talking about - signed overflow is undefined behavior and we don't use -fwrapv or other flags to make it defined. I can't see how a compiler could abuse it here, but the overflow is nonetheless easily avoided. Change-Id: Ibed6d7c0d841db2aa86b9d8ba4c6a0d08c413354
This commit is contained in:
parent
bd444ebd0a
commit
7718b24401
1 changed files with 5 additions and 8 deletions
|
@ -71,8 +71,6 @@
|
|||
/* amount of data to read in one read() call */
|
||||
#define BUFFERING_DEFAULT_FILECHUNK (1024*32)
|
||||
|
||||
#define BUF_HANDLE_MASK 0x7FFFFFFF
|
||||
|
||||
enum handle_flags
|
||||
{
|
||||
H_CANWRAP = 0x1, /* Handle data may wrap in buffer */
|
||||
|
@ -295,12 +293,11 @@ static int next_handle_id(void)
|
|||
{
|
||||
static int cur_handle_id = 0;
|
||||
|
||||
/* Wrap signed int is safe and 0 doesn't happen */
|
||||
int next_hid = (cur_handle_id + 1) & BUF_HANDLE_MASK;
|
||||
if (next_hid == 0)
|
||||
next_hid = 1;
|
||||
|
||||
cur_handle_id = next_hid;
|
||||
int next_hid = cur_handle_id + 1;
|
||||
if (next_hid == INT_MAX)
|
||||
cur_handle_id = 0; /* next would overflow; reset the counter */
|
||||
else
|
||||
cur_handle_id = next_hid;
|
||||
|
||||
return next_hid;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue