summaryrefslogtreecommitdiff
path: root/src/indexer.c
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-02-01 06:22:36 -0800
committerEdward Thomson <ethomson@edwardthomson.com>2018-02-09 10:58:22 +0000
commit619f61a8f110de71422d62e14e22c84865c3091c (patch)
treecd2f7b43b95a9406f7c2bfb331753099c7492555 /src/indexer.c
parent7ec7aa4a7396c80bfe557590bfae83b7a51458d3 (diff)
downloadlibgit2-619f61a8f110de71422d62e14e22c84865c3091c.tar.gz
odb: error when we can't create object header
Return an error to the caller when we can't create an object header for some reason (printf failure) instead of simply asserting.
Diffstat (limited to 'src/indexer.c')
-rw-r--r--src/indexer.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/indexer.c b/src/indexer.c
index a5e842272..c0976f270 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -187,13 +187,17 @@ static int store_delta(git_indexer *idx)
return 0;
}
-static void hash_header(git_hash_ctx *ctx, git_off_t len, git_otype type)
+static int hash_header(git_hash_ctx *ctx, git_off_t len, git_otype type)
{
char buffer[64];
size_t hdrlen;
+ int error;
+
+ if ((error = git_odb__format_object_header(&hdrlen,
+ buffer, sizeof(buffer), (size_t)len, type)) < 0)
+ return error;
- hdrlen = git_odb__format_object_header(buffer, sizeof(buffer), (size_t)len, type);
- git_hash_update(ctx, buffer, hdrlen);
+ return git_hash_update(ctx, buffer, hdrlen);
}
static int hash_object_stream(git_indexer*idx, git_packfile_stream *stream)
@@ -621,7 +625,10 @@ int git_indexer_append(git_indexer *idx, const void *data, size_t size, git_tran
idx->have_delta = 1;
} else {
idx->have_delta = 0;
- hash_header(&idx->hash_ctx, entry_size, type);
+
+ error = hash_header(&idx->hash_ctx, entry_size, type);
+ if (error < 0)
+ goto on_error;
}
idx->have_stream = 1;