Control: tags -1 +patch +pending +unreproducible

On 2013-09-16 17:37:15, Joey Hess wrote:
[...]
>   File "/usr/lib/python2.7/dist-packages/monkeysign/gtkui.py", line 222, in 
> __init__
>     self.mykey.append_text(key.uidslist[0].uid)
> AttributeError: OpenPGPkey instance has no attribute 'uidslist'
>
> I determined this crash was due to one of these two keys. 
> These are old keys I have lying around, that I don't know what I used
> them for, and that do not have a uid. I bet the lack of uid is the problem.
>
> sec   1024D/16D0B8EF 2003-09-11
> ssb   1024g/FBA4BC10 2003-09-11
>
> sec   1024D/788A3F4C 1999-09-08
> ssb   2048g/1950ED18 1999-09-08

Hi joeyh,

It's very hard to reproduce your problem because, of course, I do not
have access to old private key material such as yours.

But I have tried to fix this anyways. Please try the attached patch:

>From 006a29582bf891c45ba7885792eb76931185935d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Antoine=20Beaupr=C3=A9?= <anar...@debian.org>
Date: Thu, 1 Sep 2016 19:09:45 -0400
Subject: [PATCH] skip keys without uids (Closes: #723152)

notice how we unconditionnally set uidslist now - not sure why we were doing that before
---
 monkeysign/gpg.py   | 2 +-
 monkeysign/gtkui.py | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/monkeysign/gpg.py b/monkeysign/gpg.py
index f477e78..8864780 100644
--- a/monkeysign/gpg.py
+++ b/monkeysign/gpg.py
@@ -737,7 +737,7 @@ def parse_gpg_list(self, text):
                 pass
             else:
                 raise NotImplementedError(_("record type '%s' not implemented") % rectype)
-        if uidslist: self.uidslist = uidslist
+        self.uidslist = uidslist
 
 
     def __str__(self):
diff --git a/monkeysign/gtkui.py b/monkeysign/gtkui.py
index 394ba1e..fb285b2 100644
--- a/monkeysign/gtkui.py
+++ b/monkeysign/gtkui.py
@@ -278,6 +278,9 @@ def create_secret_keys_display(self):
                 for key in Keyring().get_keys(None, True, False).values():
                         if key.invalid or key.disabled or key.expired or key.revoked:
                                 continue
+                        # weird key without uids, skip (see BTS#723152)
+                        if not key.uidslist:
+                                continue
                         uid = key.uidslist[0].uid
                         self.uimanager.add_ui(self.uimanager.new_merge_id(), '/menu/identity', key.fpr, key.fpr, gtk.UI_MANAGER_AUTO, True)
                         action = gtk.RadioAction(key.fpr, "%s (%s)" % (uid, key.keyid()), str(key), None, i)
-- 
2.1.4

Also available here:

https://0xacab.org/monkeysphere/monkeysign/commit/006a29582bf891c45ba7885792eb76931185935d

Thanks for the bug report!

A.
-- 
La nature n'a créé ni maîtres ni esclaves
Je ne veux ni donner ni recevoir de lois.
                        - Denis Diderot

Reply via email to