threads / patch / 50429

patch, 2 partsInitialize repo object in fuzz-commit-graph

Subject: [PATCH 0/2] Initialize repo object in fuzz-commit-graph

## tl;dr

3 messages between Feb 7, 2019 and Feb 7, 2019. Diffs are folded; open one to read it.

replies: 2people: 1as markdown or json

Josh Steadmon· Feb 7, 2019, 20:05 UTC · lore

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(+)
-- 
2.20.1.611.gfbb209baf1-goog
Josh Steadmon· Feb 7, 2019, 20:05 UTC · re: Josh Steadmon · lore

[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.

Signed-off-by: Josh Steadmon <steadmon@google.com>
---
 fuzz-commit-graph.c | 3 +++
 1 file changed, 3 insertions(+)
Show changes to fuzz-commit-graph.c +3 −0
diff --git a/fuzz-commit-graph.c b/fuzz-commit-graph.c
index cf790c9d04..0157acbf2e 100644
--- a/fuzz-commit-graph.c
+++ b/fuzz-commit-graph.c
@@ -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;
-- 
2.20.1.611.gfbb209baf1-goog
Josh Steadmon· Feb 7, 2019, 20:05 UTC · re: Josh Steadmon · lore

[PATCH 2/2] object: fix leak of shallow_stat

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.

Signed-off-by: Josh Steadmon <steadmon@google.com>
---
 object.c | 2 ++
 1 file changed, 2 insertions(+)
Show changes to object.c +2 −0
diff --git a/object.c b/object.c
index 5dc5eec367..ca0b093c37 100644
--- a/object.c
+++ b/object.c
@@ -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);
 }
-- 
2.20.1.611.gfbb209baf1-goog

← back to recent threads