diff options
| author | Patrick Steinhardt <ps@pks.im> | 2017-03-27 13:14:48 +0200 |
|---|---|---|
| committer | Patrick Steinhardt <ps@pks.im> | 2017-03-28 08:39:29 +0200 |
| commit | 06abbb7f07c64e877ffa87ae4614ae5f4e933435 (patch) | |
| tree | db01d0586a75eaec8875c6a4e90db93cdc4d9f49 | |
| parent | 8d1e71f5a24106bfeb4d6ff767708dd40e4a58dd (diff) | |
| download | libgit2-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.c | 7 |
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: |
