Buggy code:
if ( ( callgraphAlgorithm ) != ( CallgraphAlgorithm . OnDemand ) ) logger . info ( "Callgraph<seq2seq4repair_space>has<seq2seq4repair_space>{}<seq2seq4repair_space>edges" , Scene . v ( ) . getCallGraph ( ) . size ( ) ) ; iCfg = icfgFactory . buildBiDirICFG ( callgraphAlgorithm ) ; int numThreads = Runtime . getRuntime ( ) . availableProcessors ( ) ; CountingThreadPoolExecutor executor = createExecutor ( numThreads ) ; BackwardsInfoflowProblem backProblem ; InfoflowSolver backSolver ; final IAliasingStrategy aliasingStrategy ; switch ( aliasingAlgorithm ) { case FlowSensitive : backProblem = new BackwardsInfoflowProblem ( new soot . jimple . infoflow . solver . BackwardsInfoflowCFG ( iCfg ) , sourcesSinks ) ; backProblem . setFlowSensitiveAliasing ( flowSensitiveAliasing ) ; backSolver = new InfoflowSolver ( backProblem , executor ) ; backSolver . setJumpPredecessors ( ( ! ( pathBuilderFactory . supportsPathReconstruction ( ) ) ) ) ; aliasingStrategy = new soot . jimple . infoflow . aliasing . FlowSensitiveAliasStrategy ( iCfg , backSolver ) ; break ; case PtsBased : backProblem = null ; backSolver = null ; aliasingStrategy = new soot . jimple . infoflow . aliasing . PtsBasedAliasStrategy ( iCfg ) ; break ; default : throw new RuntimeException ( "Unsupported<seq2seq4repair_space>aliasing<seq2seq4repair_space>algorithm" ) ; } InfoflowProblem forwardProblem = new InfoflowProblem ( iCfg , sourcesSinks , aliasingStrategy ) ; forwardProblem . setFlowSensitiveAliasing ( flowSensitiveAliasing ) ; if ( backProblem != null ) forwardProblem . setZeroValue ( backProblem . createZeroValue ( ) ) ; InfoflowSolver forwardSolver = new InfoflowSolver ( forwardProblem , executor ) ; aliasingStrategy . setForwardSolver ( forwardSolver ) ; forwardSolver . setJumpPredecessors ( ( ! ( pathBuilderFactory . supportsPathReconstruction ( ) ) ) ) ; forwardProblem . setInspectSources ( inspectSources ) ; forwardProblem . setInspectSinks ( inspectSinks ) ; forwardProblem . setEnableImplicitFlows ( enableImplicitFlows ) ; forwardProblem . setEnableStaticFieldTracking ( enableStaticFields ) ; forwardProblem . setEnableExceptionTracking ( enableExceptions ) ; for ( TaintPropagationHandler tp : taintPropagationHandlers ) forwardProblem . addTaintPropagationHandler ( tp ) ; forwardProblem . setTaintWrapper ( taintWrapper ) ; forwardProblem . setStopAfterFirstFlow ( stopAfterFirstFlow ) ; forwardProblem . setIgnoreFlowsInSystemPackages ( ignoreFlowsInSystemPackages ) ; if ( backProblem != null ) { backProblem . setForwardSolver ( ( ( InfoflowSolver ) ( forwardSolver ) ) ) ; backProblem . setTaintWrapper ( taintWrapper ) ; backProblem . setEnableStaticFieldTracking ( enableStaticFields ) ; backProblem . setEnableExceptionTracking ( enableExceptions ) ; for ( TaintPropagationHandler tp : taintPropagationHandlers ) backProblem . addTaintPropagationHandler ( tp ) ; backProblem . setTaintWrapper ( taintWrapper ) ; backProblem . setActivationUnitsToCallSites ( forwardProblem ) ; backProblem . setIgnoreFlowsInSystemPackages ( ignoreFlowsInSystemPackages ) ; backProblem . setInspectSources ( inspectSources ) ; backProblem . setInspectSinks ( inspectSinks ) ; } if ( ! ( enableStaticFields ) ) logger . warn ( "Static<seq2seq4repair_space>field<seq2seq4repair_space>tracking<seq2seq4repair_space>is<seq2seq4repair_space>disabled,<seq2seq4repair_space>results<seq2seq4repair_space>may<seq2seq4repair_space>be<seq2seq4repair_space>incomplete" ) ; if ( ( ! ( flowSensitiveAliasing ) ) || ( ! ( aliasingStrategy . isFlowSensitive ( ) ) ) ) logger . warn ( "Using<seq2seq4repair_space>flow-insensitive<seq2seq4repair_space>alias<seq2seq4repair_space>tracking,<seq2seq4repair_space>results<seq2seq4repair_space>may<seq2seq4repair_space>be<seq2seq4repair_space>imprecise" ) ; int sinkCount = 0 ; logger . info ( "Looking<seq2seq4repair_space>for<seq2seq4repair_space>sources<seq2seq4repair_space>and<seq2seq4repair_space>sinks..." ) ; for ( SootMethod sm : getMethodsForSeeds ( iCfg ) ) sinkCount += scanMethodForSourcesSinks ( sourcesSinks , forwardProblem , sm ) ; if ( additionalSeeds != null ) for ( String meth : additionalSeeds ) { SootMethod m = Scene . v ( ) . getMethod ( meth ) ; if ( ! ( m . hasActiveBody ( ) ) ) { logger . warn ( "Seed<seq2seq4repair_space>method<seq2seq4repair_space>{}<seq2seq4repair_space>has<seq2seq4repair_space>no<seq2seq4repair_space>active<seq2seq4repair_space>body" , m ) ; continue ; } forwardProblem . addInitialSeeds ( m . getActiveBody ( ) . getUnits ( ) . getFirst ( ) , Collections . singleton ( forwardProblem . zeroValue ( ) ) ) ; } if ( ( ! ( forwardProblem . hasInitialSeeds ( ) ) ) || ( sinkCount == 0 ) ) { logger . error ( "No<seq2seq4repair_space>sources<seq2seq4repair_space>or<seq2seq4repair_space>sinks<seq2seq4repair_space>found,<seq2seq4repair_space>aborting<seq2seq4repair_space>analysis" ) ; return ; } logger . info ( "Source<seq2seq4repair_space>lookup<seq2seq4repair_space>done,<seq2seq4repair_space>found<seq2seq4repair_space>{}<seq2seq4repair_space>sources<seq2seq4repair_space>and<seq2seq4repair_space>{}<seq2seq4repair_space>sinks." , forwardProblem . getInitialSeeds ( ) . size ( ) , sinkCount ) ; forwardSolver . solve ( ) ; int terminateTries = 0 ; while ( terminateTries < 10 ) { if ( ( ( executor . getActiveCount ( ) ) != 0 ) || ( ! ( executor . isTerminated ( ) ) ) ) { terminateTries ++ ; try { Thread . sleep ( 500 ) ; } catch ( InterruptedException e ) { logger . error ( "Could<seq2seq4repair_space>not<seq2seq4repair_space>wait<seq2seq4repair_space>for<seq2seq4repair_space>executor<seq2seq4repair_space>termination" , e ) ; } } else break ; } if ( ( ( executor . getActiveCount ( ) ) != 0 ) || ( ! ( executor . isTerminated ( ) ) ) ) logger . error ( "Executor<seq2seq4repair_space>did<seq2seq4repair_space>not<seq2seq4repair_space>terminate<seq2seq4repair_space>gracefully" ) ; if ( ( taintWrapper ) != null ) { logger . info ( ( "Taint<seq2seq4repair_space>wrapper<seq2seq4repair_space>hits:<seq2seq4repair_space>" + ( taintWrapper . getWrapperHits ( ) ) ) ) ; logger . info ( ( "Taint<seq2seq4repair_space>wrapper<seq2seq4repair_space>misses:<seq2seq4repair_space>" + ( taintWrapper . getWrapperMisses ( ) ) ) ) ; } Set < AbstractionAtSink > res = forwardProblem . getResults ( ) ; for ( Iterator < AbstractionAtSink > absAtSinkIt = res . iterator ( ) ; absAtSinkIt . hasNext ( ) ; ) { AbstractionAtSink curAbs = absAtSinkIt . next ( ) ; for ( AbstractionAtSink checkAbs : res ) <START_BUG> if ( checkAbs != curAbs ) <END_BUG> if ( checkAbs . getAbstraction ( ) . getAccessPath ( ) . entails ( curAbs . getAbstraction ( ) . getAccessPath ( ) ) ) { absAtSinkIt . remove ( ) ; break ; } } logger . info ( ( "IFDS<seq2seq4repair_space>problem<seq2seq4repair_space>with<seq2seq4repair_space>{}<seq2seq4repair_space>forward<seq2seq4repair_space>and<seq2seq4repair_space>{}<seq2seq4repair_space>backward<seq2seq4repair_space>edges<seq2seq4repair_space>solved,<seq2seq4repair_space>" + "processing<seq2seq4repair_space>{}<seq2seq4repair_space>results..." ) , forwardSolver . propagationCount , ( backSolver == null ? 0 : backSolver . propagationCount ) , ( res == null ? 0 : res . size ( ) ) ) ; forwardSolver . cleanup ( ) ; if ( backSolver != null ) { backSolver . cleanup ( ) ; backSolver = null ; backProblem = null ; } forwardSolver = null ; forwardProblem = null ; AccessPath . clearBaseRegister ( ) ; Runtime . getRuntime ( ) . gc ( ) ; computeTaintPaths ( res ) ; if ( results . getResults ( ) . isEmpty ( ) ) logger . warn ( "No<seq2seq4repair_space>results<seq2seq4repair_space>found." ) ; else for ( Map . Entry < SinkInfo , Set < SourceInfo > > entry : results . getResults ( ) . entrySet ( ) ) { logger . info ( "The<seq2seq4repair_space>sink<seq2seq4repair_space>{}<seq2seq4repair_space>in<seq2seq4repair_space>method<seq2seq4repair_space>{}<seq2seq4repair_space>was<seq2seq4repair_space>called<seq2seq4repair_space>with<seq2seq4repair_space>values<seq2seq4repair_space>from<seq2seq4repair_space>the<seq2seq4repair_space>following<seq2seq4repair_space>sources:" , entry . getKey ( ) , iCfg . getMethodOf ( entry . getKey ( ) . getSink ( ) ) . getSignature ( ) ) ; for ( SourceInfo source : entry . getValue ( ) ) { logger . info ( "-<seq2seq4repair_space>{}<seq2seq4repair_space>in<seq2seq4repair_space>method<seq2seq4repair_space>{}"

Fix:
if ( ( checkAbs != curAbs ) && ( ( checkAbs . getSinkStmt ( ) ) == ( curAbs . getSinkStmt ( ) ) ) )