some fixes, make mutt_decode_save_attachment coherent (always closes the
[apps/madmutt.git] / lib-crypt / crypt-gpgme.c
index 906e56e..445dc77 100644 (file)
@@ -1012,7 +1012,7 @@ static void show_fingerprint (gpgme_key_t key, STATE * state)
   is_pgp = (key->protocol == GPGME_PROTOCOL_OpenPGP);
 
   bufsize = m_strlen(prefix) + m_strlen(s) * 4 + 2;
-  buf = xmalloc(bufsize);
+  buf = p_new(char, bufsize);
   m_strcpy(buf, bufsize, prefix);
   p = buf + m_strlen(buf);
   if (is_pgp && m_strlen(s) == 40) {     /* PGP v4 style formatted. */
@@ -1614,6 +1614,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b,
   char tempfile[_POSIX_PATH_MAX];
   char buf[HUGE_STRING];
   FILE *tfp;
+  int tempfd;
 
   short sgn = 0;
   short enc = 0;
@@ -1624,13 +1625,13 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b,
   if (tagged_only && !b->tagged)
     return 0;
 
-  mutt_mktemp (tempfile);
-  if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) {
+  tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+  if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) {
     unlink (tempfile);
     return 0;
   }
 
-  if ((tfp = fopen (tempfile, "r")) == NULL) {
+  if ((tfp = fopen(tempfile, "r")) == NULL) {
     unlink (tempfile);
     return 0;
   }
@@ -2309,7 +2310,7 @@ crypt_entry_fmt (char *dest, ssize_t destlen, char op,
   }
 
   if (flags & M_FORMAT_OPTIONAL)
-    m_strformat(dest, destlen, optional ? ifstr: elstr,
+    m_strformat(dest, destlen, 0, optional ? ifstr: elstr,
                 mutt_attach_fmt, data, 0);
   return src;
 }
@@ -2323,7 +2324,7 @@ static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num)
   entry.key = key_table[num];
   entry.num = num + 1;
 
-  m_strformat(s, l, PgpEntryFormat, crypt_entry_fmt, &entry,
+  m_strformat(s, l, COLS - SW, PgpEntryFormat, crypt_entry_fmt, &entry,
               option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0);
 }
 
@@ -2516,7 +2517,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array,
     if (!n || (n & 1))
       return NULL;              /* empty or odd number of digits */
     n /= 2;
-    p = xmalloc(n + 1);
+    p = p_new(unsigned char, n + 1);
     array->value = (char *) p;
     for (s1 = string; n; s1 += 2, n--)
       *p++ = xtoi_2 (s1);
@@ -2546,7 +2547,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array,
         n++;
     }
 
-    p = xmalloc(n + 1);
+    p = p_new(unsigned char, n + 1);
     array->value = (char *) p;
     for (s = string; n; s++, n--) {
       if (*s == '\\') {