Index: include/sendmail.c =================================================================== --- include/sendmail.c +++ include/sendmail.c @@ -110,16 +110,24 @@ int get_mailfrom(char **buffer, const char *mailfrom) { size_t size; - *buffer = strdup("MAIL FROM: <"); + static const char MAIL_FROM[] = "MAIL FROM: <"; + const char *src; + char *dst; + const size_t MAIL_FROM_len = sizeof (MAIL_FROM) - 1; + *buffer = malloc (MAIL_FROM_len + strlen(mailfrom) + 2); if (*buffer == NULL) return 0; - size = strlen("MAIL FROM: <") + strlen(mailfrom) + 2; - if (!saferealloc((void **)buffer, *buffer, size * sizeof(char))) { - FREE(*buffer); - return 0; - } - strlcat(*buffer, mailfrom, size * sizeof(char)); - strlcat(*buffer, ">", size * sizeof(char)); + src = strchr (mailfrom, '<'); + if (!src) + src = mailfrom; + else + src++; + memcpy (*buffer, MAIL_FROM, MAIL_FROM_len); + dst = *buffer + MAIL_FROM_len; + while (*src != '\0' && *src != '>') + *dst++ = *src++; + *dst++ = '>'; + *dst = '\0'; return 1; }