summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-03-27 13:14:48 +0200
committerPatrick Steinhardt <ps@pks.im>2017-03-28 08:39:29 +0200
commit06abbb7f07c64e877ffa87ae4614ae5f4e933435 (patch)
treedb01d0586a75eaec8875c6a4e90db93cdc4d9f49
parent8d1e71f5a24106bfeb4d6ff767708dd40e4a58dd (diff)
downloadlibgit2-06abbb7f07c64e877ffa87ae4614ae5f4e933435.tar.gz
treebuilder: exit early if running OOM in `write_with_buffer`
While writing the tree inside of a buffer, we check whether the buffer runs out of memory after each tree entry. While we set the error code as soon as we detect the OOM situation, we happily proceed iterating over the entries. This is not useful at all, as we will try to write into the buffer repeatedly, which cannot work. Fix this by exiting as soon as we are OOM.
-rw-r--r--src/tree.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/tree.c b/src/tree.c
index f73701f0d..6b1d1b238 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -847,12 +847,13 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu
git_buf_put(tree, entry->filename, entry->filename_len + 1);
git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
- if (git_buf_oom(tree))
+ if (git_buf_oom(tree)) {
error = -1;
+ goto out;
+ }
}
- if (!error &&
- !(error = git_repository_odb__weakptr(&odb, bld->repo)))
+ if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE);
out: