mirror of
https://github.com/github/codeql.git
synced 2026-05-01 11:45:14 +02:00
Merge pull request #13289 from alexrford/rb/rack-redirect
Ruby: rack - model redirect responses
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
| rack.rb:1:1:5:3 | HelloWorld | rack.rb:2:12:2:14 | env |
|
||||
| rack.rb:7:1:16:3 | Proxy | rack.rb:12:12:12:18 | the_env |
|
||||
| rack.rb:18:1:31:3 | Logger | rack.rb:24:12:24:14 | env |
|
||||
| rack.rb:45:1:61:3 | Baz | rack.rb:46:12:46:14 | env |
|
||||
rackApps
|
||||
| rack.rb:1:1:10:3 | HelloWorld | rack.rb:2:12:2:14 | env |
|
||||
| rack.rb:12:1:22:3 | Proxy | rack.rb:17:12:17:18 | the_env |
|
||||
| rack.rb:24:1:37:3 | Logger | rack.rb:30:12:30:14 | env |
|
||||
| rack.rb:39:1:45:3 | Redirector | rack.rb:40:12:40:14 | env |
|
||||
| rack.rb:59:1:75:3 | Baz | rack.rb:60:12:60:14 | env |
|
||||
rackResponseContentTypes
|
||||
| rack.rb:8:5:8:38 | call to [] | rack.rb:7:34:7:45 | "text/plain" |
|
||||
| rack.rb:20:5:20:27 | call to [] | rack.rb:19:28:19:38 | "text/html" |
|
||||
redirectResponses
|
||||
| rack.rb:43:5:43:45 | call to [] | rack.rb:42:30:42:40 | "/foo.html" |
|
||||
|
||||
@@ -1,4 +1,17 @@
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.frameworks.Rack
|
||||
private import codeql.ruby.DataFlow
|
||||
|
||||
query predicate rackApps(Rack::AppCandidate c, DataFlow::ParameterNode env) { env = c.getEnv() }
|
||||
query predicate rackApps(Rack::App::AppCandidate c, DataFlow::ParameterNode env) {
|
||||
env = c.getEnv()
|
||||
}
|
||||
|
||||
query predicate rackResponseContentTypes(
|
||||
Rack::Response::ResponseNode resp, DataFlow::Node contentType
|
||||
) {
|
||||
contentType = resp.getMimetypeOrContentTypeArg()
|
||||
}
|
||||
|
||||
query predicate redirectResponses(Rack::Response::RedirectResponse resp, DataFlow::Node location) {
|
||||
location = resp.getRedirectLocation()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
class HelloWorld
|
||||
def call(env)
|
||||
[200, {'Content-Type' => 'text/plain'}, ['Hello World']]
|
||||
status = 200
|
||||
if something_goes_wrong(env)
|
||||
status = 500
|
||||
end
|
||||
headers = {'Content-Type' => 'text/plain'}
|
||||
[status, headers, ['Hello World']]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,6 +16,7 @@ class Proxy
|
||||
|
||||
def call(the_env)
|
||||
status, headers, body = @app.call(the_env)
|
||||
headers.content_type = "text/html"
|
||||
[status, headers, body]
|
||||
end
|
||||
end
|
||||
@@ -30,6 +36,14 @@ class Logger
|
||||
end
|
||||
end
|
||||
|
||||
class Redirector
|
||||
def call(env)
|
||||
status = 302
|
||||
headers = {'location' => '/foo.html'}
|
||||
[status, headers, ['this is a redirect']]
|
||||
end
|
||||
end
|
||||
|
||||
class Foo
|
||||
def not_call(env)
|
||||
[1, 2, 3]
|
||||
|
||||
Reference in New Issue
Block a user