traffic-selector: Avoid out-of-bound array access when calculating range
This happens for `/0` subnet masks. In practice, it's not an issue because if `bytes` is 0, then so are `netbits`, `bits` and `mask`. So the two incorrectly addressed array elements are not actually modified. The first operation is a `&= 0xff` and the second a `|= 0`, so nothing changes. But some tools might not consider the values and report this as undefined behavior, which it technically is.
This commit is contained in:
@@ -109,8 +109,12 @@ static void calc_range(private_traffic_selector_t *this, uint8_t netbits)
|
||||
memcpy(this->to, this->from, bytes);
|
||||
memset(this->from + bytes, 0x00, len - bytes);
|
||||
memset(this->to + bytes, 0xff, len - bytes);
|
||||
this->from[bytes-1] &= ~mask;
|
||||
this->to[bytes-1] |= mask;
|
||||
|
||||
if (bytes)
|
||||
{
|
||||
this->from[bytes-1] &= ~mask;
|
||||
this->to[bytes-1] |= mask;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user