Thanks to Alejandro Colomar for pointing out that it would be better
to use a safer sprintf() alternative in the previous commit.

This fixes the calls in mutt_idna.c, as well as the rest of the
codebase where I found a malloc() followed by a sprintf().
---
This is based on top of the previous patchset updating mutt_idna.c.

I haven't pushed that patchset yet, to give more time for comments.

 curs_lib.c  | 4 ++--
 init.c      | 6 ++----
 mutt_idna.c | 9 +++------
 rfc822.c    | 3 +--
 send.c      | 6 ++----
 5 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/curs_lib.c b/curs_lib.c
index e9795558..5c93cbb0 100644
--- a/curs_lib.c
+++ b/curs_lib.c
@@ -1138,9 +1138,9 @@ static int _enter_fname(const char *prompt, BUFFER 
*fname, int flags,
   }
   else
   {
-    char *pc = safe_malloc(mutt_strlen(prompt) + 3);
+    char *pc;
 
-    sprintf(pc, "%s: ", prompt);       /* __SPRINTF_CHECKED__ */
+    safe_asprintf(&pc, "%s: ", prompt);
     mutt_unget_event(ch.op ? 0 : ch.ch, ch.op ? ch.op : 0);
 
     mutt_buffer_increase_size(fname, LONG_STRING);
diff --git a/init.c b/init.c
index 7f4b73b5..95425c83 100644
--- a/init.c
+++ b/init.c
@@ -4012,13 +4012,11 @@ void mutt_init(int skip_sys_rc, LIST *commands)
     if (domain)
     {
       /* we have a compile-time domain name, use that for Fqdn */
-      Fqdn = safe_malloc(mutt_strlen(domain) + mutt_strlen(Hostname) + 2);
-      sprintf(Fqdn, "%s.%s", NONULL(Hostname), domain);        /* 
__SPRINTF_CHECKED__ */
+      safe_asprintf(&Fqdn, "%s.%s", NONULL(Hostname), domain);
     }
     else if (!(getdnsdomainname(buffer)))
     {
-      Fqdn = safe_malloc(mutt_buffer_len(buffer) + mutt_strlen(Hostname) + 2);
-      sprintf(Fqdn, "%s.%s", NONULL(Hostname), mutt_b2s(buffer));     /* 
__SPRINTF_CHECKED__ */
+      safe_asprintf(&Fqdn, "%s.%s", NONULL(Hostname), mutt_b2s(buffer));
     }
     else
       /*
diff --git a/mutt_idna.c b/mutt_idna.c
index 6bfd3b88..0b3b61e3 100644
--- a/mutt_idna.c
+++ b/mutt_idna.c
@@ -115,8 +115,7 @@ static char *intl_to_utf8(char *orig_user, char 
*orig_domain)
   }
 #endif
 
-  mailbox = safe_malloc(mutt_strlen(utf8_user) + mutt_strlen(utf8_domain) + 2);
-  sprintf(mailbox, "%s@%s", NONULL(utf8_user), NONULL(utf8_domain)); /* 
__SPRINTF_CHECKED__ */
+  safe_asprintf(&mailbox, "%s@%s", NONULL(utf8_user), NONULL(utf8_domain));
 
 cleanup:
   FREE(&utf8_domain);
@@ -211,8 +210,7 @@ static char *intl_to_local(char *orig_user, char 
*orig_domain, int flags)
     }
   }
 
-  mailbox = safe_malloc(mutt_strlen(local_user) + mutt_strlen(local_domain) + 
2);
-  sprintf(mailbox, "%s@%s", NONULL(local_user), NONULL(local_domain)); /* 
__SPRINTF_CHECKED__ */
+  safe_asprintf(&mailbox, "%s@%s", NONULL(local_user), NONULL(local_domain));
 
 cleanup:
   FREE(&local_user);
@@ -250,8 +248,7 @@ static char *local_to_intl(char *user, char *domain)
   }
 #endif /* defined(HAVE_LIBIDN) || defined(HAVE_LIBIDN2) */
 
-  mailbox = safe_malloc(mutt_strlen(intl_user) + mutt_strlen(intl_domain) + 2);
-  sprintf(mailbox, "%s@%s", NONULL(intl_user), NONULL(intl_domain)); /* 
__SPRINTF_CHECKED__ */
+  safe_asprintf(&mailbox, "%s@%s", NONULL(intl_user), NONULL(intl_domain));
 
 cleanup:
   FREE(&intl_user);
diff --git a/rfc822.c b/rfc822.c
index bfc1bb49..98230d49 100644
--- a/rfc822.c
+++ b/rfc822.c
@@ -680,8 +680,7 @@ void rfc822_qualify(ADDRESS *addr, const char *host)
   for (; addr; addr = addr->next)
     if (!addr->group && addr->mailbox && strchr(addr->mailbox, '@') == NULL)
     {
-      p = safe_malloc(mutt_strlen(addr->mailbox) + mutt_strlen(host) + 2);
-      sprintf(p, "%s@%s", addr->mailbox, host);        /* __SPRINTF_CHECKED__ 
*/
+      safe_asprintf(&p, "%s@%s", addr->mailbox, host);
       FREE(&addr->mailbox);
       addr->mailbox = p;
     }
diff --git a/send.c b/send.c
index 64ea40c0..7554967e 100644
--- a/send.c
+++ b/send.c
@@ -771,8 +771,7 @@ void mutt_make_misc_reply_headers(ENVELOPE *env, CONTEXT 
*ctx,
   if (curenv->real_subj)
   {
     FREE(&env->subject);
-    env->subject = safe_malloc(mutt_strlen(curenv->real_subj) + 5);
-    sprintf(env->subject, "Re: %s", curenv->real_subj);        /* 
__SPRINTF_CHECKED__ */
+    safe_asprintf(&env->subject, "Re: %s", curenv->real_subj);
   }
   else if (!env->subject)
     env->subject = safe_strdup("Re:");
@@ -1117,8 +1116,7 @@ ADDRESS *mutt_default_from(void)
   else if (option(OPTUSEDOMAIN))
   {
     adr = rfc822_new_address();
-    adr->mailbox = safe_malloc(mutt_strlen(Username) + mutt_strlen(fqdn) + 2);
-    sprintf(adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn));    /* 
__SPRINTF_CHECKED__ */
+    safe_asprintf(&adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn));
   }
   else
   {
-- 
2.54.0

Reply via email to