docs: def _unknown_data_size_handler(self, cfg, irsb, irsb_addr, stmt_idx, data_addr, max_size):  # pylint:disable=unused-argument
          """
          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
          """
  
          sequence_offset = None
  
          for offset in range(1, max_size):
              if self._is_sequence(cfg, data_addr + offset, 5):
                  # a potential sequence is found
                  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)  # high 5 bytes might be all zeros...
  
          ptr_size = cfg.project.arch.bytes
  
          size = None
  
          for offset in range(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