Python: Delete dedicated argumentRouting<N> tests

I feel like they don't bring any value anymore, since we have the nice
inline expectation tests. If I'm wrong, happy to revert this commit
though.
This commit is contained in:
Rasmus Wriedt Larsen
2022-02-01 17:51:33 +01:00
parent 54f53c828e
commit cc4fe38fbd
14 changed files with 0 additions and 789 deletions

View File

@@ -1,239 +0,0 @@
edges
| argumentPassing.py:43:5:43:5 | ControlFlowNode for a | argumentPassing.py:53:11:53:11 | ControlFlowNode for a |
| argumentPassing.py:67:22:67:25 | ControlFlowNode for arg1 | argumentPassing.py:43:5:43:5 | ControlFlowNode for a |
| argumentPassing.py:72:22:72:25 | ControlFlowNode for arg1 | argumentPassing.py:43:5:43:5 | ControlFlowNode for a |
| argumentPassing.py:75:19:75:19 | ControlFlowNode for a | argumentPassing.py:76:11:76:11 | ControlFlowNode for a |
| argumentPassing.py:82:19:82:22 | ControlFlowNode for arg1 | argumentPassing.py:75:19:75:19 | ControlFlowNode for a |
| argumentPassing.py:83:19:83:22 | ControlFlowNode for arg1 | argumentPassing.py:75:19:75:19 | ControlFlowNode for a |
| argumentPassing.py:84:19:84:22 | ControlFlowNode for arg1 | argumentPassing.py:75:19:75:19 | ControlFlowNode for a |
| argumentPassing.py:87:27:87:27 | ControlFlowNode for a | argumentPassing.py:88:11:88:11 | ControlFlowNode for a |
| argumentPassing.py:95:45:95:48 | ControlFlowNode for arg1 | argumentPassing.py:87:27:87:27 | ControlFlowNode for a |
| argumentPassing.py:96:27:96:30 | ControlFlowNode for arg1 | argumentPassing.py:87:27:87:27 | ControlFlowNode for a |
| argumentPassing.py:97:27:97:30 | ControlFlowNode for arg1 | argumentPassing.py:87:27:87:27 | ControlFlowNode for a |
| argumentPassing.py:98:5:98:70 | KwUnpacked a | argumentPassing.py:87:27:87:27 | ControlFlowNode for a |
| argumentPassing.py:98:59:98:69 | ControlFlowNode for Dict [Dictionary element at key a] | argumentPassing.py:98:5:98:70 | KwUnpacked a |
| argumentPassing.py:98:65:98:68 | ControlFlowNode for arg1 | argumentPassing.py:98:59:98:69 | ControlFlowNode for Dict [Dictionary element at key a] |
| argumentPassing.py:101:28:101:28 | ControlFlowNode for a | argumentPassing.py:102:11:102:11 | ControlFlowNode for a |
| argumentPassing.py:101:28:101:28 | ControlFlowNode for a | argumentPassing.py:102:11:102:11 | ControlFlowNode for a |
| argumentPassing.py:101:30:101:33 | ControlFlowNode for arg1 | argumentPassing.py:101:28:101:28 | ControlFlowNode for a |
| argumentPassing.py:110:28:110:31 | ControlFlowNode for arg1 | argumentPassing.py:101:28:101:28 | ControlFlowNode for a |
| argumentPassing.py:116:22:116:24 | ControlFlowNode for foo | argumentPassing.py:117:11:117:13 | ControlFlowNode for foo |
| argumentPassing.py:138:46:138:49 | ControlFlowNode for arg1 | argumentPassing.py:116:22:116:24 | ControlFlowNode for foo |
| argumentPassing.py:143:18:143:18 | ControlFlowNode for a | argumentPassing.py:144:15:144:15 | ControlFlowNode for a |
| argumentPassing.py:146:14:146:17 | ControlFlowNode for arg1 | argumentPassing.py:143:18:143:18 | ControlFlowNode for a |
| argumentPassing.py:150:23:150:23 | ControlFlowNode for a | argumentPassing.py:151:15:151:15 | ControlFlowNode for a |
| argumentPassing.py:153:19:153:22 | ControlFlowNode for arg1 | argumentPassing.py:150:23:150:23 | ControlFlowNode for a |
| argumentPassing.py:157:20:157:20 | ControlFlowNode for a [Tuple element at index 0] | argumentPassing.py:159:19:159:19 | ControlFlowNode for a [Tuple element at index 0] |
| argumentPassing.py:159:19:159:19 | ControlFlowNode for a [Tuple element at index 0] | argumentPassing.py:159:19:159:22 | ControlFlowNode for Subscript |
| argumentPassing.py:161:5:161:19 | PosOverflowNode for with_star() [Tuple element at index 0] | argumentPassing.py:157:20:157:20 | ControlFlowNode for a [Tuple element at index 0] |
| argumentPassing.py:161:15:161:18 | ControlFlowNode for arg1 | argumentPassing.py:161:5:161:19 | PosOverflowNode for with_star() [Tuple element at index 0] |
| argumentPassing.py:165:17:165:17 | ControlFlowNode for a | argumentPassing.py:166:15:166:15 | ControlFlowNode for a |
| argumentPassing.py:168:13:168:16 | ControlFlowNode for arg1 | argumentPassing.py:165:17:165:17 | ControlFlowNode for a |
| argumentPassing.py:172:18:172:18 | ControlFlowNode for a | argumentPassing.py:173:15:173:15 | ControlFlowNode for a |
| argumentPassing.py:175:16:175:19 | ControlFlowNode for arg1 | argumentPassing.py:172:18:172:18 | ControlFlowNode for a |
| argumentPassing.py:179:17:179:17 | ControlFlowNode for a | argumentPassing.py:180:15:180:15 | ControlFlowNode for a |
| argumentPassing.py:182:15:182:18 | ControlFlowNode for arg1 | argumentPassing.py:179:17:179:17 | ControlFlowNode for a |
| argumentPassing.py:186:27:186:27 | ControlFlowNode for a [Dictionary element at key a] | argumentPassing.py:187:15:187:15 | ControlFlowNode for a [Dictionary element at key a] |
| argumentPassing.py:187:15:187:15 | ControlFlowNode for a [Dictionary element at key a] | argumentPassing.py:187:15:187:20 | ControlFlowNode for Subscript |
| argumentPassing.py:189:5:189:27 | KwOverflowNode for with_doublestar() [Dictionary element at key a] | argumentPassing.py:186:27:186:27 | ControlFlowNode for a [Dictionary element at key a] |
| argumentPassing.py:189:23:189:26 | ControlFlowNode for arg1 | argumentPassing.py:189:5:189:27 | KwOverflowNode for with_doublestar() [Dictionary element at key a] |
| classes.py:555:21:555:24 | ControlFlowNode for self | classes.py:557:15:557:18 | ControlFlowNode for self |
| classes.py:563:5:563:16 | SSA variable with_getitem | classes.py:565:5:565:16 | ControlFlowNode for with_getitem |
| classes.py:565:5:565:16 | ControlFlowNode for with_getitem | classes.py:555:21:555:24 | ControlFlowNode for self |
| classes.py:570:21:570:24 | ControlFlowNode for self | classes.py:573:15:573:18 | ControlFlowNode for self |
| classes.py:578:5:578:16 | SSA variable with_setitem | classes.py:581:5:581:16 | ControlFlowNode for with_setitem |
| classes.py:581:5:581:16 | ControlFlowNode for with_setitem | classes.py:570:21:570:24 | ControlFlowNode for self |
| classes.py:586:21:586:24 | ControlFlowNode for self | classes.py:588:15:588:18 | ControlFlowNode for self |
| classes.py:593:5:593:16 | SSA variable with_delitem | classes.py:595:9:595:20 | ControlFlowNode for with_delitem |
| classes.py:595:9:595:20 | ControlFlowNode for with_delitem | classes.py:586:21:586:24 | ControlFlowNode for self |
| classes.py:657:17:657:20 | ControlFlowNode for self | classes.py:659:15:659:18 | ControlFlowNode for self |
| classes.py:665:5:665:12 | SSA variable with_add | classes.py:667:5:667:12 | ControlFlowNode for with_add |
| classes.py:667:5:667:12 | ControlFlowNode for with_add | classes.py:657:17:657:20 | ControlFlowNode for self |
| classes.py:672:17:672:20 | ControlFlowNode for self | classes.py:674:15:674:18 | ControlFlowNode for self |
| classes.py:680:5:680:12 | SSA variable with_sub | classes.py:682:5:682:12 | ControlFlowNode for with_sub |
| classes.py:682:5:682:12 | ControlFlowNode for with_sub | classes.py:672:17:672:20 | ControlFlowNode for self |
| classes.py:687:17:687:20 | ControlFlowNode for self | classes.py:689:15:689:18 | ControlFlowNode for self |
| classes.py:695:5:695:12 | SSA variable with_mul | classes.py:697:5:697:12 | ControlFlowNode for with_mul |
| classes.py:697:5:697:12 | ControlFlowNode for with_mul | classes.py:687:17:687:20 | ControlFlowNode for self |
| classes.py:702:20:702:23 | ControlFlowNode for self | classes.py:704:15:704:18 | ControlFlowNode for self |
| classes.py:710:5:710:15 | SSA variable with_matmul | classes.py:712:5:712:15 | ControlFlowNode for with_matmul |
| classes.py:712:5:712:15 | ControlFlowNode for with_matmul | classes.py:702:20:702:23 | ControlFlowNode for self |
| classes.py:717:21:717:24 | ControlFlowNode for self | classes.py:719:15:719:18 | ControlFlowNode for self |
| classes.py:725:5:725:16 | SSA variable with_truediv | classes.py:727:5:727:16 | ControlFlowNode for with_truediv |
| classes.py:727:5:727:16 | ControlFlowNode for with_truediv | classes.py:717:21:717:24 | ControlFlowNode for self |
| classes.py:732:22:732:25 | ControlFlowNode for self | classes.py:734:15:734:18 | ControlFlowNode for self |
| classes.py:740:5:740:17 | SSA variable with_floordiv | classes.py:742:5:742:17 | ControlFlowNode for with_floordiv |
| classes.py:742:5:742:17 | ControlFlowNode for with_floordiv | classes.py:732:22:732:25 | ControlFlowNode for self |
| classes.py:747:17:747:20 | ControlFlowNode for self | classes.py:749:15:749:18 | ControlFlowNode for self |
| classes.py:755:5:755:12 | SSA variable with_mod | classes.py:757:5:757:12 | ControlFlowNode for with_mod |
| classes.py:757:5:757:12 | ControlFlowNode for with_mod | classes.py:747:17:747:20 | ControlFlowNode for self |
| classes.py:777:17:777:20 | ControlFlowNode for self | classes.py:779:15:779:18 | ControlFlowNode for self |
| classes.py:791:5:791:12 | SSA variable with_pow | classes.py:793:5:793:12 | ControlFlowNode for with_pow |
| classes.py:793:5:793:12 | ControlFlowNode for with_pow | classes.py:777:17:777:20 | ControlFlowNode for self |
| classes.py:798:20:798:23 | ControlFlowNode for self | classes.py:800:15:800:18 | ControlFlowNode for self |
| classes.py:806:5:806:15 | SSA variable with_lshift | classes.py:808:5:808:15 | ControlFlowNode for with_lshift |
| classes.py:808:5:808:15 | ControlFlowNode for with_lshift | classes.py:798:20:798:23 | ControlFlowNode for self |
| classes.py:813:20:813:23 | ControlFlowNode for self | classes.py:815:15:815:18 | ControlFlowNode for self |
| classes.py:821:5:821:15 | SSA variable with_rshift | classes.py:823:5:823:15 | ControlFlowNode for with_rshift |
| classes.py:823:5:823:15 | ControlFlowNode for with_rshift | classes.py:813:20:813:23 | ControlFlowNode for self |
| classes.py:828:17:828:20 | ControlFlowNode for self | classes.py:830:15:830:18 | ControlFlowNode for self |
| classes.py:836:5:836:12 | SSA variable with_and | classes.py:838:5:838:12 | ControlFlowNode for with_and |
| classes.py:838:5:838:12 | ControlFlowNode for with_and | classes.py:828:17:828:20 | ControlFlowNode for self |
| classes.py:843:17:843:20 | ControlFlowNode for self | classes.py:845:15:845:18 | ControlFlowNode for self |
| classes.py:851:5:851:12 | SSA variable with_xor | classes.py:853:5:853:12 | ControlFlowNode for with_xor |
| classes.py:853:5:853:12 | ControlFlowNode for with_xor | classes.py:843:17:843:20 | ControlFlowNode for self |
| classes.py:858:16:858:19 | ControlFlowNode for self | classes.py:860:15:860:18 | ControlFlowNode for self |
| classes.py:866:5:866:11 | SSA variable with_or | classes.py:868:5:868:11 | ControlFlowNode for with_or |
| classes.py:868:5:868:11 | ControlFlowNode for with_or | classes.py:858:16:858:19 | ControlFlowNode for self |
nodes
| argumentPassing.py:43:5:43:5 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:53:11:53:11 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:67:22:67:25 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:72:22:72:25 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:75:19:75:19 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:76:11:76:11 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:82:19:82:22 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:83:19:83:22 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:84:19:84:22 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:87:27:87:27 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:88:11:88:11 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:95:45:95:48 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:96:27:96:30 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:97:27:97:30 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:98:5:98:70 | KwUnpacked a | semmle.label | KwUnpacked a |
| argumentPassing.py:98:59:98:69 | ControlFlowNode for Dict [Dictionary element at key a] | semmle.label | ControlFlowNode for Dict [Dictionary element at key a] |
| argumentPassing.py:98:65:98:68 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:101:28:101:28 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:101:28:101:28 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:101:30:101:33 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:102:11:102:11 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:110:28:110:31 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:116:22:116:24 | ControlFlowNode for foo | semmle.label | ControlFlowNode for foo |
| argumentPassing.py:117:11:117:13 | ControlFlowNode for foo | semmle.label | ControlFlowNode for foo |
| argumentPassing.py:138:46:138:49 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:143:18:143:18 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:144:15:144:15 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:146:14:146:17 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:150:23:150:23 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:151:15:151:15 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:153:19:153:22 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:157:20:157:20 | ControlFlowNode for a [Tuple element at index 0] | semmle.label | ControlFlowNode for a [Tuple element at index 0] |
| argumentPassing.py:159:19:159:19 | ControlFlowNode for a [Tuple element at index 0] | semmle.label | ControlFlowNode for a [Tuple element at index 0] |
| argumentPassing.py:159:19:159:22 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript |
| argumentPassing.py:161:5:161:19 | PosOverflowNode for with_star() [Tuple element at index 0] | semmle.label | PosOverflowNode for with_star() [Tuple element at index 0] |
| argumentPassing.py:161:15:161:18 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:165:17:165:17 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:166:15:166:15 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:168:13:168:16 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:172:18:172:18 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:173:15:173:15 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:175:16:175:19 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:179:17:179:17 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:180:15:180:15 | ControlFlowNode for a | semmle.label | ControlFlowNode for a |
| argumentPassing.py:182:15:182:18 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| argumentPassing.py:186:27:186:27 | ControlFlowNode for a [Dictionary element at key a] | semmle.label | ControlFlowNode for a [Dictionary element at key a] |
| argumentPassing.py:187:15:187:15 | ControlFlowNode for a [Dictionary element at key a] | semmle.label | ControlFlowNode for a [Dictionary element at key a] |
| argumentPassing.py:187:15:187:20 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript |
| argumentPassing.py:189:5:189:27 | KwOverflowNode for with_doublestar() [Dictionary element at key a] | semmle.label | KwOverflowNode for with_doublestar() [Dictionary element at key a] |
| argumentPassing.py:189:23:189:26 | ControlFlowNode for arg1 | semmle.label | ControlFlowNode for arg1 |
| classes.py:555:21:555:24 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:557:15:557:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:563:5:563:16 | SSA variable with_getitem | semmle.label | SSA variable with_getitem |
| classes.py:565:5:565:16 | ControlFlowNode for with_getitem | semmle.label | ControlFlowNode for with_getitem |
| classes.py:570:21:570:24 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:573:15:573:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:578:5:578:16 | SSA variable with_setitem | semmle.label | SSA variable with_setitem |
| classes.py:581:5:581:16 | ControlFlowNode for with_setitem | semmle.label | ControlFlowNode for with_setitem |
| classes.py:586:21:586:24 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:588:15:588:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:593:5:593:16 | SSA variable with_delitem | semmle.label | SSA variable with_delitem |
| classes.py:595:9:595:20 | ControlFlowNode for with_delitem | semmle.label | ControlFlowNode for with_delitem |
| classes.py:657:17:657:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:659:15:659:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:665:5:665:12 | SSA variable with_add | semmle.label | SSA variable with_add |
| classes.py:667:5:667:12 | ControlFlowNode for with_add | semmle.label | ControlFlowNode for with_add |
| classes.py:672:17:672:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:674:15:674:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:680:5:680:12 | SSA variable with_sub | semmle.label | SSA variable with_sub |
| classes.py:682:5:682:12 | ControlFlowNode for with_sub | semmle.label | ControlFlowNode for with_sub |
| classes.py:687:17:687:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:689:15:689:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:695:5:695:12 | SSA variable with_mul | semmle.label | SSA variable with_mul |
| classes.py:697:5:697:12 | ControlFlowNode for with_mul | semmle.label | ControlFlowNode for with_mul |
| classes.py:702:20:702:23 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:704:15:704:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:710:5:710:15 | SSA variable with_matmul | semmle.label | SSA variable with_matmul |
| classes.py:712:5:712:15 | ControlFlowNode for with_matmul | semmle.label | ControlFlowNode for with_matmul |
| classes.py:717:21:717:24 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:719:15:719:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:725:5:725:16 | SSA variable with_truediv | semmle.label | SSA variable with_truediv |
| classes.py:727:5:727:16 | ControlFlowNode for with_truediv | semmle.label | ControlFlowNode for with_truediv |
| classes.py:732:22:732:25 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:734:15:734:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:740:5:740:17 | SSA variable with_floordiv | semmle.label | SSA variable with_floordiv |
| classes.py:742:5:742:17 | ControlFlowNode for with_floordiv | semmle.label | ControlFlowNode for with_floordiv |
| classes.py:747:17:747:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:749:15:749:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:755:5:755:12 | SSA variable with_mod | semmle.label | SSA variable with_mod |
| classes.py:757:5:757:12 | ControlFlowNode for with_mod | semmle.label | ControlFlowNode for with_mod |
| classes.py:777:17:777:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:779:15:779:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:791:5:791:12 | SSA variable with_pow | semmle.label | SSA variable with_pow |
| classes.py:793:5:793:12 | ControlFlowNode for with_pow | semmle.label | ControlFlowNode for with_pow |
| classes.py:798:20:798:23 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:800:15:800:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:806:5:806:15 | SSA variable with_lshift | semmle.label | SSA variable with_lshift |
| classes.py:808:5:808:15 | ControlFlowNode for with_lshift | semmle.label | ControlFlowNode for with_lshift |
| classes.py:813:20:813:23 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:815:15:815:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:821:5:821:15 | SSA variable with_rshift | semmle.label | SSA variable with_rshift |
| classes.py:823:5:823:15 | ControlFlowNode for with_rshift | semmle.label | ControlFlowNode for with_rshift |
| classes.py:828:17:828:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:830:15:830:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:836:5:836:12 | SSA variable with_and | semmle.label | SSA variable with_and |
| classes.py:838:5:838:12 | ControlFlowNode for with_and | semmle.label | ControlFlowNode for with_and |
| classes.py:843:17:843:20 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:845:15:845:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:851:5:851:12 | SSA variable with_xor | semmle.label | SSA variable with_xor |
| classes.py:853:5:853:12 | ControlFlowNode for with_xor | semmle.label | ControlFlowNode for with_xor |
| classes.py:858:16:858:19 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:860:15:860:18 | ControlFlowNode for self | semmle.label | ControlFlowNode for self |
| classes.py:866:5:866:11 | SSA variable with_or | semmle.label | SSA variable with_or |
| classes.py:868:5:868:11 | ControlFlowNode for with_or | semmle.label | ControlFlowNode for with_or |
subpaths
#select
| argumentPassing.py:67:22:67:25 | ControlFlowNode for arg1 | argumentPassing.py:67:22:67:25 | ControlFlowNode for arg1 | argumentPassing.py:53:11:53:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:72:22:72:25 | ControlFlowNode for arg1 | argumentPassing.py:72:22:72:25 | ControlFlowNode for arg1 | argumentPassing.py:53:11:53:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:82:19:82:22 | ControlFlowNode for arg1 | argumentPassing.py:82:19:82:22 | ControlFlowNode for arg1 | argumentPassing.py:76:11:76:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:83:19:83:22 | ControlFlowNode for arg1 | argumentPassing.py:83:19:83:22 | ControlFlowNode for arg1 | argumentPassing.py:76:11:76:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:84:19:84:22 | ControlFlowNode for arg1 | argumentPassing.py:84:19:84:22 | ControlFlowNode for arg1 | argumentPassing.py:76:11:76:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:95:45:95:48 | ControlFlowNode for arg1 | argumentPassing.py:95:45:95:48 | ControlFlowNode for arg1 | argumentPassing.py:88:11:88:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:96:27:96:30 | ControlFlowNode for arg1 | argumentPassing.py:96:27:96:30 | ControlFlowNode for arg1 | argumentPassing.py:88:11:88:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:97:27:97:30 | ControlFlowNode for arg1 | argumentPassing.py:97:27:97:30 | ControlFlowNode for arg1 | argumentPassing.py:88:11:88:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:98:65:98:68 | ControlFlowNode for arg1 | argumentPassing.py:98:65:98:68 | ControlFlowNode for arg1 | argumentPassing.py:88:11:88:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:101:30:101:33 | ControlFlowNode for arg1 | argumentPassing.py:101:30:101:33 | ControlFlowNode for arg1 | argumentPassing.py:102:11:102:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:110:28:110:31 | ControlFlowNode for arg1 | argumentPassing.py:110:28:110:31 | ControlFlowNode for arg1 | argumentPassing.py:102:11:102:11 | ControlFlowNode for a | Flow found |
| argumentPassing.py:138:46:138:49 | ControlFlowNode for arg1 | argumentPassing.py:138:46:138:49 | ControlFlowNode for arg1 | argumentPassing.py:117:11:117:13 | ControlFlowNode for foo | Flow found |
| argumentPassing.py:146:14:146:17 | ControlFlowNode for arg1 | argumentPassing.py:146:14:146:17 | ControlFlowNode for arg1 | argumentPassing.py:144:15:144:15 | ControlFlowNode for a | Flow found |
| argumentPassing.py:153:19:153:22 | ControlFlowNode for arg1 | argumentPassing.py:153:19:153:22 | ControlFlowNode for arg1 | argumentPassing.py:151:15:151:15 | ControlFlowNode for a | Flow found |
| argumentPassing.py:161:15:161:18 | ControlFlowNode for arg1 | argumentPassing.py:161:15:161:18 | ControlFlowNode for arg1 | argumentPassing.py:159:19:159:22 | ControlFlowNode for Subscript | Flow found |
| argumentPassing.py:168:13:168:16 | ControlFlowNode for arg1 | argumentPassing.py:168:13:168:16 | ControlFlowNode for arg1 | argumentPassing.py:166:15:166:15 | ControlFlowNode for a | Flow found |
| argumentPassing.py:175:16:175:19 | ControlFlowNode for arg1 | argumentPassing.py:175:16:175:19 | ControlFlowNode for arg1 | argumentPassing.py:173:15:173:15 | ControlFlowNode for a | Flow found |
| argumentPassing.py:182:15:182:18 | ControlFlowNode for arg1 | argumentPassing.py:182:15:182:18 | ControlFlowNode for arg1 | argumentPassing.py:180:15:180:15 | ControlFlowNode for a | Flow found |
| argumentPassing.py:189:23:189:26 | ControlFlowNode for arg1 | argumentPassing.py:189:23:189:26 | ControlFlowNode for arg1 | argumentPassing.py:187:15:187:20 | ControlFlowNode for Subscript | Flow found |
| classes.py:563:5:563:16 | SSA variable with_getitem | classes.py:563:5:563:16 | SSA variable with_getitem | classes.py:557:15:557:18 | ControlFlowNode for self | Flow found |
| classes.py:578:5:578:16 | SSA variable with_setitem | classes.py:578:5:578:16 | SSA variable with_setitem | classes.py:573:15:573:18 | ControlFlowNode for self | Flow found |
| classes.py:593:5:593:16 | SSA variable with_delitem | classes.py:593:5:593:16 | SSA variable with_delitem | classes.py:588:15:588:18 | ControlFlowNode for self | Flow found |
| classes.py:665:5:665:12 | SSA variable with_add | classes.py:665:5:665:12 | SSA variable with_add | classes.py:659:15:659:18 | ControlFlowNode for self | Flow found |
| classes.py:680:5:680:12 | SSA variable with_sub | classes.py:680:5:680:12 | SSA variable with_sub | classes.py:674:15:674:18 | ControlFlowNode for self | Flow found |
| classes.py:695:5:695:12 | SSA variable with_mul | classes.py:695:5:695:12 | SSA variable with_mul | classes.py:689:15:689:18 | ControlFlowNode for self | Flow found |
| classes.py:710:5:710:15 | SSA variable with_matmul | classes.py:710:5:710:15 | SSA variable with_matmul | classes.py:704:15:704:18 | ControlFlowNode for self | Flow found |
| classes.py:725:5:725:16 | SSA variable with_truediv | classes.py:725:5:725:16 | SSA variable with_truediv | classes.py:719:15:719:18 | ControlFlowNode for self | Flow found |
| classes.py:740:5:740:17 | SSA variable with_floordiv | classes.py:740:5:740:17 | SSA variable with_floordiv | classes.py:734:15:734:18 | ControlFlowNode for self | Flow found |
| classes.py:755:5:755:12 | SSA variable with_mod | classes.py:755:5:755:12 | SSA variable with_mod | classes.py:749:15:749:18 | ControlFlowNode for self | Flow found |
| classes.py:791:5:791:12 | SSA variable with_pow | classes.py:791:5:791:12 | SSA variable with_pow | classes.py:779:15:779:18 | ControlFlowNode for self | Flow found |
| classes.py:806:5:806:15 | SSA variable with_lshift | classes.py:806:5:806:15 | SSA variable with_lshift | classes.py:800:15:800:18 | ControlFlowNode for self | Flow found |
| classes.py:821:5:821:15 | SSA variable with_rshift | classes.py:821:5:821:15 | SSA variable with_rshift | classes.py:815:15:815:18 | ControlFlowNode for self | Flow found |
| classes.py:836:5:836:12 | SSA variable with_and | classes.py:836:5:836:12 | SSA variable with_and | classes.py:830:15:830:18 | ControlFlowNode for self | Flow found |
| classes.py:851:5:851:12 | SSA variable with_xor | classes.py:851:5:851:12 | SSA variable with_xor | classes.py:845:15:845:18 | ControlFlowNode for self | Flow found |
| classes.py:866:5:866:11 | SSA variable with_or | classes.py:866:5:866:11 | SSA variable with_or | classes.py:860:15:860:18 | ControlFlowNode for self | Flow found |

View File

@@ -1,48 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg1"
or
exists(AssignmentDefinition def, DataFlowPrivate::DataFlowCall call |
def.getVariable() = node.(DataFlow::EssaNode).getVar() and
def.getValue() = call.getNode() and
call.getNode().(CallNode).getFunction().(NameNode).getId().matches("With\\_%")
) and
node.(DataFlow::EssaNode).getVar().getName().matches("with\\_%")
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK1" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,153 +0,0 @@
edges
| argumentPassing.py:44:5:44:5 | ControlFlowNode for b | argumentPassing.py:54:11:54:11 | ControlFlowNode for b |
| argumentPassing.py:72:28:72:31 | ControlFlowNode for arg2 | argumentPassing.py:44:5:44:5 | ControlFlowNode for b |
| argumentPassing.py:75:25:75:25 | ControlFlowNode for b | argumentPassing.py:77:11:77:11 | ControlFlowNode for b |
| argumentPassing.py:82:25:82:28 | ControlFlowNode for arg2 | argumentPassing.py:75:25:75:25 | ControlFlowNode for b |
| argumentPassing.py:83:27:83:30 | ControlFlowNode for arg2 | argumentPassing.py:75:25:75:25 | ControlFlowNode for b |
| argumentPassing.py:87:30:87:30 | ControlFlowNode for b | argumentPassing.py:89:11:89:11 | ControlFlowNode for b |
| argumentPassing.py:95:29:95:32 | ControlFlowNode for arg2 | argumentPassing.py:87:30:87:30 | ControlFlowNode for b |
| argumentPassing.py:98:5:98:70 | KwUnpacked b | argumentPassing.py:87:30:87:30 | ControlFlowNode for b |
| argumentPassing.py:98:29:98:39 | ControlFlowNode for Dict [Dictionary element at key b] | argumentPassing.py:98:5:98:70 | KwUnpacked b |
| argumentPassing.py:98:35:98:38 | ControlFlowNode for arg2 | argumentPassing.py:98:29:98:39 | ControlFlowNode for Dict [Dictionary element at key b] |
| argumentPassing.py:101:36:101:36 | ControlFlowNode for b | argumentPassing.py:103:11:103:11 | ControlFlowNode for b |
| argumentPassing.py:101:36:101:36 | ControlFlowNode for b | argumentPassing.py:103:11:103:11 | ControlFlowNode for b |
| argumentPassing.py:101:38:101:41 | ControlFlowNode for arg2 | argumentPassing.py:101:36:101:36 | ControlFlowNode for b |
| argumentPassing.py:111:30:111:33 | ControlFlowNode for arg2 | argumentPassing.py:101:36:101:36 | ControlFlowNode for b |
| argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key bar] | argumentPassing.py:118:20:118:25 | ControlFlowNode for kwargs [Dictionary element at key bar] |
| argumentPassing.py:118:5:118:26 | KwUnpacked bar | argumentPassing.py:123:18:123:20 | ControlFlowNode for bar |
| argumentPassing.py:118:20:118:25 | ControlFlowNode for kwargs [Dictionary element at key bar] | argumentPassing.py:118:5:118:26 | KwUnpacked bar |
| argumentPassing.py:123:18:123:20 | ControlFlowNode for bar | argumentPassing.py:124:11:124:13 | ControlFlowNode for bar |
| argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key bar] | argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key bar] |
| argumentPassing.py:138:36:138:39 | ControlFlowNode for arg2 | argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key bar] |
| classes.py:555:27:555:29 | ControlFlowNode for key | classes.py:556:15:556:17 | ControlFlowNode for key |
| classes.py:565:18:565:21 | ControlFlowNode for arg2 | classes.py:555:27:555:29 | ControlFlowNode for key |
| classes.py:570:27:570:29 | ControlFlowNode for key | classes.py:572:15:572:17 | ControlFlowNode for key |
| classes.py:581:18:581:21 | ControlFlowNode for arg2 | classes.py:570:27:570:29 | ControlFlowNode for key |
| classes.py:586:27:586:29 | ControlFlowNode for key | classes.py:587:15:587:17 | ControlFlowNode for key |
| classes.py:595:22:595:25 | ControlFlowNode for arg2 | classes.py:586:27:586:29 | ControlFlowNode for key |
| classes.py:657:23:657:27 | ControlFlowNode for other | classes.py:658:15:658:19 | ControlFlowNode for other |
| classes.py:667:16:667:19 | ControlFlowNode for arg2 | classes.py:657:23:657:27 | ControlFlowNode for other |
| classes.py:672:23:672:27 | ControlFlowNode for other | classes.py:673:15:673:19 | ControlFlowNode for other |
| classes.py:682:16:682:19 | ControlFlowNode for arg2 | classes.py:672:23:672:27 | ControlFlowNode for other |
| classes.py:687:23:687:27 | ControlFlowNode for other | classes.py:688:15:688:19 | ControlFlowNode for other |
| classes.py:697:16:697:19 | ControlFlowNode for arg2 | classes.py:687:23:687:27 | ControlFlowNode for other |
| classes.py:702:26:702:30 | ControlFlowNode for other | classes.py:703:15:703:19 | ControlFlowNode for other |
| classes.py:712:19:712:22 | ControlFlowNode for arg2 | classes.py:702:26:702:30 | ControlFlowNode for other |
| classes.py:717:27:717:31 | ControlFlowNode for other | classes.py:718:15:718:19 | ControlFlowNode for other |
| classes.py:727:20:727:23 | ControlFlowNode for arg2 | classes.py:717:27:717:31 | ControlFlowNode for other |
| classes.py:732:28:732:32 | ControlFlowNode for other | classes.py:733:15:733:19 | ControlFlowNode for other |
| classes.py:742:22:742:25 | ControlFlowNode for arg2 | classes.py:732:28:732:32 | ControlFlowNode for other |
| classes.py:747:23:747:27 | ControlFlowNode for other | classes.py:748:15:748:19 | ControlFlowNode for other |
| classes.py:757:16:757:19 | ControlFlowNode for arg2 | classes.py:747:23:747:27 | ControlFlowNode for other |
| classes.py:777:23:777:27 | ControlFlowNode for other | classes.py:778:15:778:19 | ControlFlowNode for other |
| classes.py:793:17:793:20 | ControlFlowNode for arg2 | classes.py:777:23:777:27 | ControlFlowNode for other |
| classes.py:798:26:798:30 | ControlFlowNode for other | classes.py:799:15:799:19 | ControlFlowNode for other |
| classes.py:808:20:808:23 | ControlFlowNode for arg2 | classes.py:798:26:798:30 | ControlFlowNode for other |
| classes.py:813:26:813:30 | ControlFlowNode for other | classes.py:814:15:814:19 | ControlFlowNode for other |
| classes.py:823:20:823:23 | ControlFlowNode for arg2 | classes.py:813:26:813:30 | ControlFlowNode for other |
| classes.py:828:23:828:27 | ControlFlowNode for other | classes.py:829:15:829:19 | ControlFlowNode for other |
| classes.py:838:16:838:19 | ControlFlowNode for arg2 | classes.py:828:23:828:27 | ControlFlowNode for other |
| classes.py:843:23:843:27 | ControlFlowNode for other | classes.py:844:15:844:19 | ControlFlowNode for other |
| classes.py:853:16:853:19 | ControlFlowNode for arg2 | classes.py:843:23:843:27 | ControlFlowNode for other |
| classes.py:858:22:858:26 | ControlFlowNode for other | classes.py:859:15:859:19 | ControlFlowNode for other |
| classes.py:868:15:868:18 | ControlFlowNode for arg2 | classes.py:858:22:858:26 | ControlFlowNode for other |
nodes
| argumentPassing.py:44:5:44:5 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:54:11:54:11 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:72:28:72:31 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:75:25:75:25 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:77:11:77:11 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:82:25:82:28 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:83:27:83:30 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:87:30:87:30 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:89:11:89:11 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:95:29:95:32 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:98:5:98:70 | KwUnpacked b | semmle.label | KwUnpacked b |
| argumentPassing.py:98:29:98:39 | ControlFlowNode for Dict [Dictionary element at key b] | semmle.label | ControlFlowNode for Dict [Dictionary element at key b] |
| argumentPassing.py:98:35:98:38 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:101:36:101:36 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:101:36:101:36 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:101:38:101:41 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:103:11:103:11 | ControlFlowNode for b | semmle.label | ControlFlowNode for b |
| argumentPassing.py:111:30:111:33 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key bar] | semmle.label | ControlFlowNode for kwargs [Dictionary element at key bar] |
| argumentPassing.py:118:5:118:26 | KwUnpacked bar | semmle.label | KwUnpacked bar |
| argumentPassing.py:118:20:118:25 | ControlFlowNode for kwargs [Dictionary element at key bar] | semmle.label | ControlFlowNode for kwargs [Dictionary element at key bar] |
| argumentPassing.py:123:18:123:20 | ControlFlowNode for bar | semmle.label | ControlFlowNode for bar |
| argumentPassing.py:124:11:124:13 | ControlFlowNode for bar | semmle.label | ControlFlowNode for bar |
| argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key bar] | semmle.label | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key bar] |
| argumentPassing.py:138:36:138:39 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:555:27:555:29 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:556:15:556:17 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:565:18:565:21 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:570:27:570:29 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:572:15:572:17 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:581:18:581:21 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:586:27:586:29 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:587:15:587:17 | ControlFlowNode for key | semmle.label | ControlFlowNode for key |
| classes.py:595:22:595:25 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:657:23:657:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:658:15:658:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:667:16:667:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:672:23:672:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:673:15:673:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:682:16:682:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:687:23:687:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:688:15:688:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:697:16:697:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:702:26:702:30 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:703:15:703:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:712:19:712:22 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:717:27:717:31 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:718:15:718:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:727:20:727:23 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:732:28:732:32 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:733:15:733:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:742:22:742:25 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:747:23:747:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:748:15:748:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:757:16:757:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:777:23:777:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:778:15:778:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:793:17:793:20 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:798:26:798:30 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:799:15:799:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:808:20:808:23 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:813:26:813:30 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:814:15:814:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:823:20:823:23 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:828:23:828:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:829:15:829:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:838:16:838:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:843:23:843:27 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:844:15:844:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:853:16:853:19 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
| classes.py:858:22:858:26 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:859:15:859:19 | ControlFlowNode for other | semmle.label | ControlFlowNode for other |
| classes.py:868:15:868:18 | ControlFlowNode for arg2 | semmle.label | ControlFlowNode for arg2 |
subpaths
#select
| argumentPassing.py:72:28:72:31 | ControlFlowNode for arg2 | argumentPassing.py:72:28:72:31 | ControlFlowNode for arg2 | argumentPassing.py:54:11:54:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:82:25:82:28 | ControlFlowNode for arg2 | argumentPassing.py:82:25:82:28 | ControlFlowNode for arg2 | argumentPassing.py:77:11:77:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:83:27:83:30 | ControlFlowNode for arg2 | argumentPassing.py:83:27:83:30 | ControlFlowNode for arg2 | argumentPassing.py:77:11:77:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:95:29:95:32 | ControlFlowNode for arg2 | argumentPassing.py:95:29:95:32 | ControlFlowNode for arg2 | argumentPassing.py:89:11:89:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:98:35:98:38 | ControlFlowNode for arg2 | argumentPassing.py:98:35:98:38 | ControlFlowNode for arg2 | argumentPassing.py:89:11:89:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:101:38:101:41 | ControlFlowNode for arg2 | argumentPassing.py:101:38:101:41 | ControlFlowNode for arg2 | argumentPassing.py:103:11:103:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:111:30:111:33 | ControlFlowNode for arg2 | argumentPassing.py:111:30:111:33 | ControlFlowNode for arg2 | argumentPassing.py:103:11:103:11 | ControlFlowNode for b | Flow found |
| argumentPassing.py:138:36:138:39 | ControlFlowNode for arg2 | argumentPassing.py:138:36:138:39 | ControlFlowNode for arg2 | argumentPassing.py:124:11:124:13 | ControlFlowNode for bar | Flow found |
| classes.py:565:18:565:21 | ControlFlowNode for arg2 | classes.py:565:18:565:21 | ControlFlowNode for arg2 | classes.py:556:15:556:17 | ControlFlowNode for key | Flow found |
| classes.py:581:18:581:21 | ControlFlowNode for arg2 | classes.py:581:18:581:21 | ControlFlowNode for arg2 | classes.py:572:15:572:17 | ControlFlowNode for key | Flow found |
| classes.py:595:22:595:25 | ControlFlowNode for arg2 | classes.py:595:22:595:25 | ControlFlowNode for arg2 | classes.py:587:15:587:17 | ControlFlowNode for key | Flow found |
| classes.py:667:16:667:19 | ControlFlowNode for arg2 | classes.py:667:16:667:19 | ControlFlowNode for arg2 | classes.py:658:15:658:19 | ControlFlowNode for other | Flow found |
| classes.py:682:16:682:19 | ControlFlowNode for arg2 | classes.py:682:16:682:19 | ControlFlowNode for arg2 | classes.py:673:15:673:19 | ControlFlowNode for other | Flow found |
| classes.py:697:16:697:19 | ControlFlowNode for arg2 | classes.py:697:16:697:19 | ControlFlowNode for arg2 | classes.py:688:15:688:19 | ControlFlowNode for other | Flow found |
| classes.py:712:19:712:22 | ControlFlowNode for arg2 | classes.py:712:19:712:22 | ControlFlowNode for arg2 | classes.py:703:15:703:19 | ControlFlowNode for other | Flow found |
| classes.py:727:20:727:23 | ControlFlowNode for arg2 | classes.py:727:20:727:23 | ControlFlowNode for arg2 | classes.py:718:15:718:19 | ControlFlowNode for other | Flow found |
| classes.py:742:22:742:25 | ControlFlowNode for arg2 | classes.py:742:22:742:25 | ControlFlowNode for arg2 | classes.py:733:15:733:19 | ControlFlowNode for other | Flow found |
| classes.py:757:16:757:19 | ControlFlowNode for arg2 | classes.py:757:16:757:19 | ControlFlowNode for arg2 | classes.py:748:15:748:19 | ControlFlowNode for other | Flow found |
| classes.py:793:17:793:20 | ControlFlowNode for arg2 | classes.py:793:17:793:20 | ControlFlowNode for arg2 | classes.py:778:15:778:19 | ControlFlowNode for other | Flow found |
| classes.py:808:20:808:23 | ControlFlowNode for arg2 | classes.py:808:20:808:23 | ControlFlowNode for arg2 | classes.py:799:15:799:19 | ControlFlowNode for other | Flow found |
| classes.py:823:20:823:23 | ControlFlowNode for arg2 | classes.py:823:20:823:23 | ControlFlowNode for arg2 | classes.py:814:15:814:19 | ControlFlowNode for other | Flow found |
| classes.py:838:16:838:19 | ControlFlowNode for arg2 | classes.py:838:16:838:19 | ControlFlowNode for arg2 | classes.py:829:15:829:19 | ControlFlowNode for other | Flow found |
| classes.py:853:16:853:19 | ControlFlowNode for arg2 | classes.py:853:16:853:19 | ControlFlowNode for arg2 | classes.py:844:15:844:19 | ControlFlowNode for other | Flow found |
| classes.py:868:15:868:18 | ControlFlowNode for arg2 | classes.py:868:15:868:18 | ControlFlowNode for arg2 | classes.py:859:15:859:19 | ControlFlowNode for other | Flow found |

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg2"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK2" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,69 +0,0 @@
edges
| argumentPassing.py:46:5:46:5 | ControlFlowNode for c | argumentPassing.py:55:11:55:11 | ControlFlowNode for c |
| argumentPassing.py:72:34:72:37 | ControlFlowNode for arg3 | argumentPassing.py:46:5:46:5 | ControlFlowNode for c |
| argumentPassing.py:87:33:87:33 | ControlFlowNode for c | argumentPassing.py:90:11:90:11 | ControlFlowNode for c |
| argumentPassing.py:95:37:95:40 | ControlFlowNode for arg3 | argumentPassing.py:87:33:87:33 | ControlFlowNode for c |
| argumentPassing.py:97:5:97:54 | KwUnpacked c | argumentPassing.py:87:33:87:33 | ControlFlowNode for c |
| argumentPassing.py:97:35:97:45 | ControlFlowNode for Dict [Dictionary element at key c] | argumentPassing.py:97:5:97:54 | KwUnpacked c |
| argumentPassing.py:97:41:97:44 | ControlFlowNode for arg3 | argumentPassing.py:97:35:97:45 | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:98:5:98:70 | KwUnpacked c | argumentPassing.py:87:33:87:33 | ControlFlowNode for c |
| argumentPassing.py:98:44:98:54 | ControlFlowNode for Dict [Dictionary element at key c] | argumentPassing.py:98:5:98:70 | KwUnpacked c |
| argumentPassing.py:98:50:98:53 | ControlFlowNode for arg3 | argumentPassing.py:98:44:98:54 | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:101:44:101:44 | ControlFlowNode for c | argumentPassing.py:104:11:104:11 | ControlFlowNode for c |
| argumentPassing.py:101:44:101:44 | ControlFlowNode for c | argumentPassing.py:104:11:104:11 | ControlFlowNode for c |
| argumentPassing.py:101:46:101:49 | ControlFlowNode for arg3 | argumentPassing.py:101:44:101:44 | ControlFlowNode for c |
| argumentPassing.py:112:5:112:41 | KwUnpacked c | argumentPassing.py:101:44:101:44 | ControlFlowNode for c |
| argumentPassing.py:112:30:112:40 | ControlFlowNode for Dict [Dictionary element at key c] | argumentPassing.py:112:5:112:41 | KwUnpacked c |
| argumentPassing.py:112:36:112:39 | ControlFlowNode for arg3 | argumentPassing.py:112:30:112:40 | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key baz] | argumentPassing.py:118:5:118:26 | KwOverflowNode for grab_bar_baz() [Dictionary element at key baz] |
| argumentPassing.py:118:5:118:26 | KwOverflowNode for grab_bar_baz() [Dictionary element at key baz] | argumentPassing.py:123:25:123:30 | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:123:25:123:30 | ControlFlowNode for kwargs [Dictionary element at key baz] | argumentPassing.py:129:16:129:21 | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:129:5:129:22 | KwUnpacked baz | argumentPassing.py:132:14:132:16 | ControlFlowNode for baz |
| argumentPassing.py:129:16:129:21 | ControlFlowNode for kwargs [Dictionary element at key baz] | argumentPassing.py:129:5:129:22 | KwUnpacked baz |
| argumentPassing.py:132:14:132:16 | ControlFlowNode for baz | argumentPassing.py:133:11:133:13 | ControlFlowNode for baz |
| argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key baz] | argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:138:26:138:29 | ControlFlowNode for arg3 | argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key baz] |
| classes.py:570:32:570:36 | ControlFlowNode for value | classes.py:571:15:571:19 | ControlFlowNode for value |
| classes.py:581:26:581:29 | ControlFlowNode for arg3 | classes.py:570:32:570:36 | ControlFlowNode for value |
nodes
| argumentPassing.py:46:5:46:5 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:55:11:55:11 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:72:34:72:37 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:87:33:87:33 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:90:11:90:11 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:95:37:95:40 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:97:5:97:54 | KwUnpacked c | semmle.label | KwUnpacked c |
| argumentPassing.py:97:35:97:45 | ControlFlowNode for Dict [Dictionary element at key c] | semmle.label | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:97:41:97:44 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:98:5:98:70 | KwUnpacked c | semmle.label | KwUnpacked c |
| argumentPassing.py:98:44:98:54 | ControlFlowNode for Dict [Dictionary element at key c] | semmle.label | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:98:50:98:53 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:101:44:101:44 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:101:44:101:44 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:101:46:101:49 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:104:11:104:11 | ControlFlowNode for c | semmle.label | ControlFlowNode for c |
| argumentPassing.py:112:5:112:41 | KwUnpacked c | semmle.label | KwUnpacked c |
| argumentPassing.py:112:30:112:40 | ControlFlowNode for Dict [Dictionary element at key c] | semmle.label | ControlFlowNode for Dict [Dictionary element at key c] |
| argumentPassing.py:112:36:112:39 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| argumentPassing.py:116:29:116:34 | ControlFlowNode for kwargs [Dictionary element at key baz] | semmle.label | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:118:5:118:26 | KwOverflowNode for grab_bar_baz() [Dictionary element at key baz] | semmle.label | KwOverflowNode for grab_bar_baz() [Dictionary element at key baz] |
| argumentPassing.py:123:25:123:30 | ControlFlowNode for kwargs [Dictionary element at key baz] | semmle.label | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:129:5:129:22 | KwUnpacked baz | semmle.label | KwUnpacked baz |
| argumentPassing.py:129:16:129:21 | ControlFlowNode for kwargs [Dictionary element at key baz] | semmle.label | ControlFlowNode for kwargs [Dictionary element at key baz] |
| argumentPassing.py:132:14:132:16 | ControlFlowNode for baz | semmle.label | ControlFlowNode for baz |
| argumentPassing.py:133:11:133:13 | ControlFlowNode for baz | semmle.label | ControlFlowNode for baz |
| argumentPassing.py:138:5:138:50 | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key baz] | semmle.label | KwOverflowNode for grab_foo_bar_baz() [Dictionary element at key baz] |
| argumentPassing.py:138:26:138:29 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
| classes.py:570:32:570:36 | ControlFlowNode for value | semmle.label | ControlFlowNode for value |
| classes.py:571:15:571:19 | ControlFlowNode for value | semmle.label | ControlFlowNode for value |
| classes.py:581:26:581:29 | ControlFlowNode for arg3 | semmle.label | ControlFlowNode for arg3 |
subpaths
#select
| argumentPassing.py:72:34:72:37 | ControlFlowNode for arg3 | argumentPassing.py:72:34:72:37 | ControlFlowNode for arg3 | argumentPassing.py:55:11:55:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:95:37:95:40 | ControlFlowNode for arg3 | argumentPassing.py:95:37:95:40 | ControlFlowNode for arg3 | argumentPassing.py:90:11:90:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:97:41:97:44 | ControlFlowNode for arg3 | argumentPassing.py:97:41:97:44 | ControlFlowNode for arg3 | argumentPassing.py:90:11:90:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:98:50:98:53 | ControlFlowNode for arg3 | argumentPassing.py:98:50:98:53 | ControlFlowNode for arg3 | argumentPassing.py:90:11:90:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:101:46:101:49 | ControlFlowNode for arg3 | argumentPassing.py:101:46:101:49 | ControlFlowNode for arg3 | argumentPassing.py:104:11:104:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:112:36:112:39 | ControlFlowNode for arg3 | argumentPassing.py:112:36:112:39 | ControlFlowNode for arg3 | argumentPassing.py:104:11:104:11 | ControlFlowNode for c | Flow found |
| argumentPassing.py:138:26:138:29 | ControlFlowNode for arg3 | argumentPassing.py:138:26:138:29 | ControlFlowNode for arg3 | argumentPassing.py:133:11:133:13 | ControlFlowNode for baz | Flow found |
| classes.py:581:26:581:29 | ControlFlowNode for arg3 | classes.py:581:26:581:29 | ControlFlowNode for arg3 | classes.py:571:15:571:19 | ControlFlowNode for value | Flow found |

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg3"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK3" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,10 +0,0 @@
edges
| argumentPassing.py:47:5:47:5 | ControlFlowNode for d | argumentPassing.py:56:11:56:11 | ControlFlowNode for d |
| argumentPassing.py:47:7:47:10 | ControlFlowNode for arg4 | argumentPassing.py:47:5:47:5 | ControlFlowNode for d |
nodes
| argumentPassing.py:47:5:47:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d |
| argumentPassing.py:47:7:47:10 | ControlFlowNode for arg4 | semmle.label | ControlFlowNode for arg4 |
| argumentPassing.py:56:11:56:11 | ControlFlowNode for d | semmle.label | ControlFlowNode for d |
subpaths
#select
| argumentPassing.py:47:7:47:10 | ControlFlowNode for arg4 | argumentPassing.py:47:7:47:10 | ControlFlowNode for arg4 | argumentPassing.py:56:11:56:11 | ControlFlowNode for d | Flow found |

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg4"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK4" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,10 +0,0 @@
edges
| argumentPassing.py:49:5:49:5 | ControlFlowNode for e | argumentPassing.py:57:11:57:11 | ControlFlowNode for e |
| argumentPassing.py:49:7:49:10 | ControlFlowNode for arg5 | argumentPassing.py:49:5:49:5 | ControlFlowNode for e |
nodes
| argumentPassing.py:49:5:49:5 | ControlFlowNode for e | semmle.label | ControlFlowNode for e |
| argumentPassing.py:49:7:49:10 | ControlFlowNode for arg5 | semmle.label | ControlFlowNode for arg5 |
| argumentPassing.py:57:11:57:11 | ControlFlowNode for e | semmle.label | ControlFlowNode for e |
subpaths
#select
| argumentPassing.py:49:7:49:10 | ControlFlowNode for arg5 | argumentPassing.py:49:7:49:10 | ControlFlowNode for arg5 | argumentPassing.py:57:11:57:11 | ControlFlowNode for e | Flow found |

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg5"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK5" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,4 +0,0 @@
edges
nodes
subpaths
#select

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg6"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK6" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"

View File

@@ -1,16 +0,0 @@
edges
| argumentPassing.py:51:7:51:7 | ControlFlowNode for g [Dictionary element at key g] | argumentPassing.py:60:15:60:15 | ControlFlowNode for g [Dictionary element at key g] |
| argumentPassing.py:60:15:60:15 | ControlFlowNode for g [Dictionary element at key g] | argumentPassing.py:60:15:60:20 | ControlFlowNode for Subscript |
| argumentPassing.py:67:5:67:81 | KwOverflowNode for argument_passing() [Dictionary element at key g] | argumentPassing.py:51:7:51:7 | ControlFlowNode for g [Dictionary element at key g] |
| argumentPassing.py:67:59:67:80 | ControlFlowNode for Dict [Dictionary element at key g] | argumentPassing.py:67:5:67:81 | KwOverflowNode for argument_passing() [Dictionary element at key g] |
| argumentPassing.py:67:76:67:79 | ControlFlowNode for arg7 | argumentPassing.py:67:59:67:80 | ControlFlowNode for Dict [Dictionary element at key g] |
nodes
| argumentPassing.py:51:7:51:7 | ControlFlowNode for g [Dictionary element at key g] | semmle.label | ControlFlowNode for g [Dictionary element at key g] |
| argumentPassing.py:60:15:60:15 | ControlFlowNode for g [Dictionary element at key g] | semmle.label | ControlFlowNode for g [Dictionary element at key g] |
| argumentPassing.py:60:15:60:20 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript |
| argumentPassing.py:67:5:67:81 | KwOverflowNode for argument_passing() [Dictionary element at key g] | semmle.label | KwOverflowNode for argument_passing() [Dictionary element at key g] |
| argumentPassing.py:67:59:67:80 | ControlFlowNode for Dict [Dictionary element at key g] | semmle.label | ControlFlowNode for Dict [Dictionary element at key g] |
| argumentPassing.py:67:76:67:79 | ControlFlowNode for arg7 | semmle.label | ControlFlowNode for arg7 |
subpaths
#select
| argumentPassing.py:67:76:67:79 | ControlFlowNode for arg7 | argumentPassing.py:67:76:67:79 | ControlFlowNode for arg7 | argumentPassing.py:60:15:60:20 | ControlFlowNode for Subscript | Flow found |

View File

@@ -1,40 +0,0 @@
/**
* @kind path-problem
*/
import python
import semmle.python.dataflow.new.DataFlow
import DataFlow::PathGraph
/**
* A configuration to check routing of arguments through magic methods.
*/
class ArgumentRoutingConfig extends DataFlow::Configuration {
ArgumentRoutingConfig() { this = "ArgumentRoutingConfig" }
override predicate isSource(DataFlow::Node node) {
node.(DataFlow::CfgNode).getNode().(NameNode).getId() = "arg7"
}
override predicate isSink(DataFlow::Node node) {
exists(CallNode call |
call.getFunction().(NameNode).getId() = "SINK7" and
node.(DataFlow::CfgNode).getNode() = call.getAnArg()
)
}
/**
* We want to be able to use `arg` in a sequence of calls such as `func(kw=arg); ... ; func(arg)`.
* Use-use flow lets the argument to the first call reach the sink inside the second call,
* making it seem like we handle all cases even if we only handle the last one.
* We make the test honest by preventing flow into source nodes.
*/
override predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}
from DataFlow::PathNode source, DataFlow::PathNode sink
where
source.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
sink.getNode().getLocation().getFile().getBaseName() in ["classes.py", "argumentPassing.py"] and
exists(ArgumentRoutingConfig cfg | cfg.hasFlowPath(source, sink))
select source.getNode(), source, sink, "Flow found"