Avoid buffer overflow when constructing filenames.

This commit is contained in:
Tim J. Robbins 2002-11-01 11:53:52 +00:00
parent a4ff0220ab
commit c26c35e7d9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=106293

View File

@ -47,6 +47,7 @@ static char sccsid[] = "@(#)mkstr.c 8.1 (Berkeley) 6/6/93";
__FBSDID("$FreeBSD$");
#include <err.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -95,6 +96,7 @@ int
main(int argc, char *argv[])
{
char addon = 0;
size_t namelen;
argc--, argv++;
if (argc > 1 && argv[0][0] == '-')
@ -109,11 +111,19 @@ main(int argc, char *argv[])
err(1, "%s", argv[0]);
inithash();
argc--, argv++;
strcpy(name, argv[0]);
np = name + strlen(name);
namelen = strlcpy(name, argv[0], sizeof(name));
if (namelen >= sizeof(name)) {
errno = ENAMETOOLONG;
err(1, "%s", argv[0]);
}
np = name + namelen;
argc--, argv++;
do {
strcpy(np, argv[0]);
if (strlcpy(np, argv[0], sizeof(name) - namelen) >=
sizeof(name) - namelen) {
errno = ENAMETOOLONG;
err(1, "%s%s", name, argv[0]);
}
if (freopen(name, "w", stdout) == NULL)
err(1, "%s", name);
if (freopen(argv[0], "r", stdin) == NULL)