mirror of
https://github.com/github/codeql.git
synced 2025-12-23 12:16:33 +01:00
27 lines
759 B
Plaintext
27 lines
759 B
Plaintext
/**
|
|
* @name Non-iterable used in for loop
|
|
* @description Using a non-iterable as the object in a 'for' loop causes a TypeError.
|
|
* @kind problem
|
|
* @tags reliability
|
|
* correctness
|
|
* types
|
|
* @problem.severity error
|
|
* @sub-severity low
|
|
* @precision high
|
|
* @id py/non-iterable-in-for-loop
|
|
*/
|
|
|
|
import python
|
|
|
|
from For loop, ControlFlowNode iter, Value v, ClassValue t, ControlFlowNode origin
|
|
where
|
|
loop.getIter().getAFlowNode() = iter and
|
|
iter.pointsTo(_, v, origin) and
|
|
v.getClass() = t and
|
|
not t.isIterable() and
|
|
not t.failedInference(_) and
|
|
not v = Value::named("None") and
|
|
not t.isDescriptorType()
|
|
select loop, "This for-loop may attempt to iterate over a $@ of class $@.", origin,
|
|
"non-iterable instance", t, t.getName()
|