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

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: fix null deref under GOT_OBJ_CACHE_DEBUG
To:
Omar Polo <op@omarpolo.com>
Cc:
gameoftrees@openbsd.org
Date:
Wed, 31 Aug 2022 10:03:24 +0200

Download raw body.

Thread
On Wed, Aug 31, 2022 at 09:59:00AM +0200, Omar Polo wrote:
> cache->idset can be NULL as I just discovered.  This is more for
> nitpicking' sake rather than anything, but it avoids a crash when
> debugging the object cache and hitting the limits.

Sure, ok.

> diff /home/op/w/got
> commit - 98275f2eefb932aee3f1824f53c268fd736f6c5f
> path + /home/op/w/got
> blob - 9a73324894a8116700bddcfd4f59c9a3a39dd2e5
> file + lib/object_cache.c
> --- lib/object_cache.c
> +++ lib/object_cache.c
> @@ -294,7 +294,7 @@ print_cache_stats(struct got_object_cache *cache, cons
>  {
>  	fprintf(stderr, "%s: %s cache: %d elements, %d searches, %d hits, "
>  	    "%d missed, %d evicted, %d too large\n", getprogname(), name,
> -	    got_object_idset_num_elements(cache->idset),
> +	    cache->idset ? got_object_idset_num_elements(cache->idset) : -1,
>  	    cache->cache_searches, cache->cache_hit,
>  	    cache->cache_miss, cache->cache_evict, cache->cache_toolarge);
>  }
> @@ -378,7 +378,8 @@ got_object_cache_close(struct got_object_cache *cache)
>  		break;
>  	}
>  
> -	got_object_idset_for_each(cache->idset, check_refcount, cache);
> +	if (cache->idset)
> +		got_object_idset_for_each(cache->idset, check_refcount, cache);
>  #endif
>  
>  	if (cache->idset) {
> 
>