@@ -51,10 +51,11 @@ private ZipDecompressor() {
51
51
private static final int S_IFREG = 0100000 ;
52
52
private static final int S_IFLNK = 0120000 ;
53
53
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 ;
58
59
59
60
/**
60
61
* 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 {
186
187
// https://github.com/miloyip/rapidjson/archive/v1.0.2.zip, it looks like executables end up
187
188
// with "normal" (posix) permissions (oddly), so they'll be handled above.
188
189
int windowsPermission = permissions & 0xff ;
189
- if ((windowsPermission & WINDOWS_DIRECTORY ) == WINDOWS_DIRECTORY ) {
190
+ if ((windowsPermission & WINDOWS_FILE_ATTRIBUTE_DIRECTORY )
191
+ == WINDOWS_FILE_ATTRIBUTE_DIRECTORY ) {
190
192
// Directory.
191
193
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 ) {
193
197
// File.
194
198
return S_IFREG | EXECUTABLE_MASK ;
195
199
}
0 commit comments