threads / patch / 3378

patchPrevent git-upload-pack segfault if object cannot be found

Subject: [PATCH] Prevent git-upload-pack segfault if object cannot be found

## tl;dr

2 messages between Feb 18, 2006 and Feb 18, 2006. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Carl Worth· Feb 18, 2006, 00:14 UTC · lore
Signed-off-by: Carl Worth <cworth@cworth.org>
---

It's probably a just-don't-do-that situation, but I did-it by moving a directory that had already been cached in objects/info/alternates by clone -l -s. Here's a fix for the segfault that that turned up.

Probably trivial enough to not bother the list with, but I'm still learning about formatting patches and mails and things, so I'm open to any feedback if I'm getting anything wrong.

 sha1_file.c   |    4 +++-
 upload-pack.c |    3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)
Show changes to 2 files +6 −1

sha1_file.c, upload-pack.c

diff --git a/sha1_file.c b/sha1_file.c
index 64cf245..1d799f7 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -551,8 +551,10 @@ static void prepare_packed_git_one(char 
 	sprintf(path, "%s/pack", objdir);
 	len = strlen(path);
 	dir = opendir(path);
-	if (!dir)
+	if (!dir) {
+		fprintf(stderr, "unable to open object pack directory: %s: %s\n", path, strerror(errno));
 		return;
+	}
 	path[len++] = '/';
 	while ((de = readdir(dir)) != NULL) {
 		int namelen = strlen(de->d_name);
diff --git a/upload-pack.c b/upload-pack.c
index d198055..3606529 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -216,6 +216,9 @@ static int send_ref(const char *refname,
 	static char *capabilities = "multi_ack";
 	struct object *o = parse_object(sha1);
 
+	if (!o)
+		die("git-upload-pack: cannot find object %s:", sha1_to_hex(sha1));
+
 	if (capabilities)
 		packet_write(1, "%s %s%c%s\n", sha1_to_hex(sha1), refname,
 			0, capabilities);
Junio C Hamano· Feb 18, 2006, 06:50 UTC · re: Carl Worth · lore

Re: [PATCH] Prevent git-upload-pack segfault if object cannot be found

Thanks, this is the last remaining call that did not check its return value from opendir().

I queued this one and three clone things from you. They will appear in "next" first, but also be in 1.2.2.

← back to recent threads