Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 413d182

Browse files
committed
add support for named parameters
1 parent c1d3738 commit 413d182

3 files changed

Lines changed: 15 additions & 5 deletions

File tree

python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,14 @@ API::Node getExtraSuccessorFromNode(API::Node node, AccessPathToken token) {
6565
result = node.getMember(token.getAnArgument()).getReturn()
6666
or
6767
token.getName() = ["Argument", "Parameter"] and
68-
token.getAnArgument() = "self" and
69-
result = node.getSelfParameter()
68+
(
69+
token.getAnArgument() = "self" and
70+
result = node.getSelfParameter()
71+
or
72+
exists(string name | token.getAnArgument() = name + ":" |
73+
result = node.getKeywordParameter(name)
74+
)
75+
)
7076
// Some features don't have MaD tokens yet, they would need to be added to API-graphs first.
7177
// - decorators ("DecoratedClass", "DecoratedMember", "DecoratedParameter")
7278
// - Array/Map elements ("ArrayElement", "Element", "MapKey", "MapValue")

python/ql/test/library-tests/frameworks/data/test.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,8 @@ class Sub2Class (CommonTokens.Class):
5757
val = ArgPos.selfThing(arg, named=2)
5858

5959
class SubClass (ArgPos.MyClass):
60-
def foo(self, arg, named=2):
61-
pass
60+
def foo(self, arg, named=2, otherName=3):
61+
pass
62+
63+
def secondAndAfter(self, arg1, arg2, arg3, arg4, arg5):
64+
pass

python/ql/test/library-tests/frameworks/data/test.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class Sinks extends ModelInput::SinkModelCsv {
5555
}
5656
}
5757

58-
// TODO: Non-positional arguments (including Named parameters)
5958
// TODO: Any argument
6059
// TODO: Test taint steps.
6160
// TODO: // There are no API-graph edges for: ArrayElement, Element, MapKey, MapValue (remove from valid tokens list)
@@ -78,6 +77,8 @@ class Sources extends ModelInput::SourceModelCsv {
7877
"testlib;;Member[CommonTokens].Member[Class].Instance.Method[foo];test-source", //
7978
// testing non-positional arguments
8079
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[self];test-source", //
80+
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[named:];test-source", //
81+
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[secondAndAfter].Parameter[1..];test-source", //
8182
]
8283
}
8384
}

0 commit comments

Comments
 (0)