summary refs log tree commit diff
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2008-07-27 12:32:08 +0200
committerLars Hjemli <hjemli@gmail.com>2008-07-27 12:32:08 +0200
commit25c84326deff579d5de4b880f9dca2690bdc8569 (patch)
tree9ca41073e0e06e6dc24f7800182bf4a7b22f548c
parent2d6ee032d0c2f84ebcfaa12d3289e85cfab18fcd (diff)
Be prepared for empty repositories
Before this patch, cgit would segfault on repositories with no refs.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--cgit.c10
-rw-r--r--ui-shared.c3
2 files changed, 9 insertions, 4 deletions
diff --git a/cgit.c b/cgit.c
index 8795085..cefeddf 100644
--- a/cgit.c
+++ b/cgit.c
@@ -207,15 +207,19 @@ int find_current_ref(const char *refname, const unsigned char *sha1,
 char *find_default_branch(struct cgit_repo *repo)
 {
 	struct refmatch info;
+	char *ref;
 
 	info.req_ref = repo->defbranch;
 	info.first_ref = NULL;
 	info.match = 0;
 	for_each_branch_ref(find_current_ref, &info);
 	if (info.match)
-		return info.req_ref;
+		ref = info.req_ref;
 	else
-		return info.first_ref;
+		ref = info.first_ref;
+	if (ref)
+		ref = xstrdup(ref);
+	return ref;
 }
 
 static int prepare_repo_cmd(struct cgit_context *ctx)
@@ -241,7 +245,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx)
 	ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc);
 
 	if (!ctx->qry.head) {
-		ctx->qry.head = xstrdup(find_default_branch(ctx->repo));
+		ctx->qry.head = find_default_branch(ctx->repo);
 		ctx->repo->defbranch = ctx->qry.head;
 	}
 
diff --git a/ui-shared.c b/ui-shared.c
index 209af6e..4280a70 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -518,7 +518,8 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page)
 		html_hidden("url", url);
 	}
 
-	if (incl_head && strcmp(ctx.qry.head, ctx.repo->defbranch))
+	if (incl_head && ctx.qry.head && ctx.repo->defbranch &&
+	    strcmp(ctx.qry.head, ctx.repo->defbranch))
 		html_hidden("h", ctx.qry.head);
 
 	if (ctx.qry.sha1)