1 /* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef TEST_FUZZTEST_GETDATA_H 17 #define TEST_FUZZTEST_GETDATA_H 18 19 #include <cstdint> 20 21 #include "../../common/log.h" 22 #include "securec.h" 23 24 namespace OHOS { 25 namespace NeuralNetworkRuntime { 26 class Data { 27 public: Data(const uint8_t * data,size_t size)28 Data(const uint8_t* data, size_t size) 29 { 30 dataFuzz = data; 31 dataSize = size; 32 } 33 GetData()34 template<class T> T GetData() 35 { 36 T object {}; 37 size_t objectSize = sizeof(object); 38 if (dataFuzz == nullptr || objectSize > dataSize - dataPos) { 39 LOGE("[GetData]Data is not enough."); 40 return {}; 41 } 42 if (memcpy_s(&object, objectSize, dataFuzz + dataPos, objectSize) != EOK) { 43 LOGE("[GetData]Memcpy_s failed."); 44 return {}; 45 } 46 dataPos = dataPos + objectSize; 47 return object; 48 } 49 GetNowData()50 const uint8_t* GetNowData() const 51 { 52 return dataFuzz + dataPos; 53 } 54 GetNowDataSize()55 size_t GetNowDataSize() const 56 { 57 return dataSize - dataPos; 58 } 59 GetSpecificData(size_t startPos,size_t & size)60 const uint8_t* GetSpecificData(size_t startPos, size_t& size) const 61 { 62 if ((startPos + size) > dataSize) { 63 size = dataSize - startPos; 64 } 65 return dataFuzz + startPos; 66 } 67 68 private: 69 const uint8_t* dataFuzz {nullptr}; 70 size_t dataSize {0}; 71 size_t dataPos {0}; 72 }; 73 } // namespace NeuralNetworkRuntime 74 } // namespace OHOS 75 76 #endif