@@ -60,16 +60,19 @@ Expr getReferenceToOnePassedTheEndElement(Expr containerReference) {
6060 */
6161predicate isUpperBoundEndCheckedIteratorAccess ( IteratorSource source , ContainerIteratorAccess it ) {
6262 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
6566 |
6667 //sufficient end guard
67- referenceToOnePassedTheEndElement = getReferenceToOnePassedTheEndElement ( containerReferenceFromEndGuard ) and
68+ referenceToOnePassedTheEndElement =
69+ getReferenceToOnePassedTheEndElement ( containerReferenceFromEndGuard ) and
6870 //guard controls the access
6971 upperBoundCheck .controls ( basicBlockOfIteratorAccess , _) and
7072 basicBlockOfIteratorAccess .contains ( it ) and
7173 //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
7376 upperBoundCheck .getChild ( _) = checkedIteratorAccess and
7477 //make sure its the same iterator being checked in the guard as accessed
7578 checkedIteratorAccess .getOwningContainer ( ) = it .getOwningContainer ( ) and
0 commit comments