Blob Blame History Raw
Index: src/cmd.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/src/cmd.c,v
retrieving revision 1.8
diff -u -r1.8 cmd.c
--- src/cmd.c	23 May 2011 21:22:24 -0000	1.8
+++ src/cmd.c	16 Nov 2011 19:57:43 -0000
@@ -245,8 +245,13 @@
   }
 
   res = pr_table_get(cmd->notes, "displayable-str", NULL);
-  if (res)
+  if (res) {
+    if (str_len != NULL) {
+      *str_len = strlen(res);
+    }
+
     return res;
+  }
 
   argc = cmd->argc;
   argv = cmd->argv;
Index: src/main.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/src/main.c,v
retrieving revision 1.437
diff -u -r1.437 main.c
--- src/main.c	9 Nov 2011 17:32:35 -0000	1.437
+++ src/main.c	16 Nov 2011 19:57:43 -0000
@@ -318,7 +318,18 @@
 
         /* The client has successfully authenticated... */
         if (session.user) {
-          char *args = memchr(cmdargstr, ' ', cmdargstrlen);
+          char *args = NULL;
+
+          /* Be defensive, and check whether cmdargstrlen has a value.
+           * If it's zero, assume we need to use strchr(3), rather than
+           * memchr(2); see Bug#3714.
+           */
+          if (cmdargstrlen > 0) {
+            args = memchr(cmdargstr, ' ', cmdargstrlen);
+
+          } else {
+            args = strchr(cmdargstr, ' ');
+          }
 
           pr_scoreboard_entry_update(session.pid,
             PR_SCORE_CMD, "%s", cmd->argv[0], NULL, NULL);