summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authordwmalone <dwmalone@FreeBSD.org>2002-01-05 20:13:01 +0000
committerdwmalone <dwmalone@FreeBSD.org>2002-01-05 20:13:01 +0000
commit7bc655e78562e9bf86dc1e81ca7c633b77f2eb5b (patch)
tree1210bafc843439829764b1d0b7d5216d02bbb96a /libexec
parent497b03717ce7942264133e7c161fb779f7440fe4 (diff)
downloadFreeBSD-src-7bc655e78562e9bf86dc1e81ca7c633b77f2eb5b.zip
FreeBSD-src-7bc655e78562e9bf86dc1e81ca7c633b77f2eb5b.tar.gz
Be more careful about freeing memory after parsing commands.
Hiroyuki YAMAMORI gave a patch for the EPRT command in the PR below. Problems with the rest of the patch are my fault. PR: 33268 Reviewed by: iedowse, sheldonh
Diffstat (limited to 'libexec')
-rw-r--r--libexec/ftpd/ftpcmd.y26
1 files changed, 19 insertions, 7 deletions
diff --git a/libexec/ftpd/ftpcmd.y b/libexec/ftpd/ftpcmd.y
index 381d87c..687e3a0 100644
--- a/libexec/ftpd/ftpcmd.y
+++ b/libexec/ftpd/ftpcmd.y
@@ -102,7 +102,7 @@ static int cmd_type;
static int cmd_form;
static int cmd_bytesz;
char cbuf[512];
-char *fromname;
+char *fromname = (char *) 0;
extern int epsvall;
@@ -151,6 +151,8 @@ cmd_list
: /* empty */
| cmd_list cmd
{
+ if (fromname)
+ free(fromname);
fromname = (char *) 0;
restart_point = (off_t) 0;
}
@@ -313,7 +315,8 @@ cmd
if (port_check_v6("EPRT") == 1)
goto eprt_done;
#endif
- eprt_done:;
+ eprt_done:
+ free($4);
}
| PASV check_login CRLF
{
@@ -559,6 +562,7 @@ cmd
help(sitetab, (char *) 0);
} else
help(cmdtab, $3);
+ free($3);
}
| NOOP CRLF
{
@@ -595,6 +599,7 @@ cmd
| SITE SP HELP SP STRING CRLF
{
help(sitetab, $5);
+ free($5);
}
| SITE SP MDFIVE check_login SP pathname CRLF
{
@@ -607,6 +612,8 @@ cmd
else
perror_reply(550, $6);
}
+ if ($6)
+ free($6);
}
| SITE SP UMASK check_login CRLF
{
@@ -751,19 +758,24 @@ cmd
rcmd
: RNFR check_login_ro SP pathname CRLF
{
- char *renamefrom();
-
restart_point = (off_t) 0;
if ($2 && $4) {
- fromname = renamefrom($4);
- if (fromname == (char *) 0 && $4) {
+ if (fromname)
+ free(fromname);
+ fromname = (char *) 0;
+ if (renamefrom($4))
+ fromname = $4;
+ else
free($4);
- }
+ } else if ($4) {
+ free($4);
}
}
| REST check_login SP byte_size CRLF
{
if ($2) {
+ if (fromname)
+ free(fromname);
fromname = (char *) 0;
restart_point = $4; /* XXX $4 is only "int" */
reply(350, "Restarting at %qd. %s",
OpenPOWER on IntegriCloud