@@ -60,16 +60,19 @@ Expr getReferenceToOnePassedTheEndElement(Expr containerReference) {
60
60
*/
61
61
predicate isUpperBoundEndCheckedIteratorAccess ( IteratorSource source , ContainerIteratorAccess it ) {
62
62
exists (
63
- Expr referenceToOnePassedTheEndElement , BasicBlock basicBlockOfIteratorAccess , GuardCondition upperBoundCheck ,
64
- ContainerIteratorAccess checkedIteratorAccess , Expr containerReferenceFromEndGuard
63
+ Expr referenceToOnePassedTheEndElement , BasicBlock basicBlockOfIteratorAccess ,
64
+ GuardCondition upperBoundCheck , ContainerIteratorAccess checkedIteratorAccess ,
65
+ Expr containerReferenceFromEndGuard
65
66
|
66
67
//sufficient end guard
67
- referenceToOnePassedTheEndElement = getReferenceToOnePassedTheEndElement ( containerReferenceFromEndGuard ) and
68
+ referenceToOnePassedTheEndElement =
69
+ getReferenceToOnePassedTheEndElement ( containerReferenceFromEndGuard ) and
68
70
//guard controls the access
69
71
upperBoundCheck .controls ( basicBlockOfIteratorAccess , _) and
70
72
basicBlockOfIteratorAccess .contains ( it ) and
71
73
//guard is comprised of end check and an iterator access
72
- DataFlow:: localFlow ( DataFlow:: exprNode ( referenceToOnePassedTheEndElement ) , DataFlow:: exprNode ( upperBoundCheck .getChild ( _) ) ) and
74
+ DataFlow:: localFlow ( DataFlow:: exprNode ( referenceToOnePassedTheEndElement ) ,
75
+ DataFlow:: exprNode ( upperBoundCheck .getChild ( _) ) ) and
73
76
upperBoundCheck .getChild ( _) = checkedIteratorAccess and
74
77
//make sure its the same iterator being checked in the guard as accessed
75
78
checkedIteratorAccess .getOwningContainer ( ) = it .getOwningContainer ( ) and
0 commit comments