|
6 | 6 | private import codeql.ruby.AST |
7 | 7 | private import codeql.ruby.Concepts |
8 | 8 | private import codeql.ruby.DataFlow |
| 9 | +private import codeql.ruby.Regexp as RE |
| 10 | +private import codeql.ruby.dataflow.FlowSummary |
| 11 | +private import codeql.ruby.frameworks.data.ModelsAsData |
9 | 12 |
|
10 | 13 | /** |
11 | 14 | * Models the `ActionDispatch` HTTP library, which is part of Rails. |
12 | 15 | * Version: 7.1.0. |
13 | 16 | */ |
14 | 17 | module ActionDispatch { |
| 18 | + /** |
| 19 | + * Type summaries for the `Mime::Type` class, i.e. method calls that produce new |
| 20 | + * `Mime::Type` instances. |
| 21 | + */ |
| 22 | + private class MimeTypeTypeSummary extends ModelInput::TypeModelCsv { |
| 23 | + override predicate row(string row) { |
| 24 | + // package1;type1;package2;type2;path |
| 25 | + row = |
| 26 | + [ |
| 27 | + // Mime[type] : Mime::Type (omitted) |
| 28 | + // Method names with brackets like [] cannot be represented in MaD. |
| 29 | + // Mime.fetch(type) : Mime::Type |
| 30 | + "actiondispatch;Mime::Type;;;Member[Mime].Method[fetch].ReturnValue", |
| 31 | + // Mime::Type.new(str) : Mime::Type |
| 32 | + "actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Instance", |
| 33 | + // Mime::Type.lookup(str) : Mime::Type |
| 34 | + "actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[lookup].ReturnValue", |
| 35 | + // Mime::Type.lookup_by_extension(str) : Mime::Type |
| 36 | + "actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[lookup_by_extension].ReturnValue", |
| 37 | + // Mime::Type.register(str) : Mime::Type |
| 38 | + "actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[register].ReturnValue", |
| 39 | + // Mime::Type.register_alias(str) : Mime::Type |
| 40 | + "actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[register_alias].ReturnValue", |
| 41 | + ] |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + /** |
| 46 | + * An argument to `Mime::Type#match?`, which is converted to a RegExp via |
| 47 | + * `Regexp.new`. |
| 48 | + */ |
| 49 | + class MimeTypeMatchRegExpInterpretation extends RE::RegExpInterpretation::Range { |
| 50 | + MimeTypeMatchRegExpInterpretation() { |
| 51 | + this = |
| 52 | + ModelOutput::getATypeNode("actiondispatch", "Mime::Type") |
| 53 | + .getAMethodCall(["match?", "=~"]) |
| 54 | + .getArgument(0) |
| 55 | + } |
| 56 | + } |
| 57 | + |
15 | 58 | /** |
16 | 59 | * Models routing configuration specified using the `ActionDispatch` library, which is part of Rails. |
17 | 60 | */ |
|
0 commit comments