mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-08 03:44:13 -04:00
65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
$NetBSD: patch-ad,v 1.2 2010/09/28 17:50:07 tnn Exp $
|
|
|
|
--- star/extract.c.orig 2002-05-02 20:02:41.000000000 +0000
|
|
+++ star/extract.c
|
|
@@ -92,6 +92,7 @@ EXPORT int xt_file __PR((FINFO * info,
|
|
int (*)(void *, char *, int),
|
|
void *arg, int amt, char* text));
|
|
EXPORT void skip_slash __PR((FINFO * info));
|
|
+LOCAL BOOL has_dotdot __PR((char *name));
|
|
|
|
EXPORT void
|
|
extract(vhname)
|
|
@@ -152,6 +153,12 @@ extract(vhname)
|
|
if (is_symlink(&finfo) && same_symlink(&finfo)) {
|
|
continue;
|
|
}
|
|
+ if (!interactive && has_dotdot(finfo.f_name)) {
|
|
+ errmsgno(EX_BAD, "'%s' contains '..', skipping ...\n",
|
|
+ finfo.f_name);
|
|
+ void_file(&finfo);
|
|
+ return;
|
|
+ }
|
|
if (interactive && !ia_change(ptb, &finfo)) {
|
|
if (!nflag)
|
|
fprintf(vpr, "Skipping ...\n");
|
|
@@ -169,6 +176,12 @@ extract(vhname)
|
|
if (!make_dir(&finfo))
|
|
continue;
|
|
} else if (is_link(&finfo)) {
|
|
+ if (!interactive && has_dotdot(finfo.f_lname)) {
|
|
+ errmsgno(EX_BAD, "'%s' contains '..', "
|
|
+ "skipping ...\n", finfo.f_lname);
|
|
+ void_file(&finfo);
|
|
+ return;
|
|
+ }
|
|
if (!make_link(&finfo))
|
|
continue;
|
|
} else if (is_symlink(&finfo)) {
|
|
@@ -830,3 +843,25 @@ skip_slash(info)
|
|
while (info->f_lname[0] == '/')
|
|
info->f_lname++;
|
|
}
|
|
+
|
|
+LOCAL BOOL
|
|
+has_dotdot(name)
|
|
+ char *name;
|
|
+{
|
|
+ register char *p = name;
|
|
+
|
|
+ while (*p) {
|
|
+ if ((p[0] == '.' && p[1] == '.') &&
|
|
+ (p[2] == '/' || p[2] == '\0')) {
|
|
+ return (TRUE);
|
|
+ }
|
|
+ do {
|
|
+ if (*p++ == '\0')
|
|
+ return (FALSE);
|
|
+ } while (*p != '/');
|
|
+ p++;
|
|
+ while (*p && *p == '/') /* Skip multiple slashes */
|
|
+ p++;
|
|
+ }
|
|
+ return (FALSE);
|
|
+}
|