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.
This commit is contained in:
Patrick Steinhardt 2017-03-27 13:14:48 +02:00
parent 8d1e71f5a2
commit 06abbb7f07

View File

@ -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: