Python: Autoformat twisted library

This commit is contained in:
Rasmus Wriedt Larsen
2019-11-28 14:28:34 +01:00
committed by Rasmus Wriedt Larsen
parent ac55e6aba6
commit 9942c3fd8b
3 changed files with 32 additions and 59 deletions

View File

@@ -1,53 +1,35 @@
import python
import semmle.python.security.TaintTracking
import semmle.python.web.Http
import Twisted
/** A twisted.web.http.Request object */
class TwistedRequest extends TaintKind {
TwistedRequest() {
this = "twisted.request.http.Request"
}
TwistedRequest() { this = "twisted.request.http.Request" }
override TaintKind getTaintOfAttribute(string name) {
result instanceof ExternalStringSequenceDictKind and
(
name = "args"
)
name = "args"
or
result instanceof ExternalStringKind and
(
name = "uri"
)
name = "uri"
}
override TaintKind getTaintOfMethodResult(string name) {
(
name = "getHeader" or
name = "getCookie" or
name = "getUser" or
name = "getPassword"
) and
result instanceof ExternalStringKind
(
name = "getHeader" or
name = "getCookie" or
name = "getUser" or
name = "getPassword"
) and
result instanceof ExternalStringKind
}
}
class TwistedRequestSource extends TaintSource {
TwistedRequestSource() { isTwistedRequestInstance(this) }
TwistedRequestSource() {
isTwistedRequestInstance(this)
}
override string toString() {
result = "Twisted request source"
}
override predicate isSourceOf(TaintKind kind) {
kind instanceof TwistedRequest
}
override string toString() { result = "Twisted request source" }
override predicate isSourceOf(TaintKind kind) { kind instanceof TwistedRequest }
}

View File

@@ -1,5 +1,4 @@
import python
import semmle.python.security.TaintTracking
import semmle.python.web.Http
import semmle.python.security.strings.Basic
@@ -17,13 +16,9 @@ class TwistedResponse extends TaintSink {
)
}
override predicate sinks(TaintKind kind) {
kind instanceof ExternalStringKind
}
override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind }
override string toString() {
result = "Twisted response"
}
override string toString() { result = "Twisted response" }
}
/**
@@ -31,7 +26,7 @@ class TwistedResponse extends TaintSink {
* object, which affects the properties of the subsequent response sent to this
* request.
*/
class TwistedRequestSetter extends HttpResponseTaintSink {
class TwistedRequestSetter extends HttpResponseTaintSink {
TwistedRequestSetter() {
exists(CallNode call, ControlFlowNode node, string name |
(
@@ -45,11 +40,7 @@ class TwistedResponse extends TaintSink {
)
}
override predicate sinks(TaintKind kind) {
kind instanceof ExternalStringKind
}
override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind }
override string toString() {
result = "Twisted request setter"
}
override string toString() { result = "Twisted request setter" }
}

View File

@@ -1,5 +1,4 @@
import python
import semmle.python.security.TaintTracking
private ClassValue theTwistedHttpRequestClass() {
@@ -10,9 +9,7 @@ private ClassValue theTwistedHttpResourceClass() {
result = Value::named("twisted.web.resource.Resource")
}
ClassValue aTwistedRequestHandlerClass() {
result.getABaseType+() = theTwistedHttpResourceClass()
}
ClassValue aTwistedRequestHandlerClass() { result.getABaseType+() = theTwistedHttpResourceClass() }
FunctionValue getTwistedRequestHandlerMethod(string name) {
result = aTwistedRequestHandlerClass().declaredAttribute(name)
@@ -24,29 +21,32 @@ predicate isKnownRequestHandlerMethodName(string name) {
name.matches("render_%")
}
/** Holds if `node` is likely to refer to an instance of the twisted
/**
* Holds if `node` is likely to refer to an instance of the twisted
* `Request` class.
*/
predicate isTwistedRequestInstance(NameNode node) {
node.pointsTo().getClass() = theTwistedHttpRequestClass()
or
/* In points-to analysis cannot infer that a given object is an instance of
/*
* In points-to analysis cannot infer that a given object is an instance of
* the `twisted.web.http.Request` class, we also include any parameter
* called `request` that appears inside a subclass of a request handler
* class, and the appropriate arguments of known request handler methods.
*/
exists(Function func | func = node.getScope() |
func.getEnclosingScope() = aTwistedRequestHandlerClass().getScope()
) and
(
/* Any parameter called `request` */
node.getId() = "request" and
node.isParameter()
or
/* Any request parameter of a known request handler method */
exists(Function func | node.getScope() = func |
isKnownRequestHandlerMethodName(func.getName()) and
node.getNode() = func.getArg(1)
/* Any parameter called `request` */
node.getId() = "request" and
node.isParameter()
or
/* Any request parameter of a known request handler method */
exists(Function func | node.getScope() = func |
isKnownRequestHandlerMethodName(func.getName()) and
node.getNode() = func.getArg(1)
)
)
}