File tree Expand file tree Collapse file tree 2 files changed +23
-4
lines changed Expand file tree Collapse file tree 2 files changed +23
-4
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import test.os.TestUtil.prep
55import utest ._
66
77import java .io .{ByteArrayInputStream , ByteArrayOutputStream , PrintStream }
8+ import java .nio .file .attribute .PosixFilePermission
89import java .util .zip .{ZipEntry , ZipOutputStream }
910
1011object 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}
You can’t perform that action at this time.
0 commit comments