Skip to content

Commit e317392

Browse files
authored
add Zip::File.new to framework
1 parent c67c25d commit e317392

File tree

4 files changed

+17
-0
lines changed

4 files changed

+17
-0
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ private import codeql.ruby.ApiGraphs
1111
* Classes and predicates for modeling the RubyZip library
1212
*/
1313
module RubyZip {
14+
/**
15+
* A call to `Zip::File.new`, considered as a `FileSystemAccess`
16+
*/
17+
class RubyZipFileNew extends DataFlow::CallNode, FileSystemAccess::Range {
18+
RubyZipFileNew() { this = API::getTopLevelMember("Zip").getMember("File").getAnInstantiation() }
19+
20+
override DataFlow::Node getAPathArgument() { result = this.getArgument(0) }
21+
}
22+
1423
/**
1524
* A call to `Zip::File.open`, considered as a `FileSystemAccess`.
1625
*/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1+
rubyZipFileOpens
12
| Archive.rb:2:12:2:35 | call to open |
3+
rubyZipFileNew
4+
| Archive.rb:5:12:5:34 | call to new |

ruby/ql/test/library-tests/frameworks/archive/Archive.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ private import ruby
22
private import codeql.ruby.frameworks.Archive
33

44
query predicate rubyZipFileOpens(RubyZip::RubyZipFileOpen f) { any() }
5+
6+
query predicate rubyZipFileNew(RubyZip::RubyZipFileNew f) { any() }
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
# `foo_file` is a RubyZip `Zip::File.open` instance
22
foo_file = Zip::File.open(filename)
3+
4+
# `new_file` is a RubyZip `Zip::File.new` instance
5+
new_file = Zip::File.new(filename)

0 commit comments

Comments
 (0)