diff options
author | sobomax <sobomax@FreeBSD.org> | 2003-11-20 13:36:31 +0000 |
---|---|---|
committer | sobomax <sobomax@FreeBSD.org> | 2003-11-20 13:36:31 +0000 |
commit | dced91d8f3c525ce50e8b61814028cfd393c983f (patch) | |
tree | 742347ee853e00786b1f1c280a5b073443ff52c1 /libexec/tftpd | |
parent | 18a4a482e18cdff1b46c621b046c43d87e244ce3 (diff) | |
download | FreeBSD-src-dced91d8f3c525ce50e8b61814028cfd393c983f.zip FreeBSD-src-dced91d8f3c525ce50e8b61814028cfd393c983f.tar.gz |
Fix a bug which causes wrong filename being written into the syslog
in the case when client sends request with RFC2347 options.
Approved by: re
MFC After: 2 weeks
Diffstat (limited to 'libexec/tftpd')
-rw-r--r-- | libexec/tftpd/tftpd.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libexec/tftpd/tftpd.c b/libexec/tftpd/tftpd.c index bc24753..6435e8b 100644 --- a/libexec/tftpd/tftpd.c +++ b/libexec/tftpd/tftpd.c @@ -364,8 +364,9 @@ tftp(struct tftphdr *tp, int size) int i, first = 1, has_options = 0, ecode; struct formats *pf; char *filename, *mode, *option, *ccp; + char fnbuf[MAXPATHLEN]; - filename = cp = tp->th_stuff; + cp = tp->th_stuff; again: while (cp < buf + size) { if (*cp == '\0') @@ -376,6 +377,14 @@ again: nak(EBADOP); exit(1); } + i = cp - tp->th_stuff; + if (i >= sizeof(fnbuf)) { + nak(EBADOP); + exit(1); + } + memcpy(fnbuf, tp->th_stuff, i); + fnbuf[i] = '\0'; + filename = fnbuf; if (first) { mode = ++cp; first = 0; |