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);