Commit eae7165c authored by Wayne Davison's avatar Wayne Davison

Make sure that we don't compute a block size larger than MAX_BLOCK_SIZE.

parent 54281fe7
...@@ -146,17 +146,20 @@ static void sum_sizes_sqroot(struct sum_struct *sum, uint64 len) ...@@ -146,17 +146,20 @@ static void sum_sizes_sqroot(struct sum_struct *sum, uint64 len)
else { else {
int32 c; int32 c;
uint64 l; uint64 l;
for (c = 1, l = len; l >>= 2; c <<= 1) { int cnt;
assert(c > 0); for (c = 1, l = len, cnt = 0; l >>= 2; c <<= 1, cnt++) {}
if (cnt >= 31 || c >= MAX_BLOCK_SIZE)
blength = MAX_BLOCK_SIZE;
else {
blength = 0;
do {
blength |= c;
if (len < (uint64)blength * blength)
blength &= ~c;
c >>= 1;
} while (c >= 8); /* round to multiple of 8 */
blength = MAX(blength, BLOCK_SIZE);
} }
blength = 0;
do {
blength |= c;
if (len < (uint64)blength * blength)
blength &= ~c;
c >>= 1;
} while (c >= 8); /* round to multiple of 8 */
blength = MAX(blength, BLOCK_SIZE);
} }
if (protocol_version < 27) { if (protocol_version < 27) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment