1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2019 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker #include "testing/test_loader.h" 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #include <string.h> 8*3ac0a46fSAndroid Build Coastguard Worker 9*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check_op.h" 10*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/numerics/checked_math.h" 11*3ac0a46fSAndroid Build Coastguard Worker TestLoader(pdfium::span<const char> span)12*3ac0a46fSAndroid Build Coastguard WorkerTestLoader::TestLoader(pdfium::span<const char> span) : m_Span(span) {} 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker // static GetBlock(void * param,unsigned long pos,unsigned char * pBuf,unsigned long size)15*3ac0a46fSAndroid Build Coastguard Workerint TestLoader::GetBlock(void* param, 16*3ac0a46fSAndroid Build Coastguard Worker unsigned long pos, 17*3ac0a46fSAndroid Build Coastguard Worker unsigned char* pBuf, 18*3ac0a46fSAndroid Build Coastguard Worker unsigned long size) { 19*3ac0a46fSAndroid Build Coastguard Worker TestLoader* pLoader = static_cast<TestLoader*>(param); 20*3ac0a46fSAndroid Build Coastguard Worker pdfium::base::CheckedNumeric<size_t> end = pos; 21*3ac0a46fSAndroid Build Coastguard Worker end += size; 22*3ac0a46fSAndroid Build Coastguard Worker CHECK_LE(end.ValueOrDie(), pLoader->m_Span.size()); 23*3ac0a46fSAndroid Build Coastguard Worker 24*3ac0a46fSAndroid Build Coastguard Worker memcpy(pBuf, &pLoader->m_Span[pos], size); 25*3ac0a46fSAndroid Build Coastguard Worker return 1; 26*3ac0a46fSAndroid Build Coastguard Worker } 27