2012-08-29 [colin] 3.8.1cvs41
authorColin Leroy <colin@colino.net>
Wed, 29 Aug 2012 14:31:35 +0000 (14:31 +0000)
committerColin Leroy <colin@colino.net>
Wed, 29 Aug 2012 14:31:35 +0000 (14:31 +0000)
* 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"

ChangeLog
PATCHSETS
configure.ac
src/plugins/pgpcore/sgpgme.c

index da96360..0e8300d 100644 (file)
--- 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
 2012-08-29 [colin]     3.8.1cvs40
 
        * src/mainwindow.c
index 385719d..2968480 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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.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
index 3c0a53d..9b8b4cf 100644 (file)
@@ -12,7 +12,7 @@ MINOR_VERSION=8
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=40
+EXTRA_VERSION=41
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 52f6d36..6929165 100644 (file)
@@ -611,13 +611,36 @@ bail:
 
 void sgpgme_init()
 {
 
 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_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
 #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) {
 #endif
                if (!gpgme_get_engine_info(&engineInfo)) {
                        while (engineInfo) {