git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/5 maint] Fix "Out of memory? mmap failed" for files larger than 4GB on Windows

From
Johannes Sixt <j6t@kdbg.org>
Date
May 20, 2010, 18:57 UTC
Message-ID
<7289ab6b171efda2fbc0f5d5b0080c7f1afd529e.1274380838.git.j6t@kdbg.org>
In-Reply-To
<cover.1274380838.git.j6t@kdbg.org>
From: Ian McLean <ian.mclean@gmail.com>

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>
---
 This patch is obviously correct. I have used it in production to verify
 that it doesn't break repositories that are smaller than 4GB.
 compat/win32mmap.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/compat/win32mmap.c b/compat/win32mmap.c
index 1c5a149..b58aa69 100644
--- a/compat/win32mmap.c
+++ b/compat/win32mmap.c
@@ -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");
-- 
1.7.1.64.ga1799.dirty
Previous: Johannes SixtNext: Johannes Sixt
Message 2 of 7 in “Various fixes for Windows”
  1. 0/5 Various fixes for WindowsJohannes Sixt, May 20, 2010
  2. 1/5 Fix "Out of memory? mmap failed" for files larger than 4GB on WindowsJohannes Sixt, May 20, 2010
  3. 2/5 start_command: close cmd->err descriptor when fork/spawn failsJohannes Sixt, May 20, 2010
  4. 3/5 Fix checkout of large files to network shares on Windows XPJohannes Sixt, May 20, 2010
  5. 4/5 mingw: use _commit to implement fsyncJohannes Sixt, May 20, 2010
  6. 5/5 Recent MinGW has a C99 implementation of snprintf functionsJohannes Sixt, May 20, 2010
  7. Junio C HamanoMay 20, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.