aboutsummaryrefslogtreecommitdiffstats
path: root/g10/free-packet.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2025-09-26 12:43:39 +0000
committerWerner Koch <[email protected]>2025-09-26 12:46:14 +0000
commit600df5259db0b7be25a2e2b06c0c2d13265eceea (patch)
treea019d82c85e29353a3988fb761ea1b8ce4bb2467 /g10/free-packet.c
parentw32: Fix gnupg_isatty. (diff)
downloadgnupg-600df5259db0b7be25a2e2b06c0c2d13265eceea.tar.gz
gnupg-600df5259db0b7be25a2e2b06c0c2d13265eceea.zip
gpg: Detect duplicate keys with --add-recipients.
* g10/packet.h (struct pubkey_enc_list): Change to use a union to also store symkey_enc data. Adjust all users accordingly. (struct pubkey_enc_info_item): New. * g10/free-packet.c (free_pubkey_enc_list): New. * g10/mainproc.c (release_list): Use it here. * g10/decrypt.c (decrypt_message): and here. * g10/encrypt.c (reencrypt_to_new_recipients): Record the used pubkey_enc packets and pass them to write_pubkey_enc_from_list. (write_pubkey_enc_from_list): Add arg restrict_pk_list and use it to skip recipients already used. -- GnuPG-bug-id: 1825 Note that we here already prepare to better handle symkey_enc packets.
Diffstat (limited to 'g10/free-packet.c')
-rw-r--r--g10/free-packet.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/g10/free-packet.c b/g10/free-packet.c
index 3a9e17665..47615596a 100644
--- a/g10/free-packet.c
+++ b/g10/free-packet.c
@@ -538,6 +538,22 @@ free_packet (PACKET *pkt, parse_packet_ctx_t parsectx)
}
+/* Free a entire list of public key encrypted data. */
+void
+free_pubkey_enc_list (struct pubkey_enc_list *pkenc_list)
+{
+ while (pkenc_list)
+ {
+ struct pubkey_enc_list *tmp = pkenc_list->next;
+
+ if (!pkenc_list->u_sym)
+ release_pubkey_enc_parts (&pkenc_list->u.pub);
+ xfree (pkenc_list);
+ pkenc_list = tmp;
+ }
+}
+
+
/****************
* returns 0 if they match.
*/