bool ArcMemory::Read(void *Data,size_t Size,size_t &Result)
{
  if (!Loaded)
    return false;
  Result=(size_t)Min(Size,ArcData.Size()-SeekPos);
  memcpy(Data,&ArcData[(size_t)SeekPos],Result);
  SeekPos+=Result;
  return true;
}
The software writes data past the end, or before the beginning, of the intended buffer.