]> granicus.if.org Git - neomutt/commitdiff
Add time_t conversion to fix gpgme segfault on OpenBSD.
authorKevin McCarthy <kevin@8t8.us>
Thu, 3 Sep 2015 01:11:28 +0000 (18:11 -0700)
committerKevin McCarthy <kevin@8t8.us>
Thu, 3 Sep 2015 01:11:28 +0000 (18:11 -0700)
time_t isn't the same size as gpgme_subkey_t->timestamp on OpenBSD.
Passing &subkey->timestamp to localtime was therefore passing an address
to the wrong size int and was causing a segfault.

Thanks to Hannes Wenzel for reporting the bug and providing a patch.

crypt-gpgme.c

index 060fc2f2ec5ac80f6570da3d0fc7865f4b560e29..4cac7a1135449c49406e55b04b1ef68b9efc39de 100644 (file)
@@ -2018,6 +2018,7 @@ static int pgp_gpgme_extract_keys (gpgme_data_t keydata, FILE** fp, int dryrun)
   char date[STRING];
   int more;
   int rc = -1;
+  time_t tt;
 
   if ((err = gpgme_new (&tmpctx)) != GPG_ERR_NO_ERROR)
   {
@@ -2081,7 +2082,8 @@ static int pgp_gpgme_extract_keys (gpgme_data_t keydata, FILE** fp, int dryrun)
       len = mutt_strlen (subkey->keyid);
       if (len > 8)
         shortid += len - 8;
-      strftime (date, sizeof (date), "%Y-%m-%d", localtime (&subkey->timestamp));
+      tt = subkey->timestamp;
+      strftime (date, sizeof (date), "%Y-%m-%d", localtime (&tt));
 
       if (!more)
         fprintf (*fp, "%s %5.5s %d/%8s %s %s\n", more ? "sub" : "pub",