Skip to content

Commit d38ae01

Browse files
author
kalibera
committed
Improve path filtering, with thanks to Ivan Krylov.
git-svn-id: https://svn.r-project.org/R/trunk@88332 00db46b3-68df-0310-9c12-caf00c1e9a41
1 parent 22bad1f commit d38ae01

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/library/utils/R/tar.R

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,16 +148,23 @@ untar2 <- function(tarfile, files = NULL, list = FALSE, exdir = ".",
148148
as.integer(getOctD(x, offset, len))
149149
checkPath <- function(path) {
150150
if (.Platform$OS.type == "windows") {
151-
if (grepl("^[a-zA-Z]:", path)) {
152-
drv <- sub("^([a-zA-Z]:).*", "\\1", path)
153-
warning(sprintf("removing drive '%s'", drv))
154-
path <- sub("^([a-zA-Z]:)", "", path)
155-
}
156151
path <- gsub("\\\\", "/", path)
157-
}
158-
if (grepl("^/", path)) {
159-
warning("removing leading '/'")
160-
path <- sub("^/+", "", path)
152+
while(grepl("^/", path) || grepl("^[a-zA-Z]:", path)) {
153+
if (grepl("^/", path)) {
154+
warning("removing leading '/'")
155+
path <- sub("^/+", "", path)
156+
}
157+
if (grepl("^[a-zA-Z]:", path)) {
158+
drv <- sub("^([a-zA-Z]:).*", "\\1", path)
159+
warning(sprintf("removing drive '%s'", drv))
160+
path <- sub("^[a-zA-Z]:", "", path)
161+
}
162+
}
163+
} else {
164+
if (grepl("^/", path)) {
165+
warning("removing leading '/'")
166+
path <- sub("^/+", "", path)
167+
}
161168
}
162169
if (grepl("^~", path))
163170
stop("path starts with '~'")

0 commit comments

Comments
 (0)