Skip to content

Commit dff1ae4

Browse files
committed
Add consistency query (exactly one path for every entity)
1 parent 5e63f02 commit dff1ae4

File tree

5 files changed

+902
-1
lines changed

5 files changed

+902
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import semmle.python.internal.OverlayDiscardConsistencyQuery

python/ql/lib/semmle/python/Overlay.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private predicate discardStarEntity(@top el) {
6161
* An abstract base class for all elements that can be discarded from the base.
6262
*/
6363
overlay[local]
64-
abstract private class Discardable extends @top {
64+
abstract class Discardable extends @top {
6565
/** Gets the path to the file in which this element occurs. */
6666
abstract string getPath();
6767

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/**
2+
* Provides consistency queries for checking that every database entity
3+
* that can be discarded (i.e. everything but `@py_cobject`) in an overlay
4+
* database is indeed discarded, by proxy of having exactly one `Discardable.getPath()`.
5+
*/
6+
7+
import python
8+
import semmle.python.Overlay
9+
10+
class TopWithToString instanceof @top {
11+
string toString() {
12+
this instanceof @py_source_element and result = "@source_element"
13+
or
14+
this instanceof @py_object and result = "@py_object"
15+
or
16+
this instanceof @py_base_var and result = "@py_base_var"
17+
or
18+
this instanceof @location and result = "@location"
19+
or
20+
this instanceof @py_line and result = "@py_line"
21+
or
22+
this instanceof @py_comment and result = "@py_comment"
23+
or
24+
this instanceof @py_expr_parent and result = "@py_expr_parent"
25+
or
26+
this instanceof @py_expr_context and result = "@py_expr_context"
27+
or
28+
this instanceof @py_operator and result = "@py_operator"
29+
or
30+
this instanceof @py_boolop and result = "@py_boolop"
31+
or
32+
this instanceof @py_cmpop and result = "@py_cmpop"
33+
or
34+
this instanceof @py_unaryop and result = "@py_unaryop"
35+
or
36+
this instanceof @py_cmpop_list and result = "@py_cmpop_list"
37+
or
38+
this instanceof @py_alias_list and result = "@py_alias_list"
39+
or
40+
this instanceof @py_StringPart_list and result = "@py_StringPart_list"
41+
or
42+
this instanceof @py_comprehension_list and result = "@py_comprehension_list"
43+
or
44+
this instanceof @py_dict_item_list and result = "@py_dict_item_list"
45+
or
46+
this instanceof @py_pattern_list and result = "@py_pattern_list"
47+
or
48+
this instanceof @py_stmt_list and result = "@py_stmt_list"
49+
or
50+
this instanceof @py_str_list and result = "@py_str_list"
51+
or
52+
this instanceof @py_type_parameter_list and result = "@py_type_parameter_list"
53+
or
54+
this instanceof @externalDefect and result = "@externalDefect"
55+
or
56+
this instanceof @externalMetric and result = "@externalMetric"
57+
or
58+
this instanceof @externalDataElement and result = "@externalDataElement"
59+
or
60+
this instanceof @duplication_or_similarity and result = "@duplication_or_similarity"
61+
or
62+
this instanceof @svnentry and result = "@svnentry"
63+
or
64+
this instanceof @xmllocatable and result = "@xmllocatable"
65+
or
66+
this instanceof @yaml_locatable and result = "@yaml_locatable"
67+
}
68+
}
69+
70+
query predicate consistencyTest(TopWithToString el, string message) {
71+
not el instanceof Discardable and
72+
not el instanceof @py_cobject and
73+
message = "Not Discardable"
74+
or
75+
exists(Discardable d, int numPaths | d = el and numPaths = count(d.getPath()) |
76+
numPaths = 0 and
77+
message = "Discardable but no path found"
78+
or
79+
numPaths > 1 and
80+
message = "Discardable but multiple paths found (" + concat(d.getPath(), ", ") + ")"
81+
)
82+
}
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
| @externalDataElement | Not Discardable |
2+
| @externalDataElement | Not Discardable |
3+
| @externalDataElement | Not Discardable |
4+
| @externalDataElement | Not Discardable |
5+
| @externalDataElement | Not Discardable |
6+
| @externalDataElement | Not Discardable |
7+
| @externalDataElement | Not Discardable |
8+
| @externalDataElement | Not Discardable |
9+
| @externalDataElement | Not Discardable |
10+
| @externalDataElement | Not Discardable |
11+
| @externalDataElement | Not Discardable |
12+
| @externalDataElement | Not Discardable |
13+
| @externalDataElement | Not Discardable |
14+
| @externalDataElement | Not Discardable |
15+
| @externalDataElement | Not Discardable |
16+
| @externalDataElement | Not Discardable |
17+
| @externalDataElement | Not Discardable |
18+
| @externalDataElement | Not Discardable |
19+
| @externalDataElement | Not Discardable |
20+
| @externalDataElement | Not Discardable |
21+
| @externalDataElement | Not Discardable |
22+
| @externalDataElement | Not Discardable |
23+
| @externalDataElement | Not Discardable |
24+
| @externalDataElement | Not Discardable |
25+
| @externalDataElement | Not Discardable |
26+
| @externalDataElement | Not Discardable |
27+
| @externalDataElement | Not Discardable |
28+
| @externalDataElement | Not Discardable |
29+
| @externalDataElement | Not Discardable |
30+
| @externalDataElement | Not Discardable |
31+
| @externalDataElement | Not Discardable |
32+
| @externalDataElement | Not Discardable |
33+
| @externalDataElement | Not Discardable |
34+
| @externalDataElement | Not Discardable |
35+
| @externalDataElement | Not Discardable |
36+
| @externalDataElement | Not Discardable |
37+
| @externalDataElement | Not Discardable |
38+
| @externalDataElement | Not Discardable |
39+
| @externalDataElement | Not Discardable |
40+
| @externalDataElement | Not Discardable |
41+
| @externalDataElement | Not Discardable |
42+
| @externalDataElement | Not Discardable |
43+
| @externalDataElement | Not Discardable |
44+
| @externalDataElement | Not Discardable |
45+
| @externalDataElement | Not Discardable |
46+
| @externalDataElement | Not Discardable |
47+
| @externalDataElement | Not Discardable |
48+
| @externalDataElement | Not Discardable |
49+
| @externalDataElement | Not Discardable |
50+
| @externalDataElement | Not Discardable |
51+
| @externalDataElement | Not Discardable |
52+
| @externalDataElement | Not Discardable |
53+
| @externalDataElement | Not Discardable |
54+
| @externalDataElement | Not Discardable |
55+
| @externalDataElement | Not Discardable |
56+
| @externalDataElement | Not Discardable |
57+
| @externalDataElement | Not Discardable |
58+
| @externalDataElement | Not Discardable |
59+
| @externalDataElement | Not Discardable |
60+
| @externalDataElement | Not Discardable |
61+
| @externalDataElement | Not Discardable |
62+
| @externalDataElement | Not Discardable |
63+
| @externalDataElement | Not Discardable |
64+
| @externalDataElement | Not Discardable |
65+
| @externalDataElement | Not Discardable |
66+
| @externalDataElement | Not Discardable |
67+
| @externalDataElement | Not Discardable |
68+
| @externalDataElement | Not Discardable |
69+
| @externalDataElement | Not Discardable |
70+
| @externalDataElement | Not Discardable |
71+
| @externalDataElement | Not Discardable |
72+
| @externalDataElement | Not Discardable |
73+
| @externalDataElement | Not Discardable |
74+
| @externalDataElement | Not Discardable |
75+
| @externalDataElement | Not Discardable |
76+
| @externalDataElement | Not Discardable |
77+
| @externalDataElement | Not Discardable |
78+
| @externalDataElement | Not Discardable |
79+
| @externalDataElement | Not Discardable |
80+
| @externalDataElement | Not Discardable |
81+
| @externalDataElement | Not Discardable |
82+
| @externalDataElement | Not Discardable |
83+
| @externalDataElement | Not Discardable |
84+
| @externalDataElement | Not Discardable |
85+
| @externalDataElement | Not Discardable |
86+
| @externalDataElement | Not Discardable |
87+
| @externalDataElement | Not Discardable |
88+
| @externalDataElement | Not Discardable |
89+
| @externalDataElement | Not Discardable |
90+
| @externalDataElement | Not Discardable |
91+
| @externalDataElement | Not Discardable |
92+
| @externalDataElement | Not Discardable |
93+
| @externalDataElement | Not Discardable |
94+
| @externalDataElement | Not Discardable |
95+
| @externalDataElement | Not Discardable |
96+
| @externalDataElement | Not Discardable |
97+
| @externalDataElement | Not Discardable |
98+
| @externalDataElement | Not Discardable |
99+
| @externalDataElement | Not Discardable |
100+
| @externalDataElement | Not Discardable |
101+
| @externalDataElement | Not Discardable |
102+
| @externalDataElement | Not Discardable |
103+
| @externalDataElement | Not Discardable |
104+
| @externalDataElement | Not Discardable |
105+
| @externalDataElement | Not Discardable |
106+
| @externalDataElement | Not Discardable |
107+
| @externalDataElement | Not Discardable |
108+
| @externalDataElement | Not Discardable |
109+
| @externalDataElement | Not Discardable |
110+
| @externalDataElement | Not Discardable |
111+
| @externalDataElement | Not Discardable |
112+
| @externalDataElement | Not Discardable |
113+
| @externalDataElement | Not Discardable |
114+
| @externalDataElement | Not Discardable |
115+
| @externalDataElement | Not Discardable |
116+
| @externalDataElement | Not Discardable |
117+
| @externalDataElement | Not Discardable |
118+
| @externalDataElement | Not Discardable |
119+
| @externalDataElement | Not Discardable |
120+
| @externalDataElement | Not Discardable |
121+
| @externalDataElement | Not Discardable |
122+
| @externalDataElement | Not Discardable |
123+
| @externalDataElement | Not Discardable |
124+
| @externalDataElement | Not Discardable |
125+
| @externalDataElement | Not Discardable |
126+
| @externalDataElement | Not Discardable |
127+
| @externalDataElement | Not Discardable |
128+
| @externalDataElement | Not Discardable |
129+
| @externalDataElement | Not Discardable |
130+
| @externalDataElement | Not Discardable |
131+
| @externalDataElement | Not Discardable |
132+
| @externalDataElement | Not Discardable |
133+
| @externalDataElement | Not Discardable |
134+
| @externalDataElement | Not Discardable |
135+
| @externalDataElement | Not Discardable |
136+
| @externalDataElement | Not Discardable |
137+
| @externalDataElement | Not Discardable |
138+
| @externalDataElement | Not Discardable |
139+
| @externalDataElement | Not Discardable |
140+
| @externalDataElement | Not Discardable |
141+
| @externalDataElement | Not Discardable |
142+
| @externalDataElement | Not Discardable |
143+
| @externalDataElement | Not Discardable |
144+
| @externalDataElement | Not Discardable |
145+
| @externalDataElement | Not Discardable |
146+
| @externalDataElement | Not Discardable |
147+
| @externalDataElement | Not Discardable |
148+
| @externalDataElement | Not Discardable |
149+
| @externalDataElement | Not Discardable |
150+
| @externalDataElement | Not Discardable |
151+
| @externalDataElement | Not Discardable |
152+
| @externalDataElement | Not Discardable |
153+
| @externalDataElement | Not Discardable |
154+
| @externalDataElement | Not Discardable |
155+
| @externalDataElement | Not Discardable |
156+
| @externalDataElement | Not Discardable |
157+
| @externalDataElement | Not Discardable |
158+
| @externalDataElement | Not Discardable |
159+
| @externalDataElement | Not Discardable |
160+
| @externalDataElement | Not Discardable |
161+
| @externalDataElement | Not Discardable |
162+
| @externalDataElement | Not Discardable |
163+
| @externalDataElement | Not Discardable |
164+
| @externalDataElement | Not Discardable |
165+
| @externalDataElement | Not Discardable |
166+
| @externalDataElement | Not Discardable |
167+
| @externalDataElement | Not Discardable |
168+
| @externalDataElement | Not Discardable |
169+
| @externalDataElement | Not Discardable |
170+
| @externalDataElement | Not Discardable |
171+
| @externalDataElement | Not Discardable |
172+
| @externalDataElement | Not Discardable |
173+
| @externalDataElement | Not Discardable |
174+
| @externalDataElement | Not Discardable |
175+
| @externalDataElement | Not Discardable |
176+
| @externalDataElement | Not Discardable |
177+
| @externalDataElement | Not Discardable |
178+
| @externalDataElement | Not Discardable |
179+
| @externalDataElement | Not Discardable |
180+
| @externalDataElement | Not Discardable |
181+
| @externalDataElement | Not Discardable |
182+
| @externalDataElement | Not Discardable |
183+
| @externalDataElement | Not Discardable |
184+
| @externalDataElement | Not Discardable |
185+
| @externalDataElement | Not Discardable |
186+
| @externalDataElement | Not Discardable |
187+
| @externalDataElement | Not Discardable |
188+
| @externalDataElement | Not Discardable |
189+
| @externalDataElement | Not Discardable |
190+
| @externalDataElement | Not Discardable |
191+
| @externalDataElement | Not Discardable |
192+
| @externalDataElement | Not Discardable |
193+
| @externalDataElement | Not Discardable |
194+
| @externalDataElement | Not Discardable |
195+
| @externalDataElement | Not Discardable |
196+
| @externalDataElement | Not Discardable |
197+
| @externalDataElement | Not Discardable |
198+
| @externalDataElement | Not Discardable |
199+
| @externalDataElement | Not Discardable |
200+
| @externalDataElement | Not Discardable |
201+
| @externalDataElement | Not Discardable |
202+
| @externalDataElement | Not Discardable |
203+
| @externalDataElement | Not Discardable |
204+
| @externalDataElement | Not Discardable |
205+
| @externalDataElement | Not Discardable |
206+
| @externalDataElement | Not Discardable |
207+
| @externalDataElement | Not Discardable |
208+
| @externalDataElement | Not Discardable |
209+
| @externalDataElement | Not Discardable |
210+
| @externalDataElement | Not Discardable |
211+
| @externalDataElement | Not Discardable |
212+
| @externalDataElement | Not Discardable |
213+
| @externalDataElement | Not Discardable |
214+
| @externalDataElement | Not Discardable |
215+
| @externalDataElement | Not Discardable |
216+
| @externalDataElement | Not Discardable |
217+
| @externalDataElement | Not Discardable |
218+
| @externalDataElement | Not Discardable |
219+
| @externalDataElement | Not Discardable |
220+
| @externalDataElement | Not Discardable |
221+
| @externalDataElement | Not Discardable |
222+
| @externalDataElement | Not Discardable |
223+
| @externalDataElement | Not Discardable |
224+
| @externalDataElement | Not Discardable |
225+
| @externalDataElement | Not Discardable |
226+
| @externalDataElement | Not Discardable |
227+
| @externalDataElement | Not Discardable |
228+
| @externalDataElement | Not Discardable |
229+
| @externalDataElement | Not Discardable |
230+
| @externalDataElement | Not Discardable |
231+
| @externalDataElement | Not Discardable |
232+
| @externalDataElement | Not Discardable |
233+
| @externalDataElement | Not Discardable |
234+
| @externalDataElement | Not Discardable |
235+
| @externalDataElement | Not Discardable |
236+
| @externalDataElement | Not Discardable |
237+
| @externalDataElement | Not Discardable |
238+
| @externalDataElement | Not Discardable |
239+
| @externalDataElement | Not Discardable |
240+
| @externalDataElement | Not Discardable |
241+
| @externalDataElement | Not Discardable |
242+
| @externalDataElement | Not Discardable |
243+
| @externalDataElement | Not Discardable |
244+
| @externalDataElement | Not Discardable |
245+
| @externalDataElement | Not Discardable |

0 commit comments

Comments
 (0)