In the unlikely scenario that sysctl() fails, and uninitialized value could be returned. Initialize the variable used and make sure its expected size was correct before using it. While at it, add a cast for consistency. Signed-off-by: Carlo Marcelo Arenas Belón <carenas@xxxxxxxxx> --- V1 would regress FreeBSD, so instead make sure that the obsoleted name isn't used in OpenBSD/NetBSD instead builtin/gc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/builtin/gc.c b/builtin/gc.c index 845876ff02..3958707feb 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -539,7 +539,7 @@ static uint64_t total_ram(void) return total; } #elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM) || defined(HW_PHYSMEM64)) - int64_t physical_memory; + int64_t physical_memory = 0; int mib[2]; size_t length; @@ -552,8 +552,9 @@ static uint64_t total_ram(void) mib[1] = HW_PHYSMEM; # endif length = sizeof(int64_t); - if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0)) - return physical_memory; + if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0) && + length == sizeof(int64_t)) + return (uint64_t)physical_memory; #elif defined(GIT_WINDOWS_NATIVE) MEMORYSTATUSEX memInfo; -- 2.50.0.147.gafe0d4ec5b