aboutsummaryrefslogtreecommitdiffstats
path: root/FICS
diff options
context:
space:
mode:
authorMarkus Uhlin <markus@nifty-networks.net>2026-03-07 11:53:29 +0100
committerMarkus Uhlin <markus@nifty-networks.net>2026-03-07 11:53:29 +0100
commit7284b84bc4429bed1dd6c626ac2b9971b5ce4484 (patch)
tree1be1b1b44ceef443a17c8233f8bb2730f3028750 /FICS
parent7933bd395a7575dd9fbf6f06e963df5ee2aaf570 (diff)
Improved pcommand()
Diffstat (limited to 'FICS')
-rw-r--r--FICS/utils.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/FICS/utils.c b/FICS/utils.c
index e6a0f2b..753a6ca 100644
--- a/FICS/utils.c
+++ b/FICS/utils.c
@@ -338,23 +338,28 @@ mail_file_to_user(int p, char *subj, char *fname)
PUBLIC int
pcommand(int p, char *comstr, ...)
{
- char tmp[MAX_LINE_SIZE] = { '\0' };
- int current_socket = parray[p].socket;
- int retval;
- va_list ap;
+ char tmp[MAX_LINE_SIZE] = { '\0' };
+ int current_socket = parray[p].socket;
+ int ret[2];
+ va_list ap;
va_start(ap, comstr);
- vsnprintf(tmp, sizeof tmp, comstr, ap);
+ ret[0] = vsnprintf(tmp, sizeof tmp, comstr, ap);
va_end(ap);
- retval = process_input(current_socket, tmp);
+ if (ret[0] < 0 || (size_t)ret[0] >= sizeof tmp) {
+ warnx("%s: command string too long: p=%d", __func__, p);
+ return COM_FAILED;
+ }
- if (retval == COM_LOGOUT) {
+ ret[1] = process_input(current_socket, tmp);
+
+ if (ret[1] == COM_LOGOUT) {
process_disconnection(current_socket);
net_close_connection(current_socket);
}
- return retval;
+ return ret[1];
}
PUBLIC void