From e49801748f6814f607ad6e30d4d80dd688ca34b9 Mon Sep 17 00:00:00 2001 From: Paul Mangan Date: Fri, 30 Sep 2005 14:52:05 +0000 Subject: [PATCH] 2005-09-30 [paul] 1.9.14cvs63 * src/addressbook.c Fix sensitivity of a menu * src/codeconv.c Respect hidden pref for mails with no encoding * src/common/xml.c Fix memory corruption * src/plugins/pgpcore/sgpgme.c Fix segfault on incomplete sigs, and display of S/Mime UIDs Patches by Colin --- ChangeLog-gtk2.claws | 14 ++++++++ PATCHSETS | 1 + configure.ac | 2 +- src/addressbook.c | 2 +- src/codeconv.c | 3 ++ src/common/xml.c | 4 +-- src/plugins/pgpcore/sgpgme.c | 67 +++++++++++++++++++++++++++--------- 7 files changed, 72 insertions(+), 21 deletions(-) diff --git a/ChangeLog-gtk2.claws b/ChangeLog-gtk2.claws index 30c8f6a46..c3be5cb7d 100644 --- a/ChangeLog-gtk2.claws +++ b/ChangeLog-gtk2.claws @@ -1,3 +1,17 @@ +2005-09-30 [paul] 1.9.14cvs63 + + * src/addressbook.c + Fix sensitivity of a menu + * src/codeconv.c + Respect hidden pref for mails with no encoding + * src/common/xml.c + Fix memory corruption + * src/plugins/pgpcore/sgpgme.c + Fix segfault on incomplete sigs, and display + of S/Mime UIDs + + Patches by Colin + 2005-09-30 [colin] 1.9.14cvs62 * src/partial_download.c diff --git a/PATCHSETS b/PATCHSETS index 78b29be5e..8f804b188 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -831,3 +831,4 @@ ( cvs diff -u -r 1.1.4.5 -r 1.1.4.6 src/plugins/trayicon/libeggtrayicon/eggtrayicon.c; ) > 1.9.14cvs60.patchset ( cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/plugins/pgpinline/pgpinline.c; ) > 1.9.14cvs61.patchset ( cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/partial_download.c; cvs diff -u -r 1.56.2.40 -r 1.56.2.41 src/pop.c; ) > 1.9.14cvs62.patchset +( cvs diff -u -r 1.60.2.32 -r 1.60.2.33 src/addressbook.c; cvs diff -u -r 1.65.2.40 -r 1.65.2.41 src/codeconv.c; cvs diff -u -r 1.1.4.13 -r 1.1.4.14 src/common/xml.c; cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/plugins/pgpcore/sgpgme.c; ) > 1.9.14cvs63.patchset diff --git a/configure.ac b/configure.ac index fa9feb6d6..64ed93132 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=9 MICRO_VERSION=14 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=62 +EXTRA_VERSION=63 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/addressbook.c b/src/addressbook.c index b152d3cae..6c9ced909 100644 --- a/src/addressbook.c +++ b/src/addressbook.c @@ -2135,7 +2135,7 @@ static gboolean addressbook_tree_button_pressed(GtkWidget *ctree, if( ! iface->readOnly ) { canEdit = TRUE; canDelete = TRUE; - menu_set_sensitive( addrbook.tree_factory, "/New Address", TRUE ); + menu_set_sensitive( addrbook.list_factory, "/New Address", TRUE ); gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); } } diff --git a/src/codeconv.c b/src/codeconv.c index 7827f042f..d1226ee35 100644 --- a/src/codeconv.c +++ b/src/codeconv.c @@ -1324,6 +1324,9 @@ static CharSet conv_get_locale_charset_no_utf8(void) gchar *tmp; gint i; + if (prefs_common.broken_are_utf8) + return conv_get_locale_charset(); + if (cur_charset != -1) return cur_charset; diff --git a/src/common/xml.c b/src/common/xml.c index 279d08c31..f1b947bc0 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -207,7 +207,7 @@ gint xml_parse_next_tag(XMLFile *file) /* end-tag */ if (buf[0] == '/') { if (strcmp(xml_get_current_tag(file)->tag, buf + 1) != 0) { - g_warning("xml_parse_next_tag(): Tag name mismatch: %s\n", buf); + g_warning("xml_parse_next_tag(): Tag name mismatch: %s (%s)\n", buf, xml_get_current_tag(file)->tag); return -1; } xml_pop_tag(file); @@ -652,7 +652,7 @@ void xml_free_tag(XMLTag *tag) XMLAttr *attr = (XMLAttr *)tag->attr->data; tag->attr = g_list_remove(tag->attr, tag->attr->data); XML_STRING_FREE(attr->name); - XML_STRING_FREE(attr->value); + g_free(attr->value); /* __not__ XML_STRING_FREE */ g_free(attr); } g_free(tag); diff --git a/src/plugins/pgpcore/sgpgme.c b/src/plugins/pgpcore/sgpgme.c index e9f5a208a..c0eacf191 100644 --- a/src/plugins/pgpcore/sgpgme.c +++ b/src/plugins/pgpcore/sgpgme.c @@ -125,11 +125,30 @@ static const gchar *get_validity_str(unsigned long validity) } } +static gchar *extract_name(const char *uid) +{ + if (uid == NULL) + return NULL; + if (!strncmp(uid, "CN=", 3)) { + gchar *result = g_strdup(uid+3); + if (strstr(result, ",")) + *(strstr(result, ",")) = '\0'; + return result; + } else if (strstr(uid, ",CN=")) { + gchar *result = g_strdup(strstr(uid, ",CN=")+4); + if (strstr(result, ",")) + *(strstr(result, ",")) = '\0'; + return result; + } else { + return g_strdup(uid); + } +} gchar *sgpgme_sigstat_info_short(gpgme_ctx_t ctx, gpgme_verify_result_t status) { gpgme_signature_t sig = NULL; gchar *uname = NULL; gpgme_key_t key; + gchar *result = NULL; if (GPOINTER_TO_INT(status) == -GPG_ERR_SYSTEM_ERROR) { return g_strdup(_("The signature can't be checked - GPG error.")); @@ -145,27 +164,34 @@ gchar *sgpgme_sigstat_info_short(gpgme_ctx_t ctx, gpgme_verify_result_t status) gpgme_get_key(ctx, sig->fpr, &key, 0); if (key) - uname = key->uids->uid; + uname = extract_name(key->uids->uid); else - uname = ""; + uname = g_strdup(""); switch (gpg_err_code(sig->status)) { case GPG_ERR_NO_ERROR: - { - return g_strdup_printf(_("Good signature from %s (Trust: %s)."), + result = g_strdup_printf(_("Good signature from %s (Trust: %s)."), uname, get_validity_str(sig->validity)); - } + break; case GPG_ERR_SIG_EXPIRED: - return g_strdup_printf(_("Expired signature from %s."), uname); + result = g_strdup_printf(_("Expired signature from %s."), uname); + break; case GPG_ERR_KEY_EXPIRED: - return g_strdup_printf(_("Expired key from %s."), uname); + result = g_strdup_printf(_("Expired key from %s."), uname); + break; case GPG_ERR_BAD_SIGNATURE: - return g_strdup_printf(_("Bad signature from %s."), uname); + result = g_strdup_printf(_("Bad signature from %s."), uname); + break; case GPG_ERR_NO_PUBKEY: - return g_strdup(_("No key available to verify this signature.")); + result = g_strdup(_("No key available to verify this signature.")); + break; default: - return g_strdup(_("The signature has not been checked.")); + result = g_strdup(_("The signature has not been checked.")); + break; } - return g_strdup(_("Error")); + if (result == NULL) + result = g_strdup(_("Error")); + g_free(uname); + return result; } gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status) @@ -183,15 +209,22 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status) const gchar *keytype, *keyid, *uid; gpgme_get_key(ctx, sig->fpr, &key, 0); - user = key->uids; - keytype = gpgme_pubkey_algo_name(key->subkeys->pubkey_algo); - keyid = key->subkeys->keyid; + if (key) { + user = key->uids; + keytype = gpgme_pubkey_algo_name( + key->subkeys->pubkey_algo); + keyid = key->subkeys->keyid; + uid = user->uid; + } else { + keytype = "?"; + keyid = "?"; + uid = "?"; + } g_string_append_printf(siginfo, _("Signature made using %s key ID %s\n"), keytype, keyid); - uid = user->uid; switch (gpg_err_code(sig->status)) { case GPG_ERR_NO_ERROR: case GPG_ERR_KEY_EXPIRED: @@ -214,7 +247,7 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status) } if (sig->status != GPG_ERR_BAD_SIGNATURE) { gint j = 1; - user = user->next; + user = user ? user->next : NULL; while (user != NULL) { g_string_append_printf(siginfo, _(" aka \"%s\"\n"), @@ -224,7 +257,7 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status) } g_string_append_printf(siginfo, _("Primary key fingerprint: %s\n"), - sig->fpr); + sig ? sig->fpr: "?"); } g_string_append(siginfo, "\n"); -- 2.25.1