diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index 8c8021bc754c53de584c92bdac8d36dd42e6ef68..78e5f6c6a3e959b3962d50e54b0f37d2fe8919eb 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -2864,8 +2864,7 @@ static void ctrl_thread(void* arg) memcpy(&data_addr, &ftp.client_addr, ftp.client_addr_len); p = cmd + 5; SKIP_WHITESPACE(p); - if (strnicmp(cmd, "PORT ", 5) == 0) { - sscanf(p, "%u,%u,%u,%u,%hd,%hd", &h1, &h2, &h3, &h4, &p1, &p2); + if (strnicmp(cmd, "PORT ", 5) == 0 && sscanf(p, "%u,%u,%u,%u,%hd,%hd", &h1, &h2, &h3, &h4, &p1, &p2) == 6) { data_addr.in.sin_family = AF_INET; data_addr.in.sin_addr.s_addr = htonl((h1 << 24) | (h2 << 16) | (h3 << 8) | h4); data_port = (p1 << 8) | p2; @@ -2887,7 +2886,7 @@ static void ctrl_thread(void* arg) FIND_CHAR(p, delim); old_char = *p; *p = 0; - data_addr.in.sin_addr.s_addr = inet_addr(ap); + data_addr.in.sin_addr.s_addr = parseIPv4Address(ap); *p = old_char; if (*p) p++;