diff options
| author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-02-12 23:23:47 +0100 | 
|---|---|---|
| committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-02-12 23:25:29 +0100 | 
| commit | 03f6e34bb9d683723cfc4fe58ee5bb983b95e173 (patch) | |
| tree | 70167b3349351bfb5e189267e4390d33b3474f1f | |
| parent | dbaee2672be14374acb17266477c19294c6155f3 (diff) | |
cgit: prepare repo before error pages
This fixes a crash when showing a list of all heads in the <select> box
in the header.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
| -rw-r--r-- | cgit.c | 19 | 
1 files changed, 12 insertions, 7 deletions
| @@ -561,12 +561,8 @@ static void print_no_repo_clone_urls(const char *url)          html("</a></td></tr>\n");  } -static int prepare_repo_cmd(void) +static void prepare_repo_env(int *nongit)  { -	struct object_id oid; -	int nongit = 0; -	int rc; -  	/* The path to the git repository. */  	setenv("GIT_DIR", ctx.repo->path, 1); @@ -579,8 +575,13 @@ static int prepare_repo_cmd(void)  	/* Setup the git directory and initialize the notes system. Both of these  	 * load local configuration from the git repository, so we do them both while  	 * the HOME variables are unset. */ -	setup_git_directory_gently(&nongit); +	setup_git_directory_gently(nongit);  	init_display_notes(NULL); +} +static int prepare_repo_cmd(int nongit) +{ +	struct object_id oid; +	int rc;  	if (nongit) {  		const char *name = ctx.repo->name; @@ -700,6 +701,7 @@ static inline void authenticate_cookie(void)  static void process_request(void)  {  	struct cgit_cmd *cmd; +	int nongit = 0;  	/* If we're not yet authenticated, no matter what page we're on,  	 * display the authentication body from the auth_filter. This should @@ -715,6 +717,9 @@ static void process_request(void)  		return;  	} +	if (ctx.repo) +		prepare_repo_env(&nongit); +  	cmd = cgit_get_cmd();  	if (!cmd) {  		ctx.page.title = "cgit error"; @@ -740,7 +745,7 @@ static void process_request(void)  	 */  	ctx.qry.vpath = cmd->want_vpath ? ctx.qry.path : NULL; -	if (ctx.repo && prepare_repo_cmd()) +	if (ctx.repo && prepare_repo_cmd(nongit))  		return;  	cmd->fn(); | 
