summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2022-11-18 13:56:59 +0000
committerGitHub <noreply@github.com>2022-11-18 13:56:59 +0000
commita7d841a8b1c5c7a492b18c32471dcda2cd479c85 (patch)
tree845b33aa08c0139a6b59aea1e20cb442528026e0
parentad2d3a06963ebfd13a04deb619e839b1346a4353 (diff)
parent25dd1c93aba78e4cb2827f729ed0d1c5c527ecf7 (diff)
downloadlibgit2-a7d841a8b1c5c7a492b18c32471dcda2cd479c85.tar.gz
Merge pull request #6421 from julianmesa-gitkraken/fix-leak-git_tag_create_from_buffer
Fix leak in git_tag_create_from_buffer
-rw-r--r--src/libgit2/tag.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libgit2/tag.c b/src/libgit2/tag.c
index 908adbebf..0a90e393c 100644
--- a/src/libgit2/tag.c
+++ b/src/libgit2/tag.c
@@ -299,8 +299,10 @@ static int git_tag_create__internal(
}
if (create_tag_annotation) {
- if (write_tag_annotation(oid, repo, tag_name, target, tagger, message) < 0)
+ if (write_tag_annotation(oid, repo, tag_name, target, tagger, message) < 0) {
+ git_str_dispose(&ref_name);
return -1;
+ }
} else
git_oid_cpy(oid, git_object_id(target));
@@ -397,14 +399,17 @@ int git_tag_create_from_buffer(git_oid *oid, git_repository *repo, const char *b
/** Ensure the tag name doesn't conflict with an already existing
* reference unless overwriting has explicitly been requested **/
if (error == 0 && !allow_ref_overwrite) {
+ git_str_dispose(&ref_name);
git_error_set(GIT_ERROR_TAG, "tag already exists");
return GIT_EEXISTS;
}
/* write the buffer */
if ((error = git_odb_open_wstream(
- &stream, odb, strlen(buffer), GIT_OBJECT_TAG)) < 0)
+ &stream, odb, strlen(buffer), GIT_OBJECT_TAG)) < 0) {
+ git_str_dispose(&ref_name);
return error;
+ }
if (!(error = git_odb_stream_write(stream, buffer, strlen(buffer))))
error = git_odb_stream_finalize_write(oid, stream);