FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { if (offset < 0) { return FALSE; } FX_SAFE_FILESIZE newPos = base::checked_cast<FX_FILESIZE, size_t>(size); newPos += offset; if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) { return FALSE; } return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset,(FX_LPBYTE) buffer, size); }
virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { if (offset < 0) { return FALSE; } FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast<FX_FILESIZE, size_t>(size); newPos += offset; if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) { return FALSE; } FXSYS_memcpy(buffer, m_pBuf+offset, size); return TRUE; }
bool CPDF_DataAvail::IsDataAvail(FX_FILESIZE offset, uint32_t size, DownloadHints* pHints) { if (offset < 0 || offset > m_dwFileLen) return true; FX_SAFE_FILESIZE safeSize = offset; safeSize += size; safeSize += 512; if (!safeSize.IsValid() || safeSize.ValueOrDie() > m_dwFileLen) size = m_dwFileLen - offset; else size += 512; if (!m_pFileAvail->IsDataAvail(offset, size)) { if (pHints) pHints->AddSegment(offset, size); return false; } return true; }