mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
shallow.c: avoid theoretical pointer wrap-around
The expression info->free+size is technically undefined behaviour in exactly the case we want to test for. Moreover, the compiler is likely to translate the expression to (unsigned long)info->free + size > (unsigned long)info->end where there's at least a theoretical chance that the LHS could wrap around 0, giving a false negative. This might as well be written using pointer subtraction avoiding these issues. Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f2386c6b77
commit
381aa8e730
|
@ -368,7 +368,7 @@ static uint32_t *paint_alloc(struct paint_info *info)
|
||||||
unsigned nr = (info->nr_bits + 31) / 32;
|
unsigned nr = (info->nr_bits + 31) / 32;
|
||||||
unsigned size = nr * sizeof(uint32_t);
|
unsigned size = nr * sizeof(uint32_t);
|
||||||
void *p;
|
void *p;
|
||||||
if (!info->pool_count || info->free + size > info->end) {
|
if (!info->pool_count || size > info->end - info->free) {
|
||||||
if (size > POOL_SIZE)
|
if (size > POOL_SIZE)
|
||||||
die("BUG: pool size too small for %d in paint_alloc()",
|
die("BUG: pool size too small for %d in paint_alloc()",
|
||||||
size);
|
size);
|
||||||
|
|
Loading…
Reference in a new issue