Skip to content

Commit f1fd9b4

Browse files
committed
Python: Fix underlying problem of not using Alias
1 parent a956e1f commit f1fd9b4

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

python/ql/lib/semmle/python/frameworks/internal/SubclassFinder.qll

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,13 @@ module NotExposed {
163163
newOrExistingModeling(spec).getASubclass*().getAValueReachableFromSource().asExpr() and
164164
importMember.getScope() = mod and
165165
loc = importMember.getLocation() and
166-
(
167-
mod.isPackageInit() and
168-
newAliasFullyQualified = mod.getPackageName() + "." + importMember.getName()
166+
exists(Alias alias, string base |
167+
mod.isPackageInit() and base = mod.getPackageName()
169168
or
170-
not mod.isPackageInit() and
171-
newAliasFullyQualified = mod.getName() + "." + importMember.getName()
169+
not mod.isPackageInit() and base = mod.getName()
170+
|
171+
alias.getValue() = importMember and
172+
newAliasFullyQualified = base + "." + alias.getAsname()
172173
) and
173174
(
174175
not hasAllStatement(mod)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
| Django.Views.View~Subclass | find_subclass_test | Member[View] |
1+
| Django.Views.View~Subclass | find_subclass_test | Member[clash2] |
2+
| Django.Views.View~Subclass | find_subclass_test | Member[clash3] |
23
| Django.Views.View~Subclass | find_subclass_test | Member[clash] |
34
| flask.MethodView~Subclass | find_subclass_test | Member[C] |
45
| flask.View~Subclass | find_subclass_test | Member[A] |
@@ -7,6 +8,7 @@
78
| flask.View~Subclass | find_subclass_test | Member[ViewAliasInTry] |
89
| flask.View~Subclass | find_subclass_test | Member[ViewAlias] |
910
| flask.View~Subclass | find_subclass_test | Member[View] |
11+
| flask.View~Subclass | find_subclass_test | Member[clash2] |
1012
| flask.View~Subclass | find_subclass_test | Member[clash3] |
1113
| flask.View~Subclass | find_subclass_test | Member[clash] |
1214
| flask.View~Subclass | find_subclass_test | Member[complete_module_alias] |

python/ql/test/experimental/library-tests/FindSubclass/find_subclass_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ class C(flask.views.MethodView):
2121
if cond:
2222
from flask.views import View as clash
2323
else:
24-
from django.views.generic import View as clash # $ SPURIOUS: View=Django.Views.View~Subclass
24+
from django.views.generic import View as clash
2525

2626
if cond:
27-
from flask.views import View as clash2 # $ MISSING
27+
from flask.views import View as clash2
2828
else:
29-
from django.views.generic import View as clash2 # $ MISSING
29+
from django.views.generic import View as clash2
3030
print(clash2)
3131

3232
if cond:
3333
from flask.views import View as clash3
3434
else:
35-
from django.views.generic import View as clash3 # $ MISSING
35+
from django.views.generic import View as clash3
3636
print(clash3)
3737

3838
import flask.views as containing_module_alias # $ MISSING

0 commit comments

Comments
 (0)