On Fri, 9 Jul 2021 at 04:14, Zebediah Figura <zfigura(a)codeweavers.com> wrote:
+static inline bool vkd3d_bound_range(size_t start, size_t count, size_t limit) +{ +#ifdef HAVE_BUILTIN_ADD_OVERFLOW + size_t sum; + + return !__builtin_add_overflow(start, count, &sum) && sum <= limit; +#else + return start <= limit && count <= limit - start; +#endif +} [...] @@ -1925,7 +1925,7 @@ static D3D12_GPU_VIRTUAL_ADDRESS vkd3d_gpu_va_allocator_allocate_fallback(struct base = allocator->fallback_floor; ceiling = ~(D3D12_GPU_VIRTUAL_ADDRESS)0; ceiling -= alignment - 1; - if (aligned_size > ceiling || ceiling - aligned_size < base) + if (!vkd3d_bound_range(base, aligned_size, ceiling)) return 0;
Actually, you can't necessarily do that. D3D12_GPU_VIRTUAL_ADDRESS is always a 64-bit type, but size_t may not be.