dfc4f7cd2a
When RangeEnd is given, a.end = RangeEnd+1. If when getSearchRange() is called and lastReservedIP equals RangeEnd, a.nextIP() only compares lastReservedIP (which in this example is RangeEnd) against a.end (which in this example is RangeEnd+1) and they clearly don't match, so a.nextIP() returns start=RangeEnd+1 and end=RangeEnd. Get() happily allocates RangeEnd+1 because it only compares 'cur' to the end returned by getSearchRange(), not to a.end, and thus allocates past RangeEnd. Since a.end is inclusive (eg, host-local will allocate a.end) the fix is to simply set a.end equal to RangeEnd.