]> git.cameronkatri.com Git - cgit.git/commitdiff
Be prepared for empty repositories
authorLars Hjemli <hjemli@gmail.com>
Sun, 27 Jul 2008 10:32:08 +0000 (12:32 +0200)
committerLars Hjemli <hjemli@gmail.com>
Sun, 27 Jul 2008 10:32:08 +0000 (12:32 +0200)
Before this patch, cgit would segfault on repositories with no refs.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
cgit.c
ui-shared.c

diff --git a/cgit.c b/cgit.c
index 87950858a267f61433486fc32c9adbb8dda6e29a..cefeddfa12fb30d1c2711a79919aebb183ed5382 100644 (file)
--- 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;
        }
 
index 209af6ee3acabfc77abc11dd641f2e5d09047ce7..4280a70432b0a3f7869f0a6ddfa132df0af829c7 100644 (file)
@@ -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)