Skip to content

Commit fb00a6c

Browse files
authored
Merge pull request github#7666 from github/hmac/file-open-access
Ruby: Add File.open as a FileSystemAccess
2 parents ea901ad + 5dcee6b commit fb00a6c

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

ruby/ql/lib/codeql/ruby/frameworks/Files.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@ module File {
212212
FileInstance() { this = fileInstance() }
213213
}
214214

215+
/**
216+
* A call to `File.open`, considered as a `FileSystemAccess`.
217+
*/
218+
class FileOpen extends DataFlow::CallNode, FileSystemAccess::Range {
219+
FileOpen() { this = API::getTopLevelMember("File").getAMethodCall("open") }
220+
221+
override DataFlow::Node getAPathArgument() { result = this.getArgument(0) }
222+
}
223+
215224
/**
216225
* A read using the `File` module, e.g. the `f.read` call in
217226
*

ruby/ql/test/library-tests/frameworks/files/Files.expected

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ fileInstances
1313
| Files.rb:23:19:23:33 | call to open |
1414
| Files.rb:24:1:24:40 | ... = ... |
1515
| Files.rb:24:19:24:40 | call to open |
16+
| Files.rb:37:1:37:33 | ... = ... |
17+
| Files.rb:37:14:37:33 | call to open |
1618
ioInstances
1719
| Files.rb:2:1:2:30 | ... = ... |
1820
| Files.rb:2:1:2:30 | ... = ... |
@@ -36,6 +38,8 @@ ioInstances
3638
| Files.rb:24:19:24:40 | call to open |
3739
| Files.rb:35:1:35:56 | ... = ... |
3840
| Files.rb:35:13:35:56 | call to open |
41+
| Files.rb:37:1:37:33 | ... = ... |
42+
| Files.rb:37:14:37:33 | call to open |
3943
fileModuleReaders
4044
| Files.rb:7:13:7:32 | call to readlines |
4145
ioReaders
@@ -55,6 +59,11 @@ fileSystemReadAccesses
5559
| Files.rb:7:13:7:32 | call to readlines |
5660
| Files.rb:20:13:20:25 | call to read |
5761
| Files.rb:29:12:29:29 | call to read |
62+
fileSystemAccesses
63+
| Files.rb:7:13:7:32 | call to readlines |
64+
| Files.rb:20:13:20:25 | call to read |
65+
| Files.rb:29:12:29:29 | call to read |
66+
| Files.rb:37:14:37:33 | call to open |
5867
fileNameSources
5968
| Files.rb:10:6:10:18 | call to path |
6069
| Files.rb:11:6:11:21 | call to to_path |

ruby/ql/test/library-tests/frameworks/files/Files.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ query predicate fileUtilsFilenameSources(FileUtils::FileUtilsFilenameSource s) {
1818

1919
query predicate fileSystemReadAccesses(FileSystemReadAccess a) { any() }
2020

21+
query predicate fileSystemAccesses(FileSystemAccess a) { any() }
22+
2123
query predicate fileNameSources(FileNameSource s) { any() }

ruby/ql/test/library-tests/frameworks/files/Files.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@
3333

3434
# `rand_open` is an `IO` instance
3535
rand_open = IO.open(IO.sysopen("/dev/random", "r"), "r")
36+
37+
foo_file_3 = File.open("foo.txt")

0 commit comments

Comments
 (0)