diff options
| author | Markus Uhlin <markus@nifty-networks.net> | 2026-04-04 20:06:39 +0200 |
|---|---|---|
| committer | Markus Uhlin <markus@nifty-networks.net> | 2026-04-04 20:06:39 +0200 |
| commit | 4b479cd1897a37371a349d9b68edfa9909c852fc (patch) | |
| tree | 03d573cf95cd7a2e285d9fe6fd33692f4d7aacc6 /FICS | |
| parent | 24e3b1d5351a1f6fd3a22acf1c6edb385a50c443 (diff) | |
com_logons: handle snprintf truncation
Diffstat (limited to 'FICS')
| -rw-r--r-- | FICS/comproc.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/FICS/comproc.c b/FICS/comproc.c index 9adab01..9f3ab90 100644 --- a/FICS/comproc.c +++ b/FICS/comproc.c @@ -869,18 +869,21 @@ com_llogons(int p, param_list param) PUBLIC int com_logons(int p, param_list param) { - char fname[MAX_FILENAME_SIZE] = { '\0' }; + char fname[MAX_FILENAME_SIZE] = { '\0' }; + int ret = -1; if (param[0].type == TYPE_WORD) { - snprintf(fname, sizeof fname, "%s/player_data/%c/%s.%s", + ret = snprintf(fname, sizeof fname, "%s/player_data/%c/%s.%s", stats_dir, param[0].val.word[0], param[0].val.word, STATS_LOGONS); } else { - snprintf(fname, sizeof fname, "%s/player_data/%c/%s.%s", + ret = snprintf(fname, sizeof fname, "%s/player_data/%c/%s.%s", stats_dir, parray[p].login[0], parray[p].login, STATS_LOGONS); } - return plogins(p, fname); + + return (is_too_long(ret, sizeof fname) ? COM_FAILED : + plogins(p, fname)); } PRIVATE void |
