'Return the maximum number of bytes until a potential pointer or a potential sequence is found.
:param angr.analyses.CFG cfg: The control flow graph.
:param pyvex.IRSB irsb: The IRSB object.
:param int irsb_addr: Address of the block.
:param int stmt_idx: Statement ID.
:param int data_addr: Address of the data in memory.
:param int max_size: Maximum size possible.
:return: A 2-tuple of data type and size.
:rtype: tuple'

def _unknown_data_size_handler(self, cfg, irsb, irsb_addr, stmt_idx, data_addr, max_size):

    sequence_offset = None
    for offset in xrange(1, max_size):
        if self._is_sequence(cfg, (data_addr + offset), 5):
            sequence_offset = offset
            break
    if (sequence_offset is not None):
        if (self.project.arch.bits == 32):
            max_size = min(max_size, sequence_offset)
        elif (self.project.arch.bits == 64):
            max_size = min(max_size, (sequence_offset + 5))
    ptr_size = (cfg.project.arch.bits / 8)
    size = None
    for offset in xrange(1, ((max_size - ptr_size) + 1)):
        ptr = self.fast_memory_load((data_addr + offset), ptr_size, int, endness=cfg.project.arch.memory_endness)
        if self._is_pointer(cfg, ptr):
            size = offset
            break
    if (size is not None):
        return ('unknown', size)
    elif (sequence_offset is not None):
        return ('unknown', sequence_offset)
    else:
        return (None, None)
