aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Uhlin <markus@nifty-networks.net>2026-03-06 02:01:04 +0100
committerMarkus Uhlin <markus@nifty-networks.net>2026-03-06 02:01:04 +0100
commitaaeeb3672b0cfd16428b2f52d1f97f55ac406c19 (patch)
tree7f77eb29323c913586bfbd8fd14816067142e97f
parent85b11df7bdeb801e8129e8f5cb6f8f84cbb54b2a (diff)
Improved mail_string_to_address()
-rw-r--r--FICS/utils.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/FICS/utils.c b/FICS/utils.c
index dd07693..029212f 100644
--- a/FICS/utils.c
+++ b/FICS/utils.c
@@ -221,25 +221,35 @@ PUBLIC int
mail_string_to_address(char *addr, char *subj, char *str)
{
FILE *fp;
- char com[1000];
+ char com[1000] = { '\0' };
+ int ret;
#ifdef SENDMAILPROG
- snprintf(com, sizeof com, "%s %s\n", SENDMAILPROG, SENDMAILPROG_ARGS);
+ ret = snprintf(com, sizeof com, "%s %s\n", SENDMAILPROG,
+ SENDMAILPROG_ARGS);
#else
- snprintf(com, sizeof com, "%s -s \"%s\" %s", MAILPROGRAM, subj, addr);
+ ret = snprintf(com, sizeof com, "%s -s \"%s\" %s", MAILPROGRAM, subj,
+ addr);
#endif
- fp = popen(com, "w");
- if (!fp)
+ if (ret < 0 || (size_t)ret >= sizeof com) {
+ warnx("%s: command too long", __func__);
+ return -1;
+ }
+
+ if ((fp = popen(com, "w")) == NULL)
return -1;
#ifdef SENDMAILPROG
- fprintf(fp, "To: %s\nSubject: %s\n%s", addr, subj, str);
+ ret = fprintf(fp, "To: %s\nSubject: %s\n%s", addr, subj, str);
#else
- fprintf(fp, "%s", str);
+ ret = fprintf(fp, "%s", str);
#endif
- pclose(fp);
+ if (ret < 0)
+ warnx("%s: fprintf() error", __func__);
+ if (pclose(fp) == -1)
+ warnx("%s: pclose() error", __func__);
return 0;
}