Commit a53d2e3985505de0e1dcc580cd2c624fcf0fce93

Patrick Steinhardt 2016-02-09T09:58:56

pack: do not free passed in poiter on error The function `git_packfile_stream_open` tries to free the passed in stream when an error occurs. The only call site is `git_indexer_append`, though, which passes in the address of a stream struct which has not been allocated on the heap. Fix the issue by simply removing the call to free. In case of an error we did not allocate any memory yet and otherwise it should be the caller's responsibility to manage it's object's lifetime.

1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/src/pack.c b/src/pack.c
index f6cb3a5..081e370 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -790,7 +790,6 @@ int git_packfile_stream_open(git_packfile_stream *obj, struct git_pack_file *p, 
 	obj->zstream.next_out = Z_NULL;
 	st = inflateInit(&obj->zstream);
 	if (st != Z_OK) {
-		git__free(obj);
 		giterr_set(GITERR_ZLIB, "failed to init packfile stream");
 		return -1;
 	}