Ongoing cleanups.

This commit is contained in:
Markus F.X.J. Oberhumer
2016-10-07 23:07:56 +02:00
parent 56eb02280f
commit 38a265741c
12 changed files with 63 additions and 61 deletions
+21 -21
View File
@@ -35,41 +35,43 @@
// and malicious header fields
**************************************************************************/
// DO NOT CHANGE
#define MAX_BUF_SIZE (768 * 1024 * 1024)
ACC_COMPILE_TIME_ASSERT_HEADER(2ull * MAX_BUF_SIZE * 9 / 8 + 16*1024*1024 < INT_MAX)
ACC_COMPILE_TIME_ASSERT_HEADER(UPX_RSIZE_MAX_MEM == UPX_RSIZE_MAX)
ACC_COMPILE_TIME_ASSERT_HEADER(UPX_RSIZE_MAX_STR <= UPX_RSIZE_MAX / 256)
ACC_COMPILE_TIME_ASSERT_HEADER(2ull * UPX_RSIZE_MAX * 9 / 8 + 16*1024*1024 < INT_MAX)
size_t mem_size(upx_uint64_t element_size, upx_uint64_t n, upx_uint64_t extra)
upx_rsize_t mem_size(upx_uint64_t element_size, upx_uint64_t n, upx_uint64_t extra1, upx_uint64_t extra2)
{
assert(element_size > 0);
if (element_size > MAX_BUF_SIZE) throwCantPack("mem_size 1; take care");
if (n > MAX_BUF_SIZE) throwCantPack("mem_size 2; take care");
if (extra > MAX_BUF_SIZE) throwCantPack("mem_size 3; take care");
upx_uint64_t bytes = element_size * n + extra; // cannot overflow
if (bytes > MAX_BUF_SIZE) throwCantPack("mem_size 4; take care");
return ACC_ICONV(size_t, bytes);
if (element_size > UPX_RSIZE_MAX) throwCantPack("mem_size 1; take care");
if (n > UPX_RSIZE_MAX) throwCantPack("mem_size 2; take care");
if (extra1 > UPX_RSIZE_MAX) throwCantPack("mem_size 3; take care");
if (extra2 > UPX_RSIZE_MAX) throwCantPack("mem_size 4; take care");
upx_uint64_t bytes = element_size * n + extra1 + extra2; // cannot overflow
if (bytes > UPX_RSIZE_MAX) throwCantPack("mem_size 5; take care");
return ACC_ICONV(upx_rsize_t, bytes);
}
size_t mem_size_get_n(upx_uint64_t element_size, upx_uint64_t n)
upx_rsize_t mem_size_get_n(upx_uint64_t element_size, upx_uint64_t n)
{
mem_size_assert(element_size, n);
return ACC_ICONV(size_t, n); // return n
return ACC_ICONV(upx_rsize_t, n); // return n
}
bool mem_size_valid(upx_uint64_t element_size, upx_uint64_t n, upx_uint64_t extra)
bool mem_size_valid(upx_uint64_t element_size, upx_uint64_t n, upx_uint64_t extra1, upx_uint64_t extra2)
{
assert(element_size > 0);
if (element_size > MAX_BUF_SIZE) return false;
if (n > MAX_BUF_SIZE) return false;
if (extra > MAX_BUF_SIZE) return false;
upx_uint64_t bytes = element_size * n + extra; // cannot overflow
if (bytes > MAX_BUF_SIZE) return false;
if (element_size > UPX_RSIZE_MAX) return false;
if (n > UPX_RSIZE_MAX) return false;
if (extra1 > UPX_RSIZE_MAX) return false;
if (extra2 > UPX_RSIZE_MAX) return false;
upx_uint64_t bytes = element_size * n + extra1 + extra2; // cannot overflow
if (bytes > UPX_RSIZE_MAX) return false;
return true;
}
bool mem_size_valid_bytes(upx_uint64_t bytes)
{
if (bytes > MAX_BUF_SIZE) return false;
if (bytes > UPX_RSIZE_MAX) return false;
return true;
}
@@ -86,8 +88,6 @@ int ptr_diff(const char *p1, const char *p2)
return ACC_ICONV(int, d);
}
#undef MAX_BUF_SIZE
/*************************************************************************
// bool use_simple_mcheck()