From c6d18589a6d341d43eb2b50c664cabd6f27fa8b1 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Thu, 13 Apr 2023 09:26:27 +0200 Subject: [PATCH] genlistfqdn: avoid useless memory allocation While here lookup for '@' from the end (reverse) --- include/strgen.h | 2 +- src/send_mail.c | 16 ++++------------ src/strgen.c | 9 +++++---- tests/mlmmj.c | 4 ++-- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/include/strgen.h b/include/strgen.h index a707e115..8f63a670 100644 --- a/include/strgen.h +++ b/include/strgen.h @@ -29,7 +29,7 @@ char *random_str(void); char *random_plus_addr(const char *addr); char *genlistname(const char *listaddr); -char *genlistfqdn(const char *listaddr); +const char *genlistfqdn(const char *listaddr); char *hostnamestr(void); char *mydirname(const char *path); const char *mybasename(const char *path); diff --git a/src/send_mail.c b/src/send_mail.c index b5a6f0b9..9d3c2489 100644 --- a/src/send_mail.c +++ b/src/send_mail.c @@ -460,8 +460,8 @@ get_bounce_from_adr(const char *recipient, struct ml *ml, { char *bounceaddr, *myrecipient; char *a = NULL, *mymailfilename; - char *staticbounceaddr, *staticbounceaddr_localpart; - char *staticbounceaddr_domain; + char *staticbounceaddr, *staticbounceaddr_localpart = NULL; + const char *staticbounceaddr_domain = NULL; mymailfilename = xstrdup(mailfilename); @@ -474,9 +474,6 @@ get_bounce_from_adr(const char *recipient, struct ml *ml, if (staticbounceaddr) { staticbounceaddr_localpart = genlistname(staticbounceaddr); staticbounceaddr_domain = genlistfqdn(staticbounceaddr); - } else { - staticbounceaddr_localpart = NULL; - staticbounceaddr_domain = NULL; } if (staticbounceaddr) { @@ -486,7 +483,6 @@ get_bounce_from_adr(const char *recipient, struct ml *ml, free(staticbounceaddr); free(staticbounceaddr_localpart); - free(staticbounceaddr_domain); } else { xasprintf(&bounceaddr, "%s%sbounces-%d-%s@%s", ml->name, ml->delim, index, myrecipient, ml->fqdn); @@ -505,8 +501,8 @@ bounce_from_adr(const char *recipient, const char *listadr, { char *bounceaddr, *myrecipient, *mylistadr; char *listdomain, *a = NULL, *mymailfilename; - char *staticbounceaddr, *staticbounceaddr_localpart; - char *staticbounceaddr_domain; + char *staticbounceaddr, *staticbounceaddr_localpart = NULL; + const char *staticbounceaddr_domain = NULL; int index; mymailfilename = xstrdup(mailfilename); @@ -532,9 +528,6 @@ bounce_from_adr(const char *recipient, const char *listadr, if (staticbounceaddr) { staticbounceaddr_localpart = genlistname(staticbounceaddr); staticbounceaddr_domain = genlistfqdn(staticbounceaddr); - } else { - staticbounceaddr_localpart = NULL; - staticbounceaddr_domain = NULL; } if (staticbounceaddr) { @@ -544,7 +537,6 @@ bounce_from_adr(const char *recipient, const char *listadr, free(staticbounceaddr); free(staticbounceaddr_localpart); - free(staticbounceaddr_domain); } else { xasprintf(&bounceaddr, "%s%sbounces-%d-%s@%s", mylistadr, listdelim, index, myrecipient, listdomain); diff --git a/src/strgen.c b/src/strgen.c index ee5093c0..b205d148 100644 --- a/src/strgen.c +++ b/src/strgen.c @@ -57,13 +57,14 @@ char *genlistname(const char *listaddr) return (xstrndup(listaddr, atsign - listaddr)); } -char *genlistfqdn(const char *listaddr) +const char *genlistfqdn(const char *listaddr) { const char *atsign; - atsign = strchr(listaddr, '@'); - MY_ASSERT(atsign); - return (xstrdup(atsign + 1)); + atsign = strrchr(listaddr, '@'); + if (atsign == NULL) + return (NULL); + return (atsign + 1); } char *hostnamestr(void) diff --git a/tests/mlmmj.c b/tests/mlmmj.c index 1825cc28..d44dd649 100644 --- a/tests/mlmmj.c +++ b/tests/mlmmj.c @@ -880,12 +880,12 @@ ATF_TC_BODY(genlistname, tc) ATF_TC_BODY(genlistfqdn, tc) { - char *ret; + const char *ret; ret = genlistfqdn("plop@bla"); ATF_REQUIRE_STREQ(ret, "bla"); ret = genlistfqdn("plop@bla@meh"); - ATF_REQUIRE_STREQ(ret, "bla@meh"); + ATF_REQUIRE_STREQ(ret, "meh"); } ATF_TC_BODY(smtp, tc) -- 2.47.2