Skip to content

Commit 80ef09f

Browse files
authored
Python: Fix bad join in declaredAttributeVar
Before: ``` Tuple counts for PointsTo::declaredAttributeVar#fbf/3@99d5aenq after 1.1s: 451054 ~7% {2} r1 = SCAN variable OUTPUT In.0, In.2 'name' 1296149 ~0% {2} r2 = JOIN r1 WITH Essa::EssaVariable::getSourceVariable_dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1 'var', Lhs.1 'name' 12179900 ~4% {3} r3 = JOIN r2 WITH Essa::EssaVariable::getAUse_dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'name', Lhs.0 'var' 8028 ~2% {3} r4 = JOIN r3 WITH Scope::Scope::getANormalExit_dispred#bf_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'name', Lhs.2 'var' 8028 ~2% {3} r5 = JOIN r4 WITH Classes::PythonClassObjectInternal::getScope_dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1 'cls', Lhs.1 'name', Lhs.2 'var' return r5 ``` After: ``` Tuple counts for PointsTo::declaredAttributeVar#fbf/3@cccf36hb after 4ms: 1450 ~0% {2} r1 = SCAN Classes::PythonClassObjectInternal::getScope_dispred#ff OUTPUT In.1, In.0 'cls' 1450 ~7% {2} r2 = JOIN r1 WITH Scope::Scope::getANormalExit_dispred#bf ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cls' 8028 ~0% {2} r3 = JOIN r2 WITH Essa::EssaVariable::getAUse_dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1 'var', Lhs.1 'cls' 8028 ~0% {3} r4 = JOIN r3 WITH Essa::EssaVariable::getSourceVariable_dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cls', Lhs.0 'var' 8028 ~2% {3} r5 = JOIN r4 WITH variable ON FIRST 1 OUTPUT Lhs.1 'cls', Rhs.2 'name', Lhs.2 'var' return r5 ```
1 parent d28f9f4 commit 80ef09f

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

python/ql/lib/semmle/python/pointsto/PointsTo.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2129,7 +2129,7 @@ module Conditionals {
21292129
/** INTERNAL: Do not use. */
21302130
predicate declaredAttributeVar(PythonClassObjectInternal cls, string name, EssaVariable var) {
21312131
name = var.getName() and
2132-
var.getAUse() = cls.getScope().getANormalExit()
2132+
pragma[only_bind_into](pragma[only_bind_into](var).getAUse()) = cls.getScope().getANormalExit()
21332133
}
21342134

21352135
cached

0 commit comments

Comments
 (0)