summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1997-02-15 16:34:47 +0000
committerjkh <jkh@FreeBSD.org>1997-02-15 16:34:47 +0000
commit7e5fec3559a2b5ec1cb962bf013f1c960f0182c2 (patch)
treeb687282f412d7ccf86a93b52a1cdf7967ae691d5 /usr.sbin/pkg_install
parent425611c5c7b22ed8dae71cc6bf0cb59784d176f2 (diff)
downloadFreeBSD-src-7e5fec3559a2b5ec1cb962bf013f1c960f0182c2.zip
FreeBSD-src-7e5fec3559a2b5ec1cb962bf013f1c960f0182c2.tar.gz
Prevent potential argument buffer overflow.
Diffstat (limited to 'usr.sbin/pkg_install')
-rw-r--r--usr.sbin/pkg_install/add/extract.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/usr.sbin/pkg_install/add/extract.c b/usr.sbin/pkg_install/add/extract.c
index a55a18a..2b227ff 100644
--- a/usr.sbin/pkg_install/add/extract.c
+++ b/usr.sbin/pkg_install/add/extract.c
@@ -56,10 +56,10 @@ extract_plist(char *home, Package *pkg)
maxargs = sysconf(_SC_ARG_MAX);
maxargs -= 64; /* some slop for the tar cmd text,
and sh -c */
- where_args = malloc(maxargs);
+ where_args = alloca(maxargs);
if (!where_args)
barf("can't get argument list space");
- perm_args = malloc(maxargs);
+ perm_args = alloca(maxargs);
if (!perm_args)
barf("can't get argument list space");
@@ -99,19 +99,18 @@ extract_plist(char *home, Package *pkg)
if (rename(p->name, try) == 0) {
/* try to add to list of perms to be changed,
and run in bulk. */
+ if (p->name[0] == '/' || TOOBIG(p->name))
+ PUSHOUT(Directory);
add_count = snprintf(&perm_args[perm_count],
maxargs - perm_count,
"%s ", p->name);
if (add_count > maxargs - perm_count)
barf("oops, miscounted strings!");
perm_count += add_count;
- if (p->name[0] == '/') {
- PUSHOUT(Directory);
- }
- } else {
+ }
+ else {
/* rename failed, try copying with a big tar command */
- if (p->name[0] == '/' ||
- TOOBIG(p->name) ||
+ if (p->name[0] == '/' || TOOBIG(p->name) ||
last_chdir != Directory) {
PUSHOUT(last_chdir);
last_chdir = Directory;
OpenPOWER on IntegriCloud