commit - 85b11df7bdeb801e8129e8f5cb6f8f84cbb54b2a
commit + aaeeb3672b0cfd16428b2f52d1f97f55ac406c19
blob - dd0769373661080db2dc7afbc283cabe9eb9193b
blob + 029212f7a74c7c552b9a6e4ff79a75e80ced1f93
--- FICS/utils.c
+++ FICS/utils.c
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;
}