"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
Re: gotwebd crash
To:
Stefan Sperling <stsp@stsp.name>
Cc:
gameoftrees@openbsd.org
Date:
Sat, 25 Nov 2023 23:16:14 +0100

Download raw body.

Thread
On 2023/11/25 21:39:16 +0100, Stefan Sperling <stsp@stsp.name> wrote:
> It looks like the problem is a call to refresh_packidx_paths() within
> functions called while looping over repo->pathidx_paths:
> 
>  got_object_get_type() -> got_object_open() -> got_object_open_packed() ->
>  got_repo_search_packidx() -> refresh_packidx_paths()
> 
> The patch below should fix it. This is a quick fix just for this code path.
> Other places looping over this list don't seem to be doing anything dangerous.
> This could be improved upon later but I think it is good enough for now.
> 
> ok?

ok op@ as a quick measure.

nit below

> --- lib/repository.c
> +++ lib/repository.c
> @@ -713,6 +713,7 @@ got_repo_open(struct got_repository **repop, const cha
>  
>  	RB_INIT(&repo->packidx_bloom_filters);
>  	TAILQ_INIT(&repo->packidx_paths);
> +	repo->no_packidx_refresh = 0;

it's pointless to set to zero right after calloc().

>  	for (i = 0; i < nitems(repo->privsep_children); i++) {
>  		memset(&repo->privsep_children[i], 0,