diff options
| author | 2008-07-27 19:32:08 (JST) | |
|---|---|---|
| committer | 2008-07-27 19:32:08 (JST) | |
| commit | 25c84326deff579d5de4b880f9dca2690bdc8569 (patch) | |
| tree | 9ca41073e0e06e6dc24f7800182bf4a7b22f548c | |
| parent | 2d6ee032d0c2f84ebcfaa12d3289e85cfab18fcd (diff) | |
| download | cgit-25c84326deff579d5de4b880f9dca2690bdc8569.zip cgit-25c84326deff579d5de4b880f9dca2690bdc8569.tar.gz | |
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.c | 10 | ||||
| -rw-r--r-- | ui-shared.c | 3 |
2 files changed, 9 insertions, 4 deletions
| @@ -207,15 +207,19 @@ int find_current_ref(const char *refname, const unsigned char *sha1, | |||
| 207 | char *find_default_branch(struct cgit_repo *repo) | 207 | char *find_default_branch(struct cgit_repo *repo) |
| 208 | { | 208 | { |
| 209 | struct refmatch info; | 209 | struct refmatch info; |
| 210 | char *ref; | ||
| 210 | 211 | ||
| 211 | info.req_ref = repo->defbranch; | 212 | info.req_ref = repo->defbranch; |
| 212 | info.first_ref = NULL; | 213 | info.first_ref = NULL; |
| 213 | info.match = 0; | 214 | info.match = 0; |
| 214 | for_each_branch_ref(find_current_ref, &info); | 215 | for_each_branch_ref(find_current_ref, &info); |
| 215 | if (info.match) | 216 | if (info.match) |
| 216 | return info.req_ref; | 217 | ref = info.req_ref; |
| 217 | else | 218 | else |
| 218 | return info.first_ref; | 219 | ref = info.first_ref; |
| 220 | if (ref) | ||
| 221 | ref = xstrdup(ref); | ||
| 222 | return ref; | ||
| 219 | } | 223 | } |
| 220 | 224 | ||
| 221 | static int prepare_repo_cmd(struct cgit_context *ctx) | 225 | static int prepare_repo_cmd(struct cgit_context *ctx) |
| @@ -241,7 +245,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx) | |||
| 241 | ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); | 245 | ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); |
| 242 | 246 | ||
| 243 | if (!ctx->qry.head) { | 247 | if (!ctx->qry.head) { |
| 244 | ctx->qry.head = xstrdup(find_default_branch(ctx->repo)); | 248 | ctx->qry.head = find_default_branch(ctx->repo); |
| 245 | ctx->repo->defbranch = ctx->qry.head; | 249 | ctx->repo->defbranch = ctx->qry.head; |
| 246 | } | 250 | } |
| 247 | 251 | ||
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) | |||
| 518 | html_hidden("url", url); | 518 | html_hidden("url", url); |
| 519 | } | 519 | } |
| 520 | 520 | ||
| 521 | if (incl_head && strcmp(ctx.qry.head, ctx.repo->defbranch)) | 521 | if (incl_head && ctx.qry.head && ctx.repo->defbranch && |
| 522 | strcmp(ctx.qry.head, ctx.repo->defbranch)) | ||
| 522 | html_hidden("h", ctx.qry.head); | 523 | html_hidden("h", ctx.qry.head); |
| 523 | 524 | ||
| 524 | if (ctx.qry.sha1) | 525 | if (ctx.qry.sha1) |
