Commit 06abbb7f by Patrick Steinhardt

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.
parent 8d1e71f5
...@@ -847,12 +847,13 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu ...@@ -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, entry->filename, entry->filename_len + 1);
git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ); git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
if (git_buf_oom(tree)) if (git_buf_oom(tree)) {
error = -1; error = -1;
goto out;
}
} }
if (!error && if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
!(error = git_repository_odb__weakptr(&odb, bld->repo)))
error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE); error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE);
out: out:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment