mirror of
https://github.com/github/codeql.git
synced 2026-01-01 00:27:24 +01:00
Will need subsequent PRs fixing up test failures (due to deprecated methods moving around), but other than that everything should be straight-forward.
31 lines
953 B
Plaintext
31 lines
953 B
Plaintext
/**
|
|
* @name __init__ method calls overridden method
|
|
* @description Calling a method from __init__ that is overridden by a subclass may result in a partially
|
|
* initialized instance being observed.
|
|
* @kind problem
|
|
* @tags reliability
|
|
* correctness
|
|
* @problem.severity warning
|
|
* @sub-severity low
|
|
* @precision high
|
|
* @id py/init-calls-subclass
|
|
*/
|
|
|
|
import python
|
|
|
|
from
|
|
ClassObject supercls, string method, Call call, FunctionObject overriding,
|
|
FunctionObject overridden
|
|
where
|
|
exists(FunctionObject init, SelfAttribute sa |
|
|
supercls.declaredAttribute("__init__") = init and
|
|
call.getScope() = init.getFunction() and
|
|
call.getFunc() = sa
|
|
|
|
|
sa.getName() = method and
|
|
overridden = supercls.declaredAttribute(method) and
|
|
overriding.overrides(overridden)
|
|
)
|
|
select call, "Call to self.$@ in __init__ method, which is overridden by $@.", overridden, method,
|
|
overriding, overriding.descriptiveString()
|