[docs]classBucketizer(ExplorationTechnique):""" Loop bucketization: Pick log(n) paths out of n possible paths, and stash (or drop) everything else. """
[docs]defsuccessors(self,simgr,state,**kwargs):# step firstsuccessors:SimSuccessors=super().successors(simgr,state,**kwargs)# if there are more than one successor, we try to get rid of the ones that we don't wantiflen(successors.successors)<=1:returnsuccessorsnew_successors=[]forsuccinsuccessors.successors:ifsucc.history.jumpkind!="Ijk_Boring":new_successors.append(succ)continue# transition = (succ.callstack.func_addr, succ.history.addr, succ.addr)transition=succ.addrself._record_transition(succ,transition)ifself._accept_transition(succ,transition):new_successors.append(succ)iflen(new_successors)!=len(successors.successors):_l.debug("Bucketizer: Dropped %d states out of %d.",len(successors.successors)-len(new_successors),len(successors.successors),)successors.successors=new_successorsreturnsuccessors