[PATCH 2/3] ftpd: Deal with too long command lines

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Oct 30 11:09:26 UTC 2018


Update #3530.
---
 cpukit/ftpd/ftpd.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/cpukit/ftpd/ftpd.c b/cpukit/ftpd/ftpd.c
index eb87612bb5..8aef440a72 100644
--- a/cpukit/ftpd/ftpd.c
+++ b/cpukit/ftpd/ftpd.c
@@ -1908,6 +1908,7 @@ session(rtems_task_argument arg)
       {
         char buf[FTPD_BUFSIZE];
         char *cmd, *opts, *args;
+        size_t len;
 
         if (fgets(buf, FTPD_BUFSIZE, info->ctrl_fp) == NULL)
         {
@@ -1915,6 +1916,25 @@ session(rtems_task_argument arg)
           break;
         }
 
+        len = strlen(buf);
+
+        if (len == 0)
+          continue;
+
+        if (buf[len - 1] != '\n')
+        {
+          send_reply(info, 501, "Command line too long.");
+
+          /*
+           * We could also try to continue here, however, discarding the rest
+           * of the current command line and figuring out when the next command
+           * starts with fgets() is not that easy.  It would be better to avoid
+           * the FILE stream and just use the socket directly with send() and
+           * recv().
+           */
+          break;
+        }
+
         split_command(buf, &cmd, &opts, &args);
 
         if (!strcmp("QUIT", cmd))
-- 
2.16.4



More information about the devel mailing list