Initialize repo object in fuzz-commit-graph
cover Initialize repo object in fuzz-commit-graph
commit-graph.c now depends on the_hash_algo, which means the_repository must be initialized before attempting to load a commit graph. This series adds the initialization and cleanup to fuzz-commit-graph, and fixes a leak it discovered in the cleanup code.
Josh Steadmon (2):
fuzz-commit-graph: initialize repo objects
object: fix leak of shallow_stat
fuzz-commit-graph.c | 3 +++ object.c | 2 ++ 2 files changed, 5 insertions(+)
Signature · 1 line
2.20.1.611.gfbb209baf1-goog
PATCH 1/2 fuzz-commit-graph: initialize repo object
Various #DEFINE "constants" in commit-graph.c now depend on the_hash_algo->rawsz, but this object must be initialized before it can be used.
--- fuzz-commit-graph.c | 3 +++ 1 file changed, 3 insertions(+)
fuzz-commit-graph.c +3 -0
@@ -1,4 +1,5 @@#include "commit-graph.h" +#include "repository.h" struct commit_graph *parse_commit_graph (void *graph_map,int fd,size_t graph_size);
@@ -9,7 +10,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {struct commit_graph *g; +initialize_the_repository (); g =parse_commit_graph ((void *)data,-1 , size); +repo_clear (the_repository);free (g);return 0 ;
Signature · 1 line
2.20.1.611.gfbb209baf1-goog
PATCH 2/2 object: fix leak of shallow_stat
In reply to Josh SteadmonIn eee4502baaf ("shallow: migrate shallow information into the object parser", 2018-05-17), we added a stat_validity pointer into the parsed_object_pool struct, but did not add code to free this in parsed_object_pool_clear(). This leak was found by fuzz-commit-graph.
Clear the struct and then free it in parsed_object_pool_clear() to prevent the leak.
--- object.c | 2 ++ 1 file changed, 2 insertions(+)
object.c +2 -0
@@ -557,9 +557,11 @@ void parsed_object_pool_clear(struct parsed_object_pool *o)clear_alloc_state (o->commit_state);clear_alloc_state (o->tag_state);clear_alloc_state (o->object_state); +stat_validity_clear (o->shallow_stat);FREE_AND_NULL (o->blob_state);FREE_AND_NULL (o->tree_state);FREE_AND_NULL (o->commit_state);FREE_AND_NULL (o->tag_state);FREE_AND_NULL (o->object_state); +FREE_AND_NULL (o->shallow_stat); }
Signature · 1 line
2.20.1.611.gfbb209baf1-goog