@@ -77,26 +77,13 @@ class FileManager {
77
77
func destinationOfSymbolicLink( atPath: String ) -> String { return " " }
78
78
func fileExists( atPath: String ) -> Bool { return false }
79
79
func fileExists( atPath: String , isDirectory: UnsafeMutablePointer < ObjCBool > ? ) -> Bool { return false }
80
- func isReadableFile( atPath: String ) -> Bool { return false }
81
- func isWritableFile( atPath: String ) -> Bool { return false }
82
- func isExecutableFile( atPath: String ) -> Bool { return false }
83
- func isDeletableFile( atPath: String ) -> Bool { return false }
84
- func componentsToDisplay( forPath: String ) -> [ String ] ? { return nil }
85
- func displayName( atPath: String ) -> String { return " " }
86
- func attributesOfItem( atPath: String ) -> [ FileAttributeKey : Any ] { return [ : ] }
87
- func attributesOfFileSystem( forPath: String ) -> [ FileAttributeKey : Any ] { return [ : ] }
88
80
func setAttributes( _: [ FileAttributeKey : Any ] , ofItemAtPath: String ) { }
89
81
func contents( atPath: String ) -> Data ? { return nil }
90
82
func contentsEqual( atPath: String , andPath: String ) -> Bool { return false }
91
- func getRelationship( _: UnsafeMutablePointer < FileManager . URLRelationship > , ofDirectoryAt: URL , toItemAt: URL ) { }
92
- func getRelationship( _: UnsafeMutablePointer < FileManager . URLRelationship > , of: FileManager . SearchPathDirectory , in: FileManager . SearchPathDomainMask , toItemAt: URL ) { }
93
83
func changeCurrentDirectoryPath( _: String ) -> Bool { return false }
94
84
func unmountVolume( at: URL , options: FileManager . UnmountOptions , completionHandler: ( Error ? ) -> Void ) { }
95
- func NSHFSTypeOfFile( _: String ! ) -> String ! { return " " }
96
85
// Deprecated methods
97
86
func changeFileAttributes( _: [ AnyHashable : Any ] , atPath: String ) -> Bool { return false }
98
- func fileAttributes( atPath: String , traverseLink: Bool ) -> [ AnyHashable : Any ] ? { return nil }
99
- func fileSystemAttributes( atPath: String ) -> [ AnyHashable : Any ] ? { return nil }
100
87
func directoryContents( atPath: String ) -> [ Any ] ? { return nil }
101
88
func createDirectory( atPath: String , attributes: [ AnyHashable : Any ] ) -> Bool { return false }
102
89
func createSymbolicLink( atPath: String , pathContent: String ) -> Bool { return false }
@@ -113,78 +100,65 @@ func test() {
113
100
let safeUrl = URL ( string: " " ) !
114
101
let safeNsUrl = NSURL ( string: " " ) !
115
102
116
- Data ( " " ) . write ( to: remoteUrl, options: [ ] ) // $ hasPathInjection=110
103
+ Data ( " " ) . write ( to: remoteUrl, options: [ ] ) // $ hasPathInjection=97
117
104
118
105
let nsData = NSData ( )
119
- let _ = nsData. write ( to: remoteUrl, atomically: false ) // $ hasPathInjection=110
120
- nsData. write ( to: remoteUrl, options: [ ] ) // $ hasPathInjection=110
121
- let _ = nsData. write ( toFile: remoteString, atomically: false ) // $ hasPathInjection=110
122
- nsData. write ( toFile: remoteString, options: [ ] ) // $ hasPathInjection=110
106
+ let _ = nsData. write ( to: remoteUrl, atomically: false ) // $ hasPathInjection=97
107
+ nsData. write ( to: remoteUrl, options: [ ] ) // $ hasPathInjection=97
108
+ let _ = nsData. write ( toFile: remoteString, atomically: false ) // $ hasPathInjection=97
109
+ nsData. write ( toFile: remoteString, options: [ ] ) // $ hasPathInjection=97
123
110
124
111
let fm = FileManager ( )
125
- let _ = fm. contentsOfDirectory ( at: remoteUrl, includingPropertiesForKeys: [ ] , options: [ ] ) // $ hasPathInjection=110
126
- let _ = fm. contentsOfDirectory ( atPath: remoteString) // $ hasPathInjection=110
127
- let _ = fm. enumerator ( at: remoteUrl, includingPropertiesForKeys: [ ] , options: [ ] , errorHandler: nil ) // $ hasPathInjection=110
128
- let _ = fm. enumerator ( atPath: remoteString) // $ hasPathInjection=110
129
- let _ = fm. subpathsOfDirectory ( atPath: remoteString) // $ hasPathInjection=110
130
- let _ = fm. subpaths ( atPath: remoteString) // $ hasPathInjection=110
131
- fm. createDirectory ( at: remoteUrl, withIntermediateDirectories: false , attributes: [ : ] ) // $ hasPathInjection=110
132
- let _ = fm. createDirectory ( atPath: remoteString, attributes: [ : ] ) // $ hasPathInjection=110
133
- let _ = fm. createFile ( atPath: remoteString, contents: nil , attributes: [ : ] ) // $ hasPathInjection=110
134
- fm. removeItem ( at: remoteUrl) // $ hasPathInjection=110
135
- fm. removeItem ( atPath: remoteString) // $ hasPathInjection=110
136
- fm. trashItem ( at: remoteUrl, resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=110
137
- let _ = fm. replaceItemAt ( remoteUrl, withItemAt: safeUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=110
138
- let _ = fm. replaceItemAt ( safeUrl, withItemAt: remoteUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=110
139
- fm. replaceItem ( at: remoteUrl, withItemAt: safeUrl, backupItemName: nil , options: [ ] , resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=110
140
- fm. replaceItem ( at: safeUrl, withItemAt: remoteUrl, backupItemName: nil , options: [ ] , resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=110
141
- fm. copyItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=110
142
- fm. copyItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=110
143
- fm. copyItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=110
144
- fm. copyItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=110
145
- fm. moveItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=110
146
- fm. moveItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=110
147
- fm. moveItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=110
148
- fm. moveItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=110
149
- fm. createSymbolicLink ( at: remoteUrl, withDestinationURL: safeUrl) // $ hasPathInjection=110
150
- fm. createSymbolicLink ( at: safeUrl, withDestinationURL: remoteUrl) // $ hasPathInjection=110
151
- fm. createSymbolicLink ( atPath: remoteString, withDestinationPath: " " ) // $ hasPathInjection=110
152
- fm. createSymbolicLink ( atPath: " " , withDestinationPath: remoteString) // $ hasPathInjection=110
153
- fm. linkItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=110
154
- fm. linkItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=110
155
- fm. linkItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=110
156
- fm. linkItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=110
157
- let _ = fm. destinationOfSymbolicLink ( atPath: remoteString) // $ hasPathInjection=110
158
- let _ = fm. fileExists ( atPath: remoteString) // $ hasPathInjection=110
159
- let _ = fm. fileExists ( atPath: remoteString, isDirectory: UnsafeMutablePointer< ObjCBool> . init( bitPattern: 0 ) ) // $ hasPathInjection=110
160
- let _ = fm. isReadableFile ( atPath: remoteString) // $ hasPathInjection=110
161
- let _ = fm. isWritableFile ( atPath: remoteString) // $ hasPathInjection=110
162
- let _ = fm. isDeletableFile ( atPath: remoteString) // $ hasPathInjection=110
163
- let _ = fm. componentsToDisplay ( forPath: remoteString) // $ hasPathInjection=110
164
- let _ = fm. displayName ( atPath: remoteString) // $ hasPathInjection=110
165
- let _ = fm. attributesOfItem ( atPath: remoteString) // $ hasPathInjection=110
166
- let _ = fm. attributesOfFileSystem ( forPath: remoteString) // $ hasPathInjection=110
167
- fm. setAttributes ( [ : ] , ofItemAtPath: remoteString) // $ hasPathInjection=110
168
- let _ = fm. contents ( atPath: remoteString) // $ hasPathInjection=110
169
- let _ = fm. contentsEqual ( atPath: remoteString, andPath: " " ) // $ hasPathInjection=110
170
- let _ = fm. contentsEqual ( atPath: " " , andPath: remoteString) // $ hasPathInjection=110
171
- fm. getRelationship ( UnsafeMutablePointer< FileManager . URLRelationship> . allocate( capacity: 0 ) , ofDirectoryAt: remoteUrl, toItemAt: safeUrl) // $ hasPathInjection=110
172
- fm. getRelationship ( UnsafeMutablePointer< FileManager . URLRelationship> . allocate( capacity: 0 ) , ofDirectoryAt: safeUrl, toItemAt: remoteUrl) // $ hasPathInjection=110
173
- fm. getRelationship ( UnsafeMutablePointer< FileManager . URLRelationship> . allocate( capacity: 0 ) , of: FileManager . SearchPathDirectory. none, in: FileManager . SearchPathDomainMask ( ) , toItemAt: remoteUrl) // $ hasPathInjection=110
174
- let _ = fm. changeCurrentDirectoryPath ( remoteString) // $ hasPathInjection=110
175
- let _ = fm. unmountVolume ( at: remoteUrl, options: [ ] , completionHandler: { _ in } ) // $ hasPathInjection=110
176
- let _ = fm. NSHFSTypeOfFile ( remoteString) // $ hasPathInjection=110
112
+ let _ = fm. contentsOfDirectory ( at: remoteUrl, includingPropertiesForKeys: [ ] , options: [ ] ) // $ hasPathInjection=97
113
+ let _ = fm. contentsOfDirectory ( atPath: remoteString) // $ hasPathInjection=97
114
+ let _ = fm. enumerator ( at: remoteUrl, includingPropertiesForKeys: [ ] , options: [ ] , errorHandler: nil ) // $ hasPathInjection=97
115
+ let _ = fm. enumerator ( atPath: remoteString) // $ hasPathInjection=97
116
+ let _ = fm. subpathsOfDirectory ( atPath: remoteString) // $ hasPathInjection=97
117
+ let _ = fm. subpaths ( atPath: remoteString) // $ hasPathInjection=97
118
+ fm. createDirectory ( at: remoteUrl, withIntermediateDirectories: false , attributes: [ : ] ) // $ hasPathInjection=97
119
+ let _ = fm. createDirectory ( atPath: remoteString, attributes: [ : ] ) // $ hasPathInjection=97
120
+ let _ = fm. createFile ( atPath: remoteString, contents: nil , attributes: [ : ] ) // $ hasPathInjection=97
121
+ fm. removeItem ( at: remoteUrl) // $ hasPathInjection=97
122
+ fm. removeItem ( atPath: remoteString) // $ hasPathInjection=97
123
+ fm. trashItem ( at: remoteUrl, resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=97
124
+ let _ = fm. replaceItemAt ( remoteUrl, withItemAt: safeUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=97
125
+ let _ = fm. replaceItemAt ( safeUrl, withItemAt: remoteUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=97
126
+ fm. replaceItem ( at: remoteUrl, withItemAt: safeUrl, backupItemName: nil , options: [ ] , resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=97
127
+ fm. replaceItem ( at: safeUrl, withItemAt: remoteUrl, backupItemName: nil , options: [ ] , resultingItemURL: AutoreleasingUnsafeMutablePointer < NSURL ? > ( ) ) // $ hasPathInjection=97
128
+ fm. copyItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=97
129
+ fm. copyItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=97
130
+ fm. copyItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=97
131
+ fm. copyItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=97
132
+ fm. moveItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=97
133
+ fm. moveItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=97
134
+ fm. moveItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=97
135
+ fm. moveItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=97
136
+ fm. createSymbolicLink ( at: remoteUrl, withDestinationURL: safeUrl) // $ hasPathInjection=97
137
+ fm. createSymbolicLink ( at: safeUrl, withDestinationURL: remoteUrl) // $ hasPathInjection=97
138
+ fm. createSymbolicLink ( atPath: remoteString, withDestinationPath: " " ) // $ hasPathInjection=97
139
+ fm. createSymbolicLink ( atPath: " " , withDestinationPath: remoteString) // $ hasPathInjection=97
140
+ fm. linkItem ( at: remoteUrl, to: safeUrl) // $ hasPathInjection=97
141
+ fm. linkItem ( at: safeUrl, to: remoteUrl) // $ hasPathInjection=97
142
+ fm. linkItem ( atPath: remoteString, toPath: " " ) // $ hasPathInjection=97
143
+ fm. linkItem ( atPath: " " , toPath: remoteString) // $ hasPathInjection=97
144
+ let _ = fm. destinationOfSymbolicLink ( atPath: remoteString) // $ hasPathInjection=97
145
+ let _ = fm. fileExists ( atPath: remoteString) // $ hasPathInjection=97
146
+ let _ = fm. fileExists ( atPath: remoteString, isDirectory: UnsafeMutablePointer< ObjCBool> . init( bitPattern: 0 ) ) // $ hasPathInjection=97
147
+ fm. setAttributes ( [ : ] , ofItemAtPath: remoteString) // $ hasPathInjection=97
148
+ let _ = fm. contents ( atPath: remoteString) // $ hasPathInjection=97
149
+ let _ = fm. contentsEqual ( atPath: remoteString, andPath: " " ) // $ hasPathInjection=97
150
+ let _ = fm. contentsEqual ( atPath: " " , andPath: remoteString) // $ hasPathInjection=97
151
+ let _ = fm. changeCurrentDirectoryPath ( remoteString) // $ hasPathInjection=97
152
+ let _ = fm. unmountVolume ( at: remoteUrl, options: [ ] , completionHandler: { _ in } ) // $ hasPathInjection=97
177
153
// Deprecated methods
178
- let _ = fm. changeFileAttributes ( [ : ] , atPath: remoteString) // $ hasPathInjection=110
179
- let _ = fm. fileAttributes ( atPath: remoteString, traverseLink: false ) // $ hasPathInjection=110
180
- let _ = fm. fileSystemAttributes ( atPath: remoteString) // $ hasPathInjection=110
181
- let _ = fm. directoryContents ( atPath: remoteString) // $ hasPathInjection=110
182
- let _ = fm. createDirectory ( atPath: remoteString, attributes: [ : ] ) // $ hasPathInjection=110
183
- let _ = fm. createSymbolicLink ( atPath: remoteString, pathContent: " " ) // $ hasPathInjection=110
184
- let _ = fm. createSymbolicLink ( atPath: " " , pathContent: remoteString) // $ hasPathInjection=110
185
- let _ = fm. pathContentOfSymbolicLink ( atPath: remoteString) // $ hasPathInjection=110
186
- let _ = fm. replaceItemAtURL ( originalItemURL: remoteNsUrl, withItemAtURL: safeNsUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=110
187
- let _ = fm. replaceItemAtURL ( originalItemURL: safeNsUrl, withItemAtURL: remoteNsUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=110
154
+ let _ = fm. changeFileAttributes ( [ : ] , atPath: remoteString) // $ hasPathInjection=97
155
+ let _ = fm. directoryContents ( atPath: remoteString) // $ hasPathInjection=97
156
+ let _ = fm. createDirectory ( atPath: remoteString, attributes: [ : ] ) // $ hasPathInjection=97
157
+ let _ = fm. createSymbolicLink ( atPath: remoteString, pathContent: " " ) // $ hasPathInjection=97
158
+ let _ = fm. createSymbolicLink ( atPath: " " , pathContent: remoteString) // $ hasPathInjection=97
159
+ let _ = fm. pathContentOfSymbolicLink ( atPath: remoteString) // $ hasPathInjection=97
160
+ let _ = fm. replaceItemAtURL ( originalItemURL: remoteNsUrl, withItemAtURL: safeNsUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=97
161
+ let _ = fm. replaceItemAtURL ( originalItemURL: safeNsUrl, withItemAtURL: remoteNsUrl, backupItemName: nil , options: [ ] ) // $ hasPathInjection=97
188
162
}
189
163
190
164
func testSanitizers( ) {
@@ -196,5 +170,5 @@ func testSanitizers() {
196
170
if ( filePath. lexicallyNormalized ( ) . starts ( with: FilePath ( stringLiteral: " /safe " ) ) ) {
197
171
fm. contents ( atPath: remoteString) // Safe
198
172
}
199
- fm. contents ( atPath: remoteString) // $ hasPathInjection=191
173
+ fm. contents ( atPath: remoteString) // $ hasPathInjection=165
200
174
}
0 commit comments