Summary:
Fix an off-by-one error causing an ASAN abort. When calling
longestCommonPrefix() with a full mask, it would compare one byte past
the end of the address data, and would end up writing past the end of
the ba array on the stack.
Test Plan:
Built with ASAN, ran the unit tests, and verified the ASAN failure was
gone.
Reviewed By: jasmeetbagga@fb.com
FB internal diff:
D1284750
// Compare a byte at a time. Note - I measured compared this with
// going multiple bytes at a time (8, 4, 2 and 1). It turns out
// to be 20 - 25% slower for 4 and 16 byte arrays.
- while (byteIndex * 8 <= mask && one[byteIndex] == two[byteIndex]) {
+ while (byteIndex * 8 < mask && one[byteIndex] == two[byteIndex]) {
ba[byteIndex] = one[byteIndex];
++byteIndex;
}