mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
Merge pull request #4174 from yoff/SharedDataflow_PointsToImpliesDataflow
Python: Dataflow, Test that `pointsTo` implies data flow merging now, will fix `self` in a later PR
This commit is contained in:
@@ -0,0 +1 @@
|
||||
| pointsto_regressions.py:15:18:15:21 | ControlFlowNode for self | pointsto_regressions.py:19:9:19:12 | ControlFlowNode for self |
|
||||
@@ -0,0 +1,85 @@
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:4:9:4:12 | ControlFlowNode for self |
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:6:13:6:16 | ControlFlowNode for self |
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:8:21:8:24 | ControlFlowNode for self |
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:8:21:8:24 | ControlFlowNode for self |
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:10:17:10:20 | ControlFlowNode for self |
|
||||
| code/f_finally.py:3:15:3:18 | ControlFlowNode for self | code/f_finally.py:10:17:10:20 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:5:18:5:21 | ControlFlowNode for self | code/g_class_init.py:6:9:6:12 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:5:18:5:21 | ControlFlowNode for self | code/g_class_init.py:7:9:7:12 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:5:18:5:21 | ControlFlowNode for self | code/g_class_init.py:10:9:10:12 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:5:18:5:21 | ControlFlowNode for self | code/g_class_init.py:11:9:11:12 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:5:18:5:21 | ControlFlowNode for self | code/g_class_init.py:14:9:14:12 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:16:16:16:19 | ControlFlowNode for self | code/g_class_init.py:17:13:17:16 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:16:16:16:19 | ControlFlowNode for self | code/g_class_init.py:18:23:18:26 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:16:16:16:19 | ControlFlowNode for self | code/g_class_init.py:19:17:19:20 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:16:16:16:19 | ControlFlowNode for self | code/g_class_init.py:20:13:20:16 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:34:18:34:21 | ControlFlowNode for self | code/g_class_init.py:35:18:35:21 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:34:18:34:21 | ControlFlowNode for self | code/g_class_init.py:36:25:36:28 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:46:18:46:21 | ControlFlowNode for self | code/g_class_init.py:48:13:48:16 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:46:18:46:21 | ControlFlowNode for self | code/g_class_init.py:50:13:50:16 | ControlFlowNode for self |
|
||||
| code/g_class_init.py:52:14:52:17 | ControlFlowNode for self | code/g_class_init.py:53:12:53:15 | ControlFlowNode for self |
|
||||
| code/h_classes.py:3:1:3:16 | ControlFlowNode for ClassExpr | code/h_classes.py:10:1:10:9 | ControlFlowNode for type() |
|
||||
| code/h_classes.py:3:1:3:16 | ControlFlowNode for ClassExpr | code/h_classes.py:15:5:15:13 | ControlFlowNode for type() |
|
||||
| code/h_classes.py:7:18:7:21 | ControlFlowNode for self | code/h_classes.py:8:9:8:12 | ControlFlowNode for self |
|
||||
| code/h_classes.py:25:18:25:21 | ControlFlowNode for self | code/h_classes.py:27:13:27:16 | ControlFlowNode for self |
|
||||
| code/h_classes.py:25:18:25:21 | ControlFlowNode for self | code/h_classes.py:29:13:29:16 | ControlFlowNode for self |
|
||||
| code/h_classes.py:25:18:25:21 | ControlFlowNode for self | code/h_classes.py:31:13:31:16 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:6:15:6:18 | ControlFlowNode for self | code/k_getsetattr.py:7:17:7:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:6:15:6:18 | ControlFlowNode for self | code/k_getsetattr.py:8:17:8:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:6:15:6:18 | ControlFlowNode for self | code/k_getsetattr.py:9:17:9:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:6:15:6:18 | ControlFlowNode for self | code/k_getsetattr.py:10:17:10:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:7:17:7:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:8:17:8:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:9:17:9:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:10:17:10:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:13:17:13:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:14:17:14:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:15:9:15:12 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:16:17:16:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:17:17:17:20 | ControlFlowNode for self |
|
||||
| code/k_getsetattr.py:12:15:12:18 | ControlFlowNode for self | code/k_getsetattr.py:18:17:18:20 | ControlFlowNode for self |
|
||||
| code/l_calls.py:3:13:3:14 | ControlFlowNode for List | code/l_calls.py:4:12:4:12 | ControlFlowNode for x |
|
||||
| code/l_calls.py:6:13:6:14 | ControlFlowNode for List | code/l_calls.py:7:16:7:16 | ControlFlowNode for x |
|
||||
| code/l_calls.py:12:1:12:20 | ControlFlowNode for ClassExpr | code/l_calls.py:16:16:16:18 | ControlFlowNode for cls |
|
||||
| code/l_calls.py:12:1:12:20 | ControlFlowNode for ClassExpr | code/l_calls.py:24:13:24:22 | ControlFlowNode for Attribute() |
|
||||
| code/l_calls.py:12:1:12:20 | ControlFlowNode for ClassExpr | code/l_calls.py:25:16:25:16 | ControlFlowNode for a |
|
||||
| code/l_calls.py:23:11:23:14 | ControlFlowNode for self | code/l_calls.py:24:13:24:16 | ControlFlowNode for self |
|
||||
| code/l_calls.py:33:5:33:23 | ControlFlowNode for FunctionExpr | code/l_calls.py:39:1:39:3 | ControlFlowNode for Attribute |
|
||||
| code/l_calls.py:33:11:33:14 | ControlFlowNode for self | code/l_calls.py:34:9:34:12 | ControlFlowNode for self |
|
||||
| code/l_calls.py:48:5:48:30 | ControlFlowNode for FunctionExpr | code/l_calls.py:53:1:53:3 | ControlFlowNode for Attribute |
|
||||
| code/m_attributes.py:5:18:5:21 | ControlFlowNode for self | code/m_attributes.py:6:9:6:12 | ControlFlowNode for self |
|
||||
| code/m_attributes.py:8:13:8:16 | ControlFlowNode for self | code/m_attributes.py:9:9:9:12 | ControlFlowNode for self |
|
||||
| code/q_super.py:3:18:3:21 | ControlFlowNode for self | code/q_super.py:4:22:4:25 | ControlFlowNode for self |
|
||||
| code/q_super.py:10:18:10:21 | ControlFlowNode for self | code/q_super.py:4:22:4:25 | ControlFlowNode for self |
|
||||
| code/q_super.py:10:18:10:21 | ControlFlowNode for self | code/q_super.py:11:22:11:25 | ControlFlowNode for self |
|
||||
| code/q_super.py:10:18:10:21 | ControlFlowNode for self | code/q_super.py:12:32:12:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:21:14:21:17 | ControlFlowNode for self | code/q_super.py:22:32:22:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:26:14:26:17 | ControlFlowNode for self | code/q_super.py:22:32:22:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:26:14:26:17 | ControlFlowNode for self | code/q_super.py:27:32:27:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:31:14:31:17 | ControlFlowNode for self | code/q_super.py:22:32:22:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:31:14:31:17 | ControlFlowNode for self | code/q_super.py:32:32:32:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:37:14:37:17 | ControlFlowNode for self | code/q_super.py:22:32:22:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:37:14:37:17 | ControlFlowNode for self | code/q_super.py:27:32:27:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:37:14:37:17 | ControlFlowNode for self | code/q_super.py:38:32:38:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:48:5:48:17 | ControlFlowNode for ClassExpr | code/q_super.py:51:25:51:29 | ControlFlowNode for Attribute |
|
||||
| code/q_super.py:50:22:50:25 | ControlFlowNode for self | code/q_super.py:51:32:51:35 | ControlFlowNode for self |
|
||||
| code/q_super.py:57:18:57:21 | ControlFlowNode for self | code/q_super.py:58:25:58:28 | ControlFlowNode for self |
|
||||
| code/q_super.py:63:5:63:17 | ControlFlowNode for ClassExpr | code/q_super.py:66:19:66:23 | ControlFlowNode for Attribute |
|
||||
| code/q_super.py:65:22:65:25 | ControlFlowNode for self | code/q_super.py:66:26:66:29 | ControlFlowNode for self |
|
||||
| code/q_super.py:73:18:73:21 | ControlFlowNode for self | code/q_super.py:74:22:74:25 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:7:18:7:21 | ControlFlowNode for self | code/r_regressions.py:9:9:9:12 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:7:18:7:21 | ControlFlowNode for self | code/r_regressions.py:12:9:12:12 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:7:18:7:21 | ControlFlowNode for self | code/r_regressions.py:13:9:13:12 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:16:9:16:12 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:18:13:18:16 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:20:21:20:24 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:20:21:20:24 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:22:17:22:20 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:15:15:15:18 | ControlFlowNode for self | code/r_regressions.py:22:17:22:20 | ControlFlowNode for self |
|
||||
| code/r_regressions.py:46:1:46:14 | ControlFlowNode for FunctionExpr | code/r_regressions.py:52:9:52:12 | ControlFlowNode for fail |
|
||||
| code/r_regressions.py:86:1:86:24 | ControlFlowNode for ClassExpr | code/r_regressions.py:85:2:85:33 | ControlFlowNode for method_decorator()() |
|
||||
| code/r_regressions.py:86:1:86:24 | ControlFlowNode for ClassExpr | code/r_regressions.py:90:1:90:9 | ControlFlowNode for TestFirst |
|
||||
| code/t_type.py:3:1:3:16 | ControlFlowNode for ClassExpr | code/t_type.py:6:1:6:9 | ControlFlowNode for type() |
|
||||
| code/t_type.py:3:1:3:16 | ControlFlowNode for ClassExpr | code/t_type.py:13:5:13:13 | ControlFlowNode for type() |
|
||||
| code/test_package/module2.py:5:5:5:6 | ControlFlowNode for Dict | code/j_convoluted_imports.py:25:1:25:1 | ControlFlowNode for r |
|
||||
| code/v_pointsto_regressions.py:15:18:15:21 | ControlFlowNode for self | code/v_pointsto_regressions.py:19:9:19:12 | ControlFlowNode for self |
|
||||
35
python/ql/test/library-tests/PointsTo/new/ImpliesDataflow.ql
Normal file
35
python/ql/test/library-tests/PointsTo/new/ImpliesDataflow.ql
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Test that the new data-flow analysis can connect any two
|
||||
* data-flow nodes that the points-to analysis can.
|
||||
*/
|
||||
|
||||
private import python
|
||||
import semmle.python.dataflow.new.DataFlow
|
||||
|
||||
predicate pointsToOrigin(DataFlow::CfgNode pointer, DataFlow::CfgNode origin) {
|
||||
origin.getNode() = pointer.getNode().pointsTo().getOrigin()
|
||||
}
|
||||
|
||||
class PointsToConfiguration extends DataFlow::Configuration {
|
||||
PointsToConfiguration() { this = "PointsToConfiguration" }
|
||||
|
||||
override predicate isSource(DataFlow::Node node) { pointsToOrigin(_, node) }
|
||||
|
||||
override predicate isSink(DataFlow::Node node) { pointsToOrigin(node, _) }
|
||||
}
|
||||
|
||||
predicate hasFlow(DataFlow::Node origin, DataFlow::Node pointer) {
|
||||
exists(PointsToConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink |
|
||||
source.getNode() = origin and
|
||||
sink.getNode() = pointer and
|
||||
config.hasFlowPath(source, sink)
|
||||
)
|
||||
}
|
||||
|
||||
from DataFlow::Node pointer, DataFlow::Node origin
|
||||
where
|
||||
exists(pointer.getLocation().getFile().getRelativePath()) and
|
||||
exists(origin.getLocation().getFile().getRelativePath()) and
|
||||
pointsToOrigin(pointer, origin) and
|
||||
not hasFlow(origin, pointer)
|
||||
select origin, pointer
|
||||
@@ -0,0 +1,19 @@
|
||||
# This file contains snippets from snapshots that displayed interesting results for `ImpliesDataflow.ql`.
|
||||
|
||||
class Chatbot:
|
||||
"""
|
||||
Main class which launch the training or testing mode
|
||||
"""
|
||||
|
||||
class TestMode:
|
||||
""" Simple structure representing the different testing modes
|
||||
"""
|
||||
ALL = 'all'
|
||||
INTERACTIVE = 'interactive' # The user can write his own questions
|
||||
DAEMON = 'daemon' # The chatbot runs on background and can regularly be called to predict something
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
"""
|
||||
# Model/dataset parameters
|
||||
self.args = None
|
||||
@@ -0,0 +1,36 @@
|
||||
def test_conditoinal_function(cond):
|
||||
def foo():
|
||||
return "foo"
|
||||
|
||||
def bar():
|
||||
return "bar"
|
||||
|
||||
if cond:
|
||||
f = foo
|
||||
else:
|
||||
f = bar
|
||||
|
||||
sink = f()
|
||||
return sink
|
||||
|
||||
|
||||
f_false = test_conditoinal_function(False)
|
||||
f_true = test_conditoinal_function(True)
|
||||
|
||||
|
||||
def test_redefinition():
|
||||
def foo():
|
||||
return "foo"
|
||||
|
||||
f = foo
|
||||
|
||||
def foo():
|
||||
return "foo redefined"
|
||||
|
||||
sink_foo = f()
|
||||
sink_redefined = foo()
|
||||
return sink_foo, sink_redefined
|
||||
|
||||
foo, redefined = test_redefinition()
|
||||
assert foo == "foo"
|
||||
assert redefined == "foo redefined"
|
||||
Reference in New Issue
Block a user