diff options
| author | Markus Uhlin <markus@nifty-networks.net> | 2026-04-08 01:36:12 +0200 |
|---|---|---|
| committer | Markus Uhlin <markus@nifty-networks.net> | 2026-04-08 01:36:12 +0200 |
| commit | 417de0bdfedecc2b5d9c406eb83a9d22d479c847 (patch) | |
| tree | b3278d6c0d21f3689b9ad1e022fd28b47c048c2d /FICS/comproc.c | |
| parent | 2e75876b07007e447c2eed5e944a27fc7815073e (diff) | |
Handle snprintf() truncation
Diffstat (limited to 'FICS/comproc.c')
| -rw-r--r-- | FICS/comproc.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/FICS/comproc.c b/FICS/comproc.c index e7fb4fa..25e3557 100644 --- a/FICS/comproc.c +++ b/FICS/comproc.c @@ -1942,7 +1942,7 @@ com_mailsource(int p, param_list param) char *iwant; char fname[MAX_FILENAME_SIZE] = { '\0' }; char subj[120] = { '\0' }; - int count; + int count, ret; if (!parray[p].registered) { pprintf(p, "Only registered people can use the mailsource " @@ -1964,10 +1964,15 @@ com_mailsource(int p, param_list param) "server %s: %s", fics_hostname, *buffer); - snprintf(fname, sizeof fname, "%s/%s", + ret = snprintf(fname, sizeof fname, "%s/%s", source_dir, *buffer); + if (is_too_long(ret, sizeof fname)) { + warnx("%s: too long filename", __func__); + return COM_FAILED; + } + mail_file_to_user(p, subj, fname); pprintf(p, "Source file %s sent to %s\n", *buffer, @@ -2004,7 +2009,7 @@ com_mailhelp(int p, param_list param) char *iwant; char fname[MAX_FILENAME_SIZE] = { '\0' }; char subj[120] = { '\0' }; - int count; + int count, ret; int lang = parray[p].language; if (!parray[p].registered) { @@ -2042,10 +2047,15 @@ com_mailhelp(int p, param_list param) "server %s: %s", fics_hostname, *buffer); - snprintf(fname, sizeof fname, "%s/%s", + ret = snprintf(fname, sizeof fname, "%s/%s", help_dir[lang], *buffer); + if (is_too_long(ret, sizeof fname)) { + warnx("%s: too long filename", __func__); + return COM_FAILED; + } + mail_file_to_user(p, subj, fname); pprintf(p, "Help file %s sent to %s\n", *buffer, |
