Be prepared for empty repositories

Before this patch, cgit would segfault on repositories with no refs.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2008-07-27 12:32:08 +02:00
parent 2d6ee032d0
commit 25c84326de
2 changed files with 9 additions and 4 deletions

10
cgit.c
View File

@ -207,15 +207,19 @@ int find_current_ref(const char *refname, const unsigned char *sha1,
char *find_default_branch(struct cgit_repo *repo) char *find_default_branch(struct cgit_repo *repo)
{ {
struct refmatch info; struct refmatch info;
char *ref;
info.req_ref = repo->defbranch; info.req_ref = repo->defbranch;
info.first_ref = NULL; info.first_ref = NULL;
info.match = 0; info.match = 0;
for_each_branch_ref(find_current_ref, &info); for_each_branch_ref(find_current_ref, &info);
if (info.match) if (info.match)
return info.req_ref; ref = info.req_ref;
else 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) 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); ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc);
if (!ctx->qry.head) { 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; ctx->repo->defbranch = ctx->qry.head;
} }

View File

@ -518,7 +518,8 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page)
html_hidden("url", url); 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); html_hidden("h", ctx.qry.head);
if (ctx.qry.sha1) if (ctx.qry.sha1)