mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
Better underflow and overflow handling in Packer::findOverlapOverhead().
This commit is contained in:
parent
5f203fc082
commit
c96e8a8c19
|
@ -500,14 +500,16 @@ unsigned Packer::findOverlapOverhead(const upx_bytep buf,
|
||||||
overhead = m;
|
overhead = m;
|
||||||
// Succeed early if m lies in [low .. low+range-1], i.e. if
|
// Succeed early if m lies in [low .. low+range-1], i.e. if
|
||||||
// if the range of the current interval is <= range.
|
// if the range of the current interval is <= range.
|
||||||
//if (m <= low + range - 1)
|
// if (m <= low + range - 1)
|
||||||
if (m + 1 <= low + range) // avoid underflow
|
// if (m < low + range)
|
||||||
|
if (m - low < range) // avoid underflow
|
||||||
break;
|
break;
|
||||||
high = m - 1;
|
high = m - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
low = m + 1;
|
low = m + 1;
|
||||||
m = (low + high) / 2;
|
////m = (low + high) / 2;
|
||||||
|
m = (low & high) + ((low ^ high) >> 1); // avoid overflow
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("findOverlapOverhead: %d (%d tries)\n", overhead, nr);
|
//printf("findOverlapOverhead: %d (%d tries)\n", overhead, nr);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user