mirror of
https://github.com/github/codeql.git
synced 2026-05-03 04:39:29 +02:00
Initial commit of Python queries and QL libraries.
This commit is contained in:
committed by
Mark Shannon
parent
90c75cd362
commit
5f58824d1b
28
python/ql/src/Classes/MutatingDescriptor.ql
Normal file
28
python/ql/src/Classes/MutatingDescriptor.ql
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* @name Mutation of descriptor in __get__ or __set__ method.
|
||||
* @description Descriptor objects can be shared across many instances. Mutating them can cause strange side effects or race conditions.
|
||||
* @kind problem
|
||||
* @tags reliability
|
||||
* correctness
|
||||
* @problem.severity error
|
||||
* @sub-severity low
|
||||
* @precision very-high
|
||||
* @id py/mutable-descriptor
|
||||
*/
|
||||
|
||||
import python
|
||||
|
||||
predicate mutates_descriptor(ClassObject cls, SelfAttributeStore s) {
|
||||
cls.isDescriptorType() and
|
||||
exists(PyFunctionObject f |
|
||||
cls.lookupAttribute(_) = f and
|
||||
not f.getName() = "__init__" and
|
||||
s.getScope() = f.getFunction()
|
||||
)
|
||||
}
|
||||
|
||||
from ClassObject cls, SelfAttributeStore s
|
||||
where
|
||||
mutates_descriptor(cls, s)
|
||||
|
||||
select s, "Mutation of descriptor $@ object may lead to action-at-a-distance effects or race conditions for properties.", cls, cls.getName()
|
||||
Reference in New Issue
Block a user