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

Re: [PATCH] git-tar-tree: Lift path length limit

From
Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Date
May 7, 2005, 00:57 UTC
Message-ID
<20050507005706.GA6093@lsrfire.ath.cx>
In-Reply-To
<20050507002527.GA5082@lsrfire.ath.cx>
On Sat, May 07, 2005 at 02:25:27AM +0200, Rene Scharfe wrote:
> Last minute patch?
This leaks memory.  D'oh!

Petr, would you add the (hopefully) fixed version below to your tree now that Linus is on vacation? (Patch applies to tip of GIT tree.)

Thanks, Rene

Lift path length limits from git-tar-tree.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>

--- commit d36797f64ee0431e6a73aa1c77a7fe7c18b6ce9f tree ab8e6967a08ac343b69b527f663e6a9722fcea08 parent bf60144c0ab50e88c0086a90c5cb35b81613ad14 author Rene Scharfe <rene.scharfe@lsrfire.ath.cx> 1115322098 +0200 committer Rene Scharfe <rene.scharfe@lsrfire.ath.cx> 1115322098 +0200

Index: tar-tree.c
===================================================================
--- 8ef25a2788d6c225641a3040622b82c364f987b8/tar-tree.c  (mode:100644 sha1:9d9bd7be98502f64e4a643ef0973182f3483251e)
+++ ab8e6967a08ac343b69b527f663e6a9722fcea08/tar-tree.c  (mode:100644 sha1:8b0d75bd2cf12a531aee3d51e59a8ac8102ba6be)
@@ -212,7 +212,7 @@
                                   const char *path, unsigned int namelen,
                                   void *content, unsigned int contentsize)
 {
-	char *p;
+	char *buffer, *p;
 	unsigned int pathlen, size, linkpathlen = 0;
 
 	size = pathlen = extended_header_len("path", namelen);
@@ -220,18 +220,19 @@
 		linkpathlen = extended_header_len("linkpath", contentsize);
 		size += linkpathlen;
 	}
-	if (size > RECORDSIZE)
-		die("tar-tree: extended header too big, wtf?");
 	write_header(NULL, TYPEFLAG_EXT_HEADER, NULL, NULL, headerfilename,
 	             0100600, NULL, size);
 
-	p = get_record();
+	buffer = p = malloc(size);
+	if (!buffer)
+		die("git-tar-tree: %s", strerror(errno));
 	append_extended_header_prefix(&p, pathlen, "path");
 	append_path(&p, is_dir, basepath, prefix, path);
 	append_char(&p, '\n');
 	if (flags & EXT_HEADER_LINKPATH)
 		append_extended_header(&p, "linkpath", content, contentsize);
-	write_if_needed();
+	write_blocked(buffer, size);
+	free(buffer);
 }
 
 static void write_global_extended_header(const char *sha1)
@@ -269,9 +270,7 @@
 	}
 
 	namelen = path_len(S_ISDIR(mode), basepath, prefix, path);
-	if (namelen > 500)
-		die("tar-tree: name too log of object %s\n", sha1_to_hex(sha1));
-	else if (namelen > 100)
+	if (namelen > 100)
 		ext_header |= EXT_HEADER_PATH;
 	if (typeflag == TYPEFLAG_LNK && size > 100)
 		ext_header |= EXT_HEADER_LINKPATH;
Previous: Rene ScharfeNext: Petr Baudis
Message 2 of 4 in “git-tar-tree: Lift path length limit”
  1. git-tar-tree: Lift path length limitRene Scharfe, May 7, 2005
  2. Rene ScharfeMay 7, 2005
  3. Petr BaudisMay 7, 2005
  4. Junio C HamanoMay 7, 2005

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.