talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 4ea8434b2ada3391b9258686cd0509cd598f5719
parent 508b56f72b63ed71e5d67a6650a598dd39384d68
Author: Colin Leroy <colin@colino.net>
Date:   Wed, 29 Aug 2012 14:31:35 +0000

2012-08-29 [colin]	3.8.1cvs41

	* src/plugins/pgpcore/sgpgme.c
		Set gpgme's locale to UTF-8. Fixes bug #2650,
		"segfault in pgp when gpgme_strerror() returns a non utf-8 string"

Diffstat:
MChangeLog | 6++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/plugins/pgpcore/sgpgme.c | 27+++++++++++++++++++++++++--
4 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,9 @@ +2012-08-29 [colin] 3.8.1cvs41 + + * src/plugins/pgpcore/sgpgme.c + Set gpgme's locale to UTF-8. Fixes bug #2650, + "segfault in pgp when gpgme_strerror() returns a non utf-8 string" + 2012-08-29 [colin] 3.8.1cvs40 * src/mainwindow.c diff --git a/PATCHSETS b/PATCHSETS @@ -4415,3 +4415,4 @@ ( cvs diff -u -r 1.395.2.449 -r 1.395.2.450 src/summaryview.c; ) > 3.8.1cvs38.patchset ( cvs diff -u -r 1.115.2.252 -r 1.115.2.253 src/main.c; ) > 3.8.1cvs39.patchset ( cvs diff -u -r 1.274.2.348 -r 1.274.2.349 src/mainwindow.c; cvs diff -u -r 1.94.2.237 -r 1.94.2.238 src/messageview.c; cvs diff -u -r 1.83.2.192 -r 1.83.2.193 src/mimeview.c; cvs diff -u -r 1.20.2.37 -r 1.20.2.38 src/mimeview.h; cvs diff -u -r 1.395.2.450 -r 1.395.2.451 src/summaryview.c; cvs diff -u -r 1.96.2.244 -r 1.96.2.245 src/textview.c; cvs diff -u -r 1.5.2.46 -r 1.5.2.47 src/gtk/menu.c; cvs diff -u -r 1.4.2.26 -r 1.4.2.27 src/gtk/menu.h; ) > 3.8.1cvs40.patchset +( cvs diff -u -r 1.1.2.72 -r 1.1.2.73 src/plugins/pgpcore/sgpgme.c; ) > 3.8.1cvs41.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=8 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=40 +EXTRA_VERSION=41 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/plugins/pgpcore/sgpgme.c b/src/plugins/pgpcore/sgpgme.c @@ -611,13 +611,36 @@ bail: void sgpgme_init() { + gchar *ctype_locale = NULL, *messages_locale = NULL; + gchar *ctype_utf8_locale = NULL, *messages_utf8_locale = NULL; + gpgme_engine_info_t engineInfo; if (gpgme_check_version("1.0.0")) { #ifdef LC_CTYPE - gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); + ctype_locale = g_strdup(setlocale(LC_CTYPE, NULL)); + if (strchr(ctype_locale, '.')) + *(strchr(ctype_locale, '.')) = '\0'; + else if (strchr(ctype_locale, '@')) + *(strchr(ctype_locale, '@')) = '\0'; + ctype_utf8_locale = g_strconcat(ctype_locale, ".UTF-8", NULL); + + gpgme_set_locale(NULL, LC_CTYPE, ctype_utf8_locale); + + g_free(ctype_utf8_locale); + g_free(ctype_locale); #endif #ifdef LC_MESSAGES - gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL)); + messages_locale = g_strdup(setlocale(LC_MESSAGES, NULL)); + if (strchr(messages_locale, '.')) + *(strchr(messages_locale, '.')) = '\0'; + else if (strchr(messages_locale, '@')) + *(strchr(messages_locale, '@')) = '\0'; + messages_utf8_locale = g_strconcat(messages_locale, ".UTF-8", NULL); + + gpgme_set_locale(NULL, LC_MESSAGES, messages_utf8_locale); + + g_free(messages_utf8_locale); + g_free(messages_locale); #endif if (!gpgme_get_engine_info(&engineInfo)) { while (engineInfo) {