diff --git a/sys/src/cmd/tapefs/tarfs.c b/sys/src/cmd/tapefs/tarfs.c index 96271a866..c58db4bbb 100644 --- a/sys/src/cmd/tapefs/tarfs.c +++ b/sys/src/cmd/tapefs/tarfs.c @@ -144,10 +144,12 @@ populate(char *name) } f.mode &= DMDIR | 0777; - /* make file name safe and canonical */ + /* make file name safe, canonical and free of . and .. */ while (fname[0] == '/') /* don't allow absolute paths */ ++fname; cleanname(fname); + while (strncmp(fname, "../", 3) == 0) + fname += 3; /* reject links */ linkflg = hp->linkflag == LF_SYMLINK1 ||