commit aaeeb3672b0cfd16428b2f52d1f97f55ac406c19 from: Markus Uhlin date: Fri Mar 6 01:01:04 2026 UTC Improved mail_string_to_address() commit - 85b11df7bdeb801e8129e8f5cb6f8f84cbb54b2a commit + aaeeb3672b0cfd16428b2f52d1f97f55ac406c19 blob - dd0769373661080db2dc7afbc283cabe9eb9193b blob + 029212f7a74c7c552b9a6e4ff79a75e80ced1f93 --- FICS/utils.c +++ 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; }