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

Re: Re: CGIT 0.8.3.1 "chokes" on some bare repos

From
LHLars Hjemli <hjemli@gmail.com>
Date
Aug 3, 2010, 20:20 UTC
Message-ID
<AANLkTimNyLBjVe+sWRJ+=eidazE-JP6Rshk1XzhrBCG3@mail.gmail.com>
In-Reply-To
<AANLkTi=Ho=ZiOpMszSEWTjY=PKg9AHp9wY-jxcd3H_jG@mail.gmail.com>
On Tue, Aug 3, 2010 at 21:34, Eugene Sajine <euguess@gmail.com> wrote:
> It segfaults:
>
> #0  0x080538fa in cmp_tag_age (a=0x8bcc760, b=0x8bcc764) at ui-refs.c:52

Great, thanks for pinpointing the bug. Could you test if the following patch fixes the problem? I've also attached it since gmail tend to damage patches...

---snip---
From: Lars Hjemli <hjemli@gmail.com>
Date: Tue, 3 Aug 2010 22:06:21 +0200
Subject: [PATCH] ui-refs.c: avoid segfault on unparsed ref objects

When a ref refers to something other then a commit or tag object, cgit could segfault when trying to display the ref info.

Noticed-by: Eugene Sajine <euguess@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 ui-refs.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/ui-refs.c b/ui-refs.c
index d3b4f6e..6571cc4 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -42,23 +42,25 @@ static int cmp_branch_age(const void *a, const void *b)
 	return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
 }

+static int get_ref_age(struct refinfo *ref)
+{
+	if (!ref->object)
+		return 0;
+	switch (ref->object->type) {
+	case OBJ_TAG:
+		return ref->tag ? ref->tag->tagger_date : 0;
+	case OBJ_COMMIT:
+		return ref->commit ? ref->commit->committer_date : 0;
+	}
+	return 0;
+}
+
 static int cmp_tag_age(const void *a, const void *b)
 {
 	struct refinfo *r1 = *(struct refinfo **)a;
 	struct refinfo *r2 = *(struct refinfo **)b;
-	int r1date, r2date;
-
-	if (r1->object->type != OBJ_COMMIT)
-		r1date = r1->tag->tagger_date;
-	else
-		r1date = r1->commit->committer_date;
-
-	if (r2->object->type != OBJ_COMMIT)
-		r2date = r2->tag->tagger_date;
-	else
-		r2date = r2->commit->committer_date;

-	return cmp_age(r1date, r2date);
+	return cmp_age(get_ref_age(r1), get_ref_age(r2));
 }

 static int print_branch(struct refinfo *ref)
-- 
1.7.1


From 3687be20bc4abf0c0c197d617afaa3a717b1ab9c Mon Sep 17 00:00:00 2001
From: Lars Hjemli <hjemli@gmail.com>
Date: Tue, 3 Aug 2010 22:06:21 +0200
Subject: [PATCH] ui-refs.c: avoid segfault on unparsed ref objects

When a ref refers to something other then a commit or tag object, cgit
could segfault when trying to display the ref info.

Noticed-by: Eugene Sajine <euguess@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 ui-refs.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/ui-refs.c b/ui-refs.c
index d3b4f6e..6571cc4 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -42,23 +42,25 @@ static int cmp_branch_age(const void *a, const void *b)
 	return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
 }
 
+static int get_ref_age(struct refinfo *ref)
+{
+	if (!ref->object)
+		return 0;
+	switch (ref->object->type) {
+	case OBJ_TAG:
+		return ref->tag ? ref->tag->tagger_date : 0;
+	case OBJ_COMMIT:
+		return ref->commit ? ref->commit->committer_date : 0;
+	}
+	return 0;
+}
+
 static int cmp_tag_age(const void *a, const void *b)
 {
 	struct refinfo *r1 = *(struct refinfo **)a;
 	struct refinfo *r2 = *(struct refinfo **)b;
-	int r1date, r2date;
-
-	if (r1->object->type != OBJ_COMMIT)
-		r1date = r1->tag->tagger_date;
-	else
-		r1date = r1->commit->committer_date;
-
-	if (r2->object->type != OBJ_COMMIT)
-		r2date = r2->tag->tagger_date;
-	else
-		r2date = r2->commit->committer_date;
 
-	return cmp_age(r1date, r2date);
+	return cmp_age(get_ref_age(r1), get_ref_age(r2));
 }
 
 static int print_branch(struct refinfo *ref)
-- 
1.7.1
Previous: Eugene Sajine
Message 5 of 5 in “Re: Re: CGIT 0.8.3.1 "chokes" on some bare repos”
  1. Lars HjemliAug 3, 2010
  2. Eugene SajineAug 3, 2010
  3. Lars HjemliAug 3, 2010
  4. Eugene SajineAug 3, 2010
  5. Lars HjemliAug 3, 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.