// Copyright 2019 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "testing/test_loader.h"

#include <string.h>

#include "core/fxcrt/check_op.h"
#include "core/fxcrt/numerics/checked_math.h"

TestLoader::TestLoader(pdfium::span<const uint8_t> span) : m_Span(span) {}

// static
int TestLoader::GetBlock(void* param,
                         unsigned long pos,
                         unsigned char* pBuf,
                         unsigned long size) {
  TestLoader* pLoader = static_cast<TestLoader*>(param);
  pdfium::CheckedNumeric<size_t> end = pos;
  end += size;
  CHECK_LE(end.ValueOrDie(), pLoader->m_Span.size());

  memcpy(pBuf, &pLoader->m_Span[pos], size);
  return 1;
}
