Make sure we don't overflow the path buffer. Exit if we do.

Obtained from or inspired by: A similar change in OpenBSD by theo
This commit is contained in:
Warner Losh 1998-06-09 03:39:38 +00:00
parent e00e592a7a
commit 8a20f85ccb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=36785

View File

@ -45,7 +45,7 @@ static char const copyright[] =
static char sccsid[] = "@(#)mv.c 8.2 (Berkeley) 4/2/94"; static char sccsid[] = "@(#)mv.c 8.2 (Berkeley) 4/2/94";
#endif #endif
static const char rcsid[] = static const char rcsid[] =
"$Id: mv.c,v 1.18 1998/05/15 06:25:17 charnier Exp $"; "$Id: mv.c,v 1.19 1998/05/25 22:44:16 steve Exp $";
#endif /* not lint */ #endif /* not lint */
#include <sys/param.h> #include <sys/param.h>
@ -80,7 +80,7 @@ main(argc, argv)
register char *p, *endp; register char *p, *endp;
struct stat sb; struct stat sb;
int ch; int ch;
char path[MAXPATHLEN + 1]; char path[MAXPATHLEN];
while ((ch = getopt(argc, argv, "fi")) != -1) while ((ch = getopt(argc, argv, "fi")) != -1)
switch (ch) { switch (ch) {
@ -112,6 +112,8 @@ main(argc, argv)
} }
/* It's a directory, move each file into it. */ /* It's a directory, move each file into it. */
if (strlen(argv[argc - 1]) > sizeof(path) - 1)
errx(1, "%s: destination pathname too long", *argv);
(void)strcpy(path, argv[argc - 1]); (void)strcpy(path, argv[argc - 1]);
baselen = strlen(path); baselen = strlen(path);
endp = &path[baselen]; endp = &path[baselen];