ae503ac
Backported from https://github.com/proftpd/proftpd/commit/51b9f9bb6c6dd8ea
ae503ac
ae503ac
--- src/main.c
ae503ac
+++ src/main.c
ae503ac
@@ -481,6 +481,7 @@ int pr_cmd_read(cmd_rec **res) {
ae503ac
   static char *cmd_buf = NULL;
ae503ac
   char *cp;
ae503ac
   size_t cmd_buflen;
ae503ac
+  unsigned int too_large_count = 0;
ae503ac
 
ae503ac
   if (res == NULL) {
ae503ac
     errno = EINVAL;
ae503ac
@@ -505,8 +506,16 @@ int pr_cmd_read(cmd_rec **res) {
ae503ac
 
ae503ac
       if (errno == E2BIG) {
ae503ac
         /* The client sent a too-long command which was ignored; give
ae503ac
-         * them another chance?
ae503ac
+         * them a few more chances, with minor delays?
ae503ac
          */
ae503ac
+
ae503ac
+        too_large_count++;
ae503ac
+        pr_timer_usleep(250 * 1000);
ae503ac
+
ae503ac
+        if (too_large_count > 3) {
ae503ac
+          return -1;
ae503ac
+        }
ae503ac
+
ae503ac
         continue;
ae503ac
       }
ae503ac
 
ae503ac
--- src/netio.c
ae503ac
+++ src/netio.c
ae503ac
@@ -1037,6 +1037,7 @@ int pr_netio_read(pr_netio_stream_t *nst
ae503ac
       }
ae503ac
 
ae503ac
       nstrm->strm_errno = 0;
ae503ac
+      errno = EOF;
ae503ac
       break;
ae503ac
     }
ae503ac