From df5353b95eefc13135e7df50a7c197f270d6080d Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Thu, 22 Sep 2016 21:32:31 +0200 Subject: [PATCH] g10: When adding a user id, make sure the keyblock has been prepared. * g10/keyedit.c (keyedit_quick_adduid): Call merge_keys_and_selfsig on KEYBLOCK before adding the user id. * tests/openpgp/quick-key-manipulation.scm: Make sure that the key capabilities don't change when adding a user id. (key-data): New function. -- Signed-off-by: Neal H. Walfield GnuPG-bug-id: 2697 --- g10/keyedit.c | 2 ++ tests/openpgp/quick-key-manipulation.scm | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/g10/keyedit.c b/g10/keyedit.c index cd16ec971..65ac2eab3 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -2932,6 +2932,8 @@ keyedit_quick_adduid (ctrl_t ctrl, const char *username, const char *newuid) fix_keyblock (&keyblock); + merge_keys_and_selfsig (keyblock); + if (menu_adduid (ctrl, keyblock, 0, NULL, uidstring)) { err = keydb_update_keyblock (kdbhd, keyblock); diff --git a/tests/openpgp/quick-key-manipulation.scm b/tests/openpgp/quick-key-manipulation.scm index f2b8766bd..8a3e3f1f7 100755 --- a/tests/openpgp/quick-key-manipulation.scm +++ b/tests/openpgp/quick-key-manipulation.scm @@ -37,6 +37,11 @@ (define alpha "Alpha ") (define bravo "Bravo ") +(define (key-data key) + (filter (lambda (x) (or (string=? (car x) "pub") + (string=? (car x) "sub"))) + (gpg-with-colons `(-k ,key)))) + (with-temporary-working-directory (file-copy (path-join old-home "gpg.conf") "gpg.conf") (file-copy (path-join old-home "gpg-agent.conf") "gpg-agent.conf") @@ -51,7 +56,23 @@ (assert (= 1 (count-uids-of-secret-key alpha))) (info "Checking that we can add a user ID...") - (call-check `(,@GPG --quick-adduid ,(exact alpha) ,bravo)) + + ;; Make sure the key capabilities don't change when we add a user id. + ;; (See bug #2697.) + (let ((pre (key-data (exact alpha))) + (result (call-check `(,@GPG --quick-adduid ,(exact alpha) ,bravo))) + (post (key-data (exact alpha)))) + (if (not (equal? pre post)) + (begin + (display "Key capabilities changed when adding a user id:") + (newline) + (display " Pre: ") + (display pre) + (newline) + (display " Post: ") + (display post) + (newline) + (exit 1)))) (call-check `(,@GPG --check-trustdb)) ; XXX why?