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

Skip to content

Commit 887f85c

Browse files
committed
Python: Add test for missing points-to information
To ease the rollout of this test, currently we only report missing points-to information for nodes that either - appear as an argument in a call to a function named `check`, or - appear inside a scope where the first line is annotated with a comment ending in "check". The idea behind the second version is that once we have points-to running at a level where no node inside a scope that _ought_ to have points-to is missing this information, we can simply remove all uses of `check(...)` from inside this scope, and annotate the entire scope with `# check`. Once this has been done for the entire file, we can then remove all the comments and just require _everything_ to be checked. Note that I don't expect all nodes to have the need for points-to information. For instance, there are nodes representing scope entry and exit, and for these it doesn't make sense to require that they "point-to" anything. Similarly, `NameNode` appearing in a "store" (i.e. as the left hand side of an assignment) do not strictly need to have points-to information, although it might be more intuitive if they did. Thus, the `relevant_node` predicate will almost certainly need to be extended to exclude these kinds of nodes.
1 parent abbc929 commit 887f85c

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import python
2+
import Util
3+
import semmle.python.pointsto.PointsTo
4+
import semmle.python.objects.ObjectInternal
5+
6+
/* Ideally, this test should return _no_ results. */
7+
8+
predicate relevant_node(ControlFlowNode n) {
9+
exists(CallNode c |
10+
c.getFunction().(NameNode).getId() = "check" and
11+
n = c.getAnArg()
12+
)
13+
or
14+
exists(Comment c, string filepath, int bl |
15+
n.getNode().getScope().getLocation().hasLocationInfo(filepath, bl, _, _, _) and
16+
c.getLocation().hasLocationInfo(filepath, bl, _, _, _) and
17+
c.getText().matches("%check")
18+
and not n.(NameNode).isStore()
19+
)
20+
}
21+
22+
from ControlFlowNode f
23+
where
24+
relevant_node(f) and
25+
not PointsTo::pointsTo(f, _, _, _)
26+
select locate(f.getLocation(), "abchlr"), f.toString()

0 commit comments

Comments
 (0)