diff options
author | Zach van Rijn <me@zv.io> | 2022-02-02 23:56:29 +0000 |
---|---|---|
committer | Zach van Rijn <me@zv.io> | 2022-10-21 18:33:57 -0500 |
commit | 028da0dcb535be96e8296967e3b3c4f88f5c773d (patch) | |
tree | 7bda33cfff8c8c04c7db20319eb83101011f6c15 /user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch | |
parent | 289427675ea063b92d60ffc93f521121b424769b (diff) | |
download | packages-028da0dcb535be96e8296967e3b3c4f88f5c773d.tar.gz packages-028da0dcb535be96e8296967e3b3c4f88f5c773d.tar.bz2 packages-028da0dcb535be96e8296967e3b3c4f88f5c773d.tar.xz packages-028da0dcb535be96e8296967e3b3c4f88f5c773d.zip |
user/gpgme: allow build with Python 3.10.
Diffstat (limited to 'user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch')
-rw-r--r-- | user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch b/user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch new file mode 100644 index 000000000..86c5110fe --- /dev/null +++ b/user/gpgme/0001-core-Fix-use-after-free-issue-in-test.patch @@ -0,0 +1,123 @@ +From 81a33ea5e1b86d586b956e893a5b25c4cd41c969 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= <dev@ingo-kloecker.de> +Date: Sat, 26 Jun 2021 18:02:47 +0200 +Subject: [PATCH] core: Fix use-after-free issue in test + +* tests/gpg/t-edit-sign.c (sign_key, verify_key_signature): New. +(main): Factored out signing and verifying the result. +-- + +Factoring the two steps of the test into different functions fixes the +use-after-free issue that was caused by accidentaly using a variable +of the first step in the second step. + +GnuPG-bug-id: 5509 +--- + tests/gpg/t-edit-sign.c | 54 ++++++++++++++++++++++++++++------------- + 1 file changed, 37 insertions(+), 17 deletions(-) + +diff --git a/tests/gpg/t-edit-sign.c b/tests/gpg/t-edit-sign.c +index 2f983622..e0494c54 100644 +--- a/tests/gpg/t-edit-sign.c ++++ b/tests/gpg/t-edit-sign.c +@@ -107,31 +107,19 @@ interact_fnc (void *opaque, const char *status, const char *args, int fd) + } + + +-int +-main (int argc, char **argv) ++void ++sign_key (const char *key_fpr, const char *signer_fpr) + { + gpgme_ctx_t ctx; + gpgme_error_t err; + gpgme_data_t out = NULL; +- const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */ + gpgme_key_t signing_key = NULL; +- const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */ + gpgme_key_t key = NULL; +- gpgme_key_t signed_key = NULL; +- gpgme_user_id_t signed_uid = NULL; +- gpgme_key_sig_t key_sig = NULL; + char *agent_info; +- int mode; +- +- (void)argc; +- (void)argv; +- +- init_gpgme (GPGME_PROTOCOL_OpenPGP); + + err = gpgme_new (&ctx); + fail_if_err (err); + +- /* Sign the key */ + agent_info = getenv("GPG_AGENT_INFO"); + if (!(agent_info && strchr (agent_info, ':'))) + gpgme_set_passphrase_cb (ctx, passphrase_cb, 0); +@@ -159,8 +147,23 @@ main (int argc, char **argv) + gpgme_data_release (out); + gpgme_key_unref (key); + gpgme_key_unref (signing_key); ++ gpgme_release (ctx); ++} ++ ++ ++void ++verify_key_signature (const char *key_fpr, const char *signer_keyid) ++{ ++ gpgme_ctx_t ctx; ++ gpgme_error_t err; ++ gpgme_key_t signed_key = NULL; ++ gpgme_user_id_t signed_uid = NULL; ++ gpgme_key_sig_t key_sig = NULL; ++ int mode; ++ ++ err = gpgme_new (&ctx); ++ fail_if_err (err); + +- /* Verify the key signature */ + mode = gpgme_get_keylist_mode (ctx); + mode |= GPGME_KEYLIST_MODE_SIGS; + err = gpgme_set_keylist_mode (ctx, mode); +@@ -168,7 +171,7 @@ main (int argc, char **argv) + err = gpgme_get_key (ctx, key_fpr, &signed_key, 0); + fail_if_err (err); + +- signed_uid = key->uids; ++ signed_uid = signed_key->uids; + if (!signed_uid) + { + fprintf (stderr, "Signed key has no user IDs\n"); +@@ -180,7 +183,7 @@ main (int argc, char **argv) + exit (1); + } + key_sig = signed_uid->signatures->next; +- if (strcmp ("2D727CC768697734", key_sig->keyid)) ++ if (strcmp (signer_keyid, key_sig->keyid)) + { + fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n", + key_sig->keyid); +@@ -196,6 +199,23 @@ main (int argc, char **argv) + + gpgme_key_unref (signed_key); + gpgme_release (ctx); ++} ++ ++ ++int ++main (int argc, char **argv) ++{ ++ const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */ ++ const char *signer_keyid = signer_fpr + strlen(signer_fpr) - 16; ++ const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */ ++ ++ (void)argc; ++ (void)argv; ++ ++ init_gpgme (GPGME_PROTOCOL_OpenPGP); ++ ++ sign_key (key_fpr, signer_fpr); ++ verify_key_signature (key_fpr, signer_keyid); + + return 0; + } |