Skip to content

Commit

Permalink
Fix "Out of memory? mmap failed" for files larger than 4GB on Windows
Browse files Browse the repository at this point in the history
The git_mmap implementation was broken for file sizes that wouldn't fit
into a size_t (32 bits).  This was caused by intermediate variables that
were only 32 bits wide when they should be 64 bits.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Ian McLean authored and Junio C Hamano committed May 20, 2010
1 parent cc24a1d commit 60890cc
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions compat/win32mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t of
{
HANDLE hmap;
void *temp;
size_t len;
off_t len;
struct stat st;
uint64_t o = offset;
uint32_t l = o & 0xFFFFFFFF;
uint32_t h = (o >> 32) & 0xFFFFFFFF;

if (!fstat(fd, &st))
len = xsize_t(st.st_size);
len = st.st_size;
else
die("mmap: could not determine filesize");

if ((length + offset) > len)
length = len - offset;
length = xsize_t(len - offset);

if (!(flags & MAP_PRIVATE))
die("Invalid usage of mmap when built with USE_WIN32_MMAP");
Expand Down

0 comments on commit 60890cc

Please sign in to comment.