Skip to content

Commit 05fd1f1

Browse files
committed
Make sure unzipped directories are owner-executable
1 parent 4993aa1 commit 05fd1f1

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

os/src/ZipOps.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -360,10 +360,10 @@ object unzip {
360360
} else null
361361

362362
if (zipEntry.isDirectory) {
363-
os.makeDir.all(newFile, perms = perms)
364-
if (perms != null && os.perms(newFile) != perms) {
365-
// because of umask
366-
os.perms.set(newFile, perms)
363+
os.makeDir.all(newFile)
364+
if (perms != null) {
365+
// make sure directories at least have OWNER_EXECUTE
366+
os.perms.set(newFile, perms + PosixFilePermission.OWNER_EXECUTE)
367367
}
368368
} else if (isSymLink) {
369369
val target = scala.io.Source.fromInputStream(zipInputStream).mkString

os/test/src/ZipOpTests.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import test.os.TestUtil.prep
55
import utest._
66

77
import java.io.{ByteArrayInputStream, ByteArrayOutputStream, PrintStream}
8+
import java.nio.file.attribute.PosixFilePermission
89
import java.util.zip.{ZipEntry, ZipOutputStream}
910

1011
object ZipOpTests extends TestSuite {
@@ -537,5 +538,23 @@ object ZipOpTests extends TestSuite {
537538
assert(file2Content == "Content of file2")
538539
}
539540

541+
test("unzipDirectoryEnsureExecutablePermission") - prep { wd =>
542+
val zipFileName = "zipDirExecutable"
543+
val source = wd / "folder1"
544+
val dir = source / "dir"
545+
546+
os.makeDir(dir)
547+
val perms = os.perms(dir)
548+
os.perms.set(dir, perms - PosixFilePermission.OWNER_EXECUTE)
549+
550+
val zipped = os.zip(
551+
dest = wd / s"$zipFileName.zip",
552+
sources = Seq(source)
553+
)
554+
555+
val unzipped = os.unzip(zipped, dest = wd / zipFileName)
556+
assert(os.perms(unzipped / "dir").contains(PosixFilePermission.OWNER_EXECUTE))
557+
assert(os.perms(unzipped / "dir") == perms)
558+
}
540559
}
541560
}

0 commit comments

Comments
 (0)