@@ -196,23 +196,36 @@ private module StdlibPrivate {
196
196
}
197
197
198
198
/**
199
- * A call to `os.path.exists` or `os.path.lexists` will check if a file exists on the file system.
200
- * The `os.path` module offers e number of methods for checking if a file exists and/or has certain
199
+ * The `os.path` module offers a number of methods for checking if a file exists and/or has certain
201
200
* properties, leading to a file system access.
201
+ * A call to `os.path.exists` or `os.path.lexists` will check if a file exists on the file system.
202
202
* (Although, on some platforms, the check may return `false` due to missing permissions.)
203
+ * A call to `os.path.getatime` will raise `OSError` if the file does not exist or is inaccessible.
203
204
* See:
204
- * - https://docs.python.org/3/library/os.path.html#os.path.exists
205
- * - https://docs.python.org/3/library/os.path.html#os.path.lexists
206
- * - https://docs.python.org/3/library/os.path.html#os.path.isfile
207
- * - https://docs.python.org/3/library/os.path.html#os.path.isdir
208
- * - https://docs.python.org/3/library/os.path.html#os.path.islink
209
- * - https://docs.python.org/3/library/os.path.html#os.path.ismount
205
+ * - https://docs.python.org/3/library/os.path.html#os.path.exists
206
+ * - https://docs.python.org/3/library/os.path.html#os.path.lexists
207
+ * - https://docs.python.org/3/library/os.path.html#os.path.isfile
208
+ * - https://docs.python.org/3/library/os.path.html#os.path.isdir
209
+ * - https://docs.python.org/3/library/os.path.html#os.path.islink
210
+ * - https://docs.python.org/3/library/os.path.html#os.path.ismount
211
+ * - https://docs.python.org/3/library/os.path.html#os.path.getatime
212
+ * - https://docs.python.org/3/library/os.path.html#os.path.getmtime
213
+ * - https://docs.python.org/3/library/os.path.html#os.path.getctime
214
+ * - https://docs.python.org/3/library/os.path.html#os.path.getsize
215
+ * - https://docs.python.org/3/library/os.path.html#os.path.realpath
210
216
*/
211
217
private class OsPathProbingCall extends FileSystemAccess:: Range , DataFlow:: CallCfgNode {
212
218
OsPathProbingCall ( ) {
213
219
this =
214
220
os:: path ( )
215
- .getMember ( [ "exists" , "lexists" , "isfile" , "isdir" , "islink" , "ismount" ] )
221
+ .getMember ( [
222
+ // these check if the file exists
223
+ "exists" , "lexists" , "isfile" , "isdir" , "islink" , "ismount" ,
224
+ // these raise errors if the file does not exist
225
+ "getatime" , "getmtime" , "getctime" , "getsize" ,
226
+ // this will resolve symlinks
227
+ "realpath"
228
+ ] )
216
229
.getACall ( )
217
230
}
218
231
@@ -221,6 +234,17 @@ private module StdlibPrivate {
221
234
}
222
235
}
223
236
237
+ /** A call to `os.path.samefile` will raise an exception if an `os.stat()` call on either pathname fails. */
238
+ private class OsPathSamefileCall extends FileSystemAccess:: Range , DataFlow:: CallCfgNode {
239
+ OsPathSamefileCall ( ) { this = os:: path ( ) .getMember ( "samefile" ) .getACall ( ) }
240
+
241
+ override DataFlow:: Node getAPathArgument ( ) {
242
+ result in [
243
+ this .getArg ( 0 ) , this .getArgByName ( "path1" ) , this .getArg ( 1 ) , this .getArgByName ( "path2" )
244
+ ]
245
+ }
246
+ }
247
+
224
248
/**
225
249
* A call to `os.path.normpath`.
226
250
* See https://docs.python.org/3/library/os.path.html#os.path.normpath
0 commit comments