'Query in taint graph to check if a specific taint will taint the stack pointer in the future or not.
The taint is specified with the tuple (simrun_addr, stmt_idx, taint_type).
:param simrun_addr:         Address of the SimRun.
:param stmt_idx:            Statement ID.
:param taint_type:          Type of the taint, might be one of the following: \'reg\', \'tmp\', \'mem\'.
:param simrun_whitelist:    A list of SimRun addresses that are whitelisted.
:returns:                   True/False.'

def is_taint_impacting_stack_pointers(self, simrun_addr, stmt_idx, taint_type, simrun_whitelist=None):

    if (simrun_whitelist is None):
        simrun_whitelist = set()
    if (type(simrun_whitelist) is not set):
        simrun_whitelist = set(simrun_whitelist)
    taint = None
    for n in self.taint_graph.nodes():
        if ((n.type == taint_type) and (n.addr == simrun_addr) and (n.stmt_id == stmt_idx)):
            taint = n
            break
    if (taint is None):
        raise AngrBackwardSlicingError('The    specific    taint    is    not    found')
    bfs_tree = networkx.bfs_tree(self.taint_graph, taint)
    for descendant in bfs_tree.nodes():
        if ((descendant.type == 'reg') and (descendant.reg in (self.project.arch.sp_offset, self.project.arch.bp_offset))):
            return True
    return False
