fixed loop termination criterion in addr_in_subnet(). Thanks go to Wolfgang Steudel, TU Ilmenau

This commit is contained in:
Andreas Steffen
2008-10-07 21:41:45 +00:00
parent c8ba5125d6
commit 7a07cd1c75
@@ -698,14 +698,16 @@ static bool addr_in_subnet(chunk_t addr, chunk_t net, int net_len)
/* scan through all bits, beginning in the front */ /* scan through all bits, beginning in the front */
for (byte = 0; byte < addr.len; byte++) for (byte = 0; byte < addr.len; byte++)
{ {
for (bit = 7; bit >= 0; bit--) for (bit = 0; bit < 8; bit++)
{ {
u_char bitpos = 1 << (7-bit);
/* check if bits are equal (or we reached the end of the net) */ /* check if bits are equal (or we reached the end of the net) */
if (bit + byte * 8 > net_len) if (bit + byte * 8 > net_len)
{ {
return TRUE; return TRUE;
} }
if (((1<<bit) & addr.ptr[byte]) != ((1<<bit) & net.ptr[byte])) if ((bitpos & addr.ptr[byte]) != (bitpos & net.ptr[byte]))
{ {
return FALSE; return FALSE;
} }