Date: Mon, 20 Jan 1997 17:33:45 +0100 (MET) From: fj@tfs.com To: FreeBSD-gnats-submit@freebsd.org Subject: bin/2536: restore dies in interactive mode Message-ID: <199701201633.RAA28438@schizo.dk.tfs.com> Resent-Message-ID: <199701201640.IAA10693@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2536
>Category: bin
>Synopsis: restore dies in interactive mode
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Jan 20 08:40:01 PST 1997
>Last-Modified:
>Originator: Flemming Jacobsen
>Organization:
>Release: FreeBSD 2.2-RELEASE i386
>Environment:
FreeBSD 2.2, as built by PHK 970114.
>Description:
In interactive mode. Whenever ls {directory} or cd {directory}
is excecuted restore aborts with:
canonname: not enough bufferspace.
>How-To-Repeat:
see above.
>Fix:
Index: interactive.c
===================================================================
RCS file: /home/ncvs/src/sbin/restore/interactive.c,v
retrieving revision 1.1.1.1.8.1
diff -u -r1.1.1.1.8.1 interactive.c
--- interactive.c 1997/01/12 22:02:44 1.1.1.1.8.1
+++ interactive.c 1997/01/20 16:20:32
@@ -82,7 +82,7 @@
static char *copynext __P((char *, char *));
static int fcmp __P((const void *, const void *));
static void formatf __P((struct afile *, int));
-static void getcmd __P((char *, char *, char *, struct arglist *));
+static void getcmd __P((char *, char *, char *, int, struct arglist *));
struct dirent *glob_readdir __P((RST_DIR *dirp));
static int glob_stat __P((const char *, struct stat *));
static void mkentry __P((struct direct *, struct afile *));
@@ -121,7 +121,7 @@
volno = 0;
}
runshell = 1;
- getcmd(curdir, cmd, name, &arglist);
+ getcmd(curdir, cmd, name,sizeof(name), &arglist);
switch (cmd[0]) {
/*
* Add elements to the extraction list.
@@ -300,9 +300,10 @@
* eliminate any embedded ".." components.
*/
static void
-getcmd(curdir, cmd, name, ap)
+getcmd(curdir, cmd, name, size, ap)
char *curdir, *cmd, *name;
struct arglist *ap;
+ int size;
{
register char *cp;
static char input[BUFSIZ];
@@ -357,7 +358,7 @@
* If it is an absolute pathname, canonicalize it and return it.
*/
if (rawname[0] == '/') {
- canon(rawname, name, sizeof(name));
+ canon(rawname, name, size);
} else {
/*
* For relative pathnames, prepend the current directory to
@@ -366,7 +367,7 @@
(void) strcpy(output, curdir);
(void) strcat(output, "/");
(void) strcat(output, rawname);
- canon(output, name, sizeof(name));
+ canon(output, name, size);
}
if (glob(name, GLOB_ALTDIRFUNC, NULL, &ap->glob) < 0)
fprintf(stderr, "%s: out of memory\n", ap->cmd);
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701201633.RAA28438>
