Python: CG trace: Add examples of multiple calls on one line

There are currently 16 InvalidRecordedCall
This commit is contained in:
Rasmus Wriedt Larsen
2020-07-20 14:03:37 +02:00
parent 49a90c058d
commit a1c1ab080b
5 changed files with 560 additions and 3 deletions

View File

@@ -4,7 +4,7 @@
<args>--xml example-traces/builtins.xml example/builtins.py</args>
<exit_status>completed</exit_status>
<elapsed>0.00 seconds</elapsed>
<utctimestamp>2020-07-20T09:27:00</utctimestamp>
<utctimestamp>2020-07-20T12:02:56</utctimestamp>
</info>
<recorded_calls>
<recorded_call>

View File

@@ -0,0 +1,519 @@
<root>
<info>
<cg_trace_version>0.0.2</cg_trace_version>
<args>--xml example-traces/multiple-on-one-line.xml example/multiple-on-one-line.py</args>
<exit_status>completed</exit_status>
<elapsed>0.01 seconds</elapsed>
<utctimestamp>2020-07-20T12:02:56</utctimestamp>
</info>
<recorded_calls>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>2</linenum>
<inst_index>4</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>6</linenum>
<inst_index>4</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>10</linenum>
<inst_index>4</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>13</linenum>
<inst_index>26</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>13</linenum>
<inst_index>32</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>two</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>5</linenum>
<funcname>two</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>14</linenum>
<inst_index>40</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>16</linenum>
<inst_index>46</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>16</linenum>
<inst_index>52</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>17</linenum>
<inst_index>60</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>20</linenum>
<inst_index>70</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>alias_one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>20</linenum>
<inst_index>76</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>two</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>5</linenum>
<funcname>two</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>21</linenum>
<inst_index>84</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>23</linenum>
<inst_index>92</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>23</linenum>
<inst_index>96</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>two</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>5</linenum>
<funcname>two</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>23</linenum>
<inst_index>98</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>three</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>9</linenum>
<funcname>three</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>24</linenum>
<inst_index>106</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>26</linenum>
<inst_index>114</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>one</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>1</linenum>
<funcname>one</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>26</linenum>
<inst_index>118</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>two</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>5</linenum>
<funcname>two</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>26</linenum>
<inst_index>122</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>three</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>9</linenum>
<funcname>three</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>27</linenum>
<inst_index>130</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>30</linenum>
<inst_index>4</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>33</linenum>
<inst_index>4</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>print</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<ExternalCallee>
<module>builtins</module>
<qualname>print</qualname>
<is_builtin>True</is_builtin>
</ExternalCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>37</linenum>
<inst_index>144</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>f</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>29</linenum>
<funcname>f</funcname>
</PythonCallee>
</recorded_call>
<recorded_call>
<Call>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>37</linenum>
<inst_index>146</inst_index>
<bytecode_expr>
<BytecodeCall>
<function>
<BytecodeCall>
<function>
<BytecodeVariableName>
<name>f</name>
</BytecodeVariableName>
</function>
</BytecodeCall>
</function>
</BytecodeCall>
</bytecode_expr>
</Call>
<PythonCallee>
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/multiple-on-one-line.py</filename>
<linenum>32</linenum>
<funcname>g</funcname>
</PythonCallee>
</recorded_call>
</recorded_calls>
</root>

View File

@@ -4,7 +4,7 @@
<args>--xml example-traces/simple.xml example/simple.py</args>
<exit_status>completed</exit_status>
<elapsed>0.00 seconds</elapsed>
<utctimestamp>2020-07-20T09:27:01</utctimestamp>
<utctimestamp>2020-07-20T12:02:56</utctimestamp>
</info>
<recorded_calls>
<recorded_call>

View File

@@ -0,0 +1,37 @@
def one(*args, **kwargs):
print("one")
return 1
def two(*args, **kwargs):
print("two")
return 2
def three(*args, **kwargs):
print("three")
return 3
one(); two()
print("---")
one(); one()
print("---")
alias_one = one
alias_one(); two()
print("---")
three(one(), two())
print("---")
three(one(), two=two())
print("---")
def f():
print("f")
def g():
print("g")
return g
f()()

View File

@@ -16,10 +16,11 @@ PYTHON_EXTRACTOR=$(codeql resolve extractor --language=python)
cg-trace --xml "$XMLDIR"/simple.xml example/simple.py
cg-trace --xml "$XMLDIR"/builtins.xml example/builtins.py
cg-trace --xml "$XMLDIR"/multiple-on-one-line.xml example/multiple-on-one-line.py
rm -rf "$DB"
codeql database init --source-root="$SRC" --language=python "$DB"
codeql database trace-command --working-dir="$SRC" "$DB" "$PYTHON_EXTRACTOR/tools/autobuild.sh"
codeql database index-files --language xml --include-extension .xml --working-dir="$XMLDIR" "$DB"