gpg: Use gpg_strerror_r for threadsafety
authorColin Walters <walters@verbum.org>
Mon, 22 Feb 2016 21:50:28 +0000 (16:50 -0500)
committerColin Walters <walters@verbum.org>
Mon, 22 Feb 2016 23:07:30 +0000 (18:07 -0500)
These APIs are rather painful...this is why GError exists.

src/libotutil/ot-gpg-utils.c

index aa5b48191f30598c32212d5f02374691f0953a7c..9414088d5470b8dcb22dcb16b5f6147aa959ab4a 100644 (file)
@@ -31,6 +31,7 @@ ot_gpgme_error_to_gio_error (gpgme_error_t   gpg_error,
                              GError        **error)
 {
   GIOErrorEnum errcode;
+  char errbuf[1024];
 
   /* XXX This list is incomplete.  Add cases as needed. */
 
@@ -42,9 +43,11 @@ ot_gpgme_error_to_gio_error (gpgme_error_t   gpg_error,
 
       /* special case - abort on out-of-memory */
       case GPG_ERR_ENOMEM:
+        (void) gpg_strerror_r (gpg_error, errbuf, sizeof (errbuf));
+        errbuf[sizeof(errbuf)-1] = '\0';
         g_error ("%s: %s",
                  gpgme_strsource (gpg_error),
-                 gpgme_strerror (gpg_error));
+                 errbuf);
 
       case GPG_ERR_INV_VALUE:
         errcode = G_IO_ERROR_INVALID_ARGUMENT;
@@ -55,9 +58,11 @@ ot_gpgme_error_to_gio_error (gpgme_error_t   gpg_error,
         break;
     }
 
+  (void) gpg_strerror_r (gpg_error, errbuf, sizeof (errbuf));
+  errbuf[sizeof(errbuf)-1] = '\0';
   g_set_error (error, G_IO_ERROR, errcode, "%s: %s",
                gpgme_strsource (gpg_error),
-               gpgme_strerror (gpg_error));
+               errbuf);
 }
 
 gboolean