commit: 47bf10b77b8f94bfeea06e6cd8c9c81958c5584f
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 22 09:45:26 2026 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Thu Jan 22 09:51:41 2026 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=47bf10b7
qmanifest: cleanup gpgme stuff on errors
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qmanifest.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/qmanifest.c b/qmanifest.c
index be9cdbb..a674d9e 100644
--- a/qmanifest.c
+++ b/qmanifest.c
@@ -766,10 +766,17 @@ process_dir_gen(void)
gerr = gpgme_get_key(gctx, gpg_sign_key, &gkey, 0);
if (gerr != GPG_ERR_NO_ERROR)
+ {
+ gpgme_release(gctx);
return "failed to get GPG key";
+ }
gerr = gpgme_signers_add(gctx, gkey);
if (gerr != GPG_ERR_NO_ERROR)
+ {
+ gpgme_key_unref(gkey);
+ gpgme_release(gctx);
return "failed to add GPG key to sign list, is it a
suitable key?";
+ }
gpgme_key_unref(gkey);
gpg_pass = NULL;
@@ -802,18 +809,29 @@ process_dir_gen(void)
}
if ((f = fopen(str_manifest, "r+")) == NULL)
+ {
+ gpgme_release(gctx);
return "could not open top-level Manifest file";
+ }
/* finally, sign the Manifest */
if (gpgme_data_new_from_stream(&manifest, f) !=
GPG_ERR_NO_ERROR)
+ {
+ gpgme_release(gctx);
return "failed to create GPG data from Manifest";
+ }
if (gpgme_data_new(&out) != GPG_ERR_NO_ERROR)
+ {
+ gpgme_release(gctx);
return "failed to create GPG output buffer";
+ }
gerr = gpgme_op_sign(gctx, manifest, out, GPGME_SIG_MODE_CLEAR);
if (gerr != GPG_ERR_NO_ERROR) {
warn("%s: %s", gpgme_strsource(gerr),
gpgme_strerror(gerr));
+ gpgme_data_release(out);
+ gpgme_release(gctx);
return "failed to GPG sign Manifest";
}