Merge pull request #2076 from xtao/fix-zstream Fix write_object.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
diff --git a/src/pack-objects.c b/src/pack-objects.c
index c4ed4dc..1774b07 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -288,6 +288,7 @@ static int write_object(
git_odb_object *obj = NULL;
git_otype type;
unsigned char hdr[10], *zbuf = NULL;
+ void *delta_data = NULL;
void *data;
size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len;
ssize_t written;
@@ -295,10 +296,11 @@ static int write_object(
if (po->delta) {
if (po->delta_data)
- data = po->delta_data;
- else if ((error = get_delta(&data, pb->odb, po)) < 0)
+ delta_data = po->delta_data;
+ else if ((error = get_delta(&delta_data, pb->odb, po)) < 0)
goto done;
+ data = delta_data;
data_len = po->delta_size;
type = GIT_OBJ_REF_DELTA;
} else {
@@ -351,7 +353,7 @@ static int write_object(
}
if (po->delta)
- git__free(data);
+ git__free(delta_data);
}
if (po->delta_data) {
diff --git a/src/zstream.c b/src/zstream.c
index 7def044..0bca72f 100644
--- a/src/zstream.c
+++ b/src/zstream.c
@@ -70,7 +70,7 @@ int git_zstream_deflatebuf(git_buf *out, const void *in, size_t in_len)
int error = 0;
if ((error = git_zstream_init(&zstream)) < 0)
- goto done;
+ return error;
do {
if (out->asize - out->size < BUFFER_SIZE)
@@ -89,7 +89,6 @@ int git_zstream_deflatebuf(git_buf *out, const void *in, size_t in_len)
if (written < 0)
error = written;
-done:
git_zstream_free(&zstream);
return error;
}