Skip to contentSkip to conversation

Initialize repo object in fuzz-commit-graph

PATCH New Josh Steadmon 1 participant 3 messages Feb 7, 2019

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index cf790c9d04..0157acbf2e 100644
@@ -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
#2 lore raw

PATCH 2/2 object: fix leak of shallow_stat

In reply to Josh Steadmon

In 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
index 5dc5eec367..ca0b093c37 100644
@@ -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