reinistate 1b32cc6794190c9fb6124b6de5b6f23e3007eec9 but with an addition check, elimi...
authorPaul <paul@claws-mail.org>
Tue, 17 Nov 2015 18:12:36 +0000 (18:12 +0000)
committerPaul <paul@claws-mail.org>
Tue, 17 Nov 2015 18:12:36 +0000 (18:12 +0000)
src/plugins/pgpcore/sgpgme.c

index e963580a6e5496dcaeadbdfab6d65a52db6aa915..e799369c2dca6285c2f7de3d12d82dd09304617e 100644 (file)
@@ -218,7 +218,18 @@ gchar *sgpgme_sigstat_info_short(gpgme_ctx_t ctx, gpgme_verify_result_t status)
        } else if (gpg_err_code(err) != GPG_ERR_NO_ERROR && gpg_err_code(err) != GPG_ERR_EOF) {
                return g_strdup_printf(_("The signature can't be checked - %s"), 
                        gpgme_strerror(err));
-       }
+       } else if (gpg_err_code(err) != GPG_ERR_NO_ERROR && gpg_err_code(err) == GPG_ERR_EOF &&
+                  key == NULL) {
+               /*
+                * When gpg is upgraded to gpg-v21 then installer tries to migrate the old
+                * gpg keyrings found in ~/.gnupg to the new version. If the keyrings contain
+                * very old keys using ciphers no more supported in gpg-v21 this transition
+                * can fail and the left-over ~/.gnupg/pubring.gpg will cause claws to crash
+                * when the above condition is meet.
+                */
+               return g_strdup_printf(_("The signature can't be checked - %s."),
+                        gpgme_strerror(err));
+        }
        if (key)
                uname = extract_name(key->uids->uid);
        else