@@ -51,10 +51,11 @@ private ZipDecompressor() {
5151 private static final int S_IFREG = 0100000 ;
5252 private static final int S_IFLNK = 0120000 ;
5353 private static final int EXECUTABLE_MASK = 0755 ;
54- @ VisibleForTesting
55- static final int WINDOWS_DIRECTORY = 0x10 ;
56- @ VisibleForTesting
57- static final int WINDOWS_FILE = 0x20 ;
54+
55+ // source: https://docs.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
56+ @ VisibleForTesting static final int WINDOWS_FILE_ATTRIBUTE_DIRECTORY = 0x10 ;
57+ @ VisibleForTesting static final int WINDOWS_FILE_ATTRIBUTE_ARCHIVE = 0x20 ;
58+ @ VisibleForTesting static final int WINDOWS_FILE_ATTRIBUTE_NORMAL = 0x80 ;
5859
5960 /**
6061 * This unzips the zip file to directory {@link DecompressorDescriptor#repositoryPath()}, which by
@@ -186,10 +187,13 @@ static int getPermissions(int permissions, String path) throws IOException {
186187 // https://github.com/miloyip/rapidjson/archive/v1.0.2.zip, it looks like executables end up
187188 // with "normal" (posix) permissions (oddly), so they'll be handled above.
188189 int windowsPermission = permissions & 0xff ;
189- if ((windowsPermission & WINDOWS_DIRECTORY ) == WINDOWS_DIRECTORY ) {
190+ if ((windowsPermission & WINDOWS_FILE_ATTRIBUTE_DIRECTORY )
191+ == WINDOWS_FILE_ATTRIBUTE_DIRECTORY ) {
190192 // Directory.
191193 return S_IFDIR | EXECUTABLE_MASK ;
192- } else if (permissions == 0 || (windowsPermission & WINDOWS_FILE ) == WINDOWS_FILE ) {
194+ } else if (permissions == 0
195+ || (windowsPermission & WINDOWS_FILE_ATTRIBUTE_ARCHIVE ) == WINDOWS_FILE_ATTRIBUTE_ARCHIVE
196+ || (windowsPermission & WINDOWS_FILE_ATTRIBUTE_NORMAL ) == WINDOWS_FILE_ATTRIBUTE_NORMAL ) {
193197 // File.
194198 return S_IFREG | EXECUTABLE_MASK ;
195199 }
0 commit comments