From df19d9d1df553f9d0067cbb2bb92ebed489ea5a8 Mon Sep 17 00:00:00 2001 From: link2xt Date: Tue, 20 Oct 2026 12:55:30 +0000 Subject: [PATCH] fix: fix the order of arguments to merge_openpgp_certificates() call This fixes flaky tests/test_securejoin.py::test_qr_scan_updates_new_relay_address which hanged during the second securejoin on fast network (e.g. when testing against local container) as Bob received securejoin pubkey message from Alice but did not merge the new relay list. --- src/contact.rs | 6 +++++- src/pgp.rs | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/contact.rs b/src/contact.rs index 37860a40a..9981d7d86 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -372,7 +372,11 @@ pub(crate) async fn import_public_key( .await? { let old_public_key = SignedPublicKey::from_slice(&public_key_bytes)?; - merged_public_key = merge_openpgp_certificates(public_key.clone(), old_public_key) + + // Order of merge_openpgp_certificates() arguments is important. + // Second argument is the new key, it is preferred in case of ties, + // i.e. same signature timestamps. + merged_public_key = merge_openpgp_certificates(old_public_key, public_key.clone()) .context("Failed to merge public keys")?; &merged_public_key } else { diff --git a/src/pgp.rs b/src/pgp.rs index 907bd35a0..68ffa3e12 100644 --- a/src/pgp.rs +++ b/src/pgp.rs @@ -382,6 +382,8 @@ pub fn symm_encrypt_message( /// or even have some packets maliciously dropped /// (for example, all encryption subkeys dropped) /// or restored from some older version of the certificate. +/// +/// In case of ties, i.e. same timestamps, data from the new certificate is preferred. pub fn merge_openpgp_certificates( old_certificate: SignedPublicKey, new_certificate: SignedPublicKey,