From 06abbb7f07c64e877ffa87ae4614ae5f4e933435 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 27 Mar 2017 13:14:48 +0200 Subject: [PATCH] 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. --- src/tree.c | 7 ++++--- 1 file 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: