1fb299fa2Sopenharmony_ci/* 2fb299fa2Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3fb299fa2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb299fa2Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb299fa2Sopenharmony_ci * You may obtain a copy of the License at 6fb299fa2Sopenharmony_ci * 7fb299fa2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb299fa2Sopenharmony_ci * 9fb299fa2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb299fa2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb299fa2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb299fa2Sopenharmony_ci * See the License for the specific language governing permissions and 13fb299fa2Sopenharmony_ci * limitations under the License. 14fb299fa2Sopenharmony_ci */ 15fb299fa2Sopenharmony_ci 16fb299fa2Sopenharmony_ci#include "extractandexecutescript_fuzzer.h" 17fb299fa2Sopenharmony_ci 18fb299fa2Sopenharmony_ci#include <array> 19fb299fa2Sopenharmony_ci#include <cstddef> 20fb299fa2Sopenharmony_ci#include <cstdint> 21fb299fa2Sopenharmony_ci#include <fcntl.h> 22fb299fa2Sopenharmony_ci#include <iostream> 23fb299fa2Sopenharmony_ci#include <string> 24fb299fa2Sopenharmony_ci#include <sys/mman.h> 25fb299fa2Sopenharmony_ci#include <sys/stat.h> 26fb299fa2Sopenharmony_ci#include <unistd.h> 27fb299fa2Sopenharmony_ci#include <vector> 28fb299fa2Sopenharmony_ci#include "pkg_algorithm.h" 29fb299fa2Sopenharmony_ci#include "pkg_algo_digest.h" 30fb299fa2Sopenharmony_ci#include "pkg_utils.h" 31fb299fa2Sopenharmony_ci#include "script_instructionhelper.h" 32fb299fa2Sopenharmony_ci#include "script_manager_impl.h" 33fb299fa2Sopenharmony_ci#include "script_manager.h" 34fb299fa2Sopenharmony_ci#include "script_utils.h" 35fb299fa2Sopenharmony_ci 36fb299fa2Sopenharmony_ci 37fb299fa2Sopenharmony_ciusing namespace Hpackage; 38fb299fa2Sopenharmony_ciusing namespace Uscript; 39fb299fa2Sopenharmony_ciusing namespace Updater; 40fb299fa2Sopenharmony_ci 41fb299fa2Sopenharmony_ciconst static std::string TEST_PATH_TO = "/data/fuzz/test/"; 42fb299fa2Sopenharmony_ciconst static int32_t SCRIPT_TEST_PRIORITY_NUM = 3; 43fb299fa2Sopenharmony_ciconst static int32_t SCRIPT_TEST_LAST_PRIORITY = 2; 44fb299fa2Sopenharmony_ci 45fb299fa2Sopenharmony_cistatic inline std::string GetTestCertName() 46fb299fa2Sopenharmony_ci{ 47fb299fa2Sopenharmony_ci std::string name = TEST_PATH_TO; 48fb299fa2Sopenharmony_ci name += "signing_cert.crt"; 49fb299fa2Sopenharmony_ci return name; 50fb299fa2Sopenharmony_ci} 51fb299fa2Sopenharmony_ci 52fb299fa2Sopenharmony_cistatic inline std::string GetTestPrivateKeyName() 53fb299fa2Sopenharmony_ci{ 54fb299fa2Sopenharmony_ci std::string name = TEST_PATH_TO; 55fb299fa2Sopenharmony_ci name += "rsa_private_key2048.pem"; 56fb299fa2Sopenharmony_ci return name; 57fb299fa2Sopenharmony_ci} 58fb299fa2Sopenharmony_ci 59fb299fa2Sopenharmony_ciclass TestScriptInstructionSparseImageWrite : public Uscript::UScriptInstruction { 60fb299fa2Sopenharmony_cipublic: 61fb299fa2Sopenharmony_ci TestScriptInstructionSparseImageWrite() {} 62fb299fa2Sopenharmony_ci virtual ~TestScriptInstructionSparseImageWrite() {} 63fb299fa2Sopenharmony_ci int32_t Execute(Uscript::UScriptEnv &env, Uscript::UScriptContext &context) override 64fb299fa2Sopenharmony_ci { 65fb299fa2Sopenharmony_ci /* 从参数中获取分区信息 */ 66fb299fa2Sopenharmony_ci std::string partitionName; 67fb299fa2Sopenharmony_ci int32_t ret = context.GetParam(0, partitionName); 68fb299fa2Sopenharmony_ci if (ret != USCRIPT_SUCCESS) { 69fb299fa2Sopenharmony_ci return ret; 70fb299fa2Sopenharmony_ci } 71fb299fa2Sopenharmony_ci if (env.GetPkgManager() == nullptr) { 72fb299fa2Sopenharmony_ci return USCRIPT_ERROR_EXECUTE; 73fb299fa2Sopenharmony_ci } 74fb299fa2Sopenharmony_ci return ret; 75fb299fa2Sopenharmony_ci } 76fb299fa2Sopenharmony_ci}; 77fb299fa2Sopenharmony_ci 78fb299fa2Sopenharmony_ciclass TestScriptInstructionFactory : public UScriptInstructionFactory { 79fb299fa2Sopenharmony_cipublic: 80fb299fa2Sopenharmony_ci virtual int32_t CreateInstructionInstance(UScriptInstructionPtr& instr, const std::string& name) 81fb299fa2Sopenharmony_ci { 82fb299fa2Sopenharmony_ci if (name == "sparse_image_write") { 83fb299fa2Sopenharmony_ci instr = new TestScriptInstructionSparseImageWrite(); 84fb299fa2Sopenharmony_ci } 85fb299fa2Sopenharmony_ci return USCRIPT_SUCCESS; 86fb299fa2Sopenharmony_ci } 87fb299fa2Sopenharmony_ci virtual void DestoryInstructionInstance(UScriptInstructionPtr& instr) 88fb299fa2Sopenharmony_ci { 89fb299fa2Sopenharmony_ci delete instr; 90fb299fa2Sopenharmony_ci } 91fb299fa2Sopenharmony_ci TestScriptInstructionFactory() {} 92fb299fa2Sopenharmony_ci virtual ~TestScriptInstructionFactory() {} 93fb299fa2Sopenharmony_ci}; 94fb299fa2Sopenharmony_ci 95fb299fa2Sopenharmony_ciclass UTestScriptEnv : public UScriptEnv { 96fb299fa2Sopenharmony_cipublic: 97fb299fa2Sopenharmony_ci UScriptInstructionFactory *factory_ = nullptr; 98fb299fa2Sopenharmony_ci explicit UTestScriptEnv(Hpackage::PkgManager::PkgManagerPtr pkgManager) : UScriptEnv(pkgManager) {} 99fb299fa2Sopenharmony_ci ~UTestScriptEnv() 100fb299fa2Sopenharmony_ci { 101fb299fa2Sopenharmony_ci if (factory_ != nullptr) { 102fb299fa2Sopenharmony_ci delete factory_; 103fb299fa2Sopenharmony_ci factory_ = nullptr; 104fb299fa2Sopenharmony_ci } 105fb299fa2Sopenharmony_ci } 106fb299fa2Sopenharmony_ci 107fb299fa2Sopenharmony_ci virtual void PostMessage(const std::string &cmd, std::string content) {} 108fb299fa2Sopenharmony_ci 109fb299fa2Sopenharmony_ci virtual UScriptInstructionFactoryPtr GetInstructionFactory() 110fb299fa2Sopenharmony_ci { 111fb299fa2Sopenharmony_ci if (factory_ == nullptr) { 112fb299fa2Sopenharmony_ci factory_ = new TestScriptInstructionFactory(); 113fb299fa2Sopenharmony_ci } 114fb299fa2Sopenharmony_ci return factory_; 115fb299fa2Sopenharmony_ci } 116fb299fa2Sopenharmony_ci 117fb299fa2Sopenharmony_ci virtual const std::vector<std::string> GetInstructionNames() const 118fb299fa2Sopenharmony_ci { 119fb299fa2Sopenharmony_ci static std::vector<std::string> updaterCmds = {"sparse_image_write"}; 120fb299fa2Sopenharmony_ci return updaterCmds; 121fb299fa2Sopenharmony_ci } 122fb299fa2Sopenharmony_ci 123fb299fa2Sopenharmony_ci virtual bool IsRetry() const 124fb299fa2Sopenharmony_ci { 125fb299fa2Sopenharmony_ci return isRetry; 126fb299fa2Sopenharmony_ci } 127fb299fa2Sopenharmony_ci 128fb299fa2Sopenharmony_ci virtual PostMessageFunction GetPostmsgFunc() 129fb299fa2Sopenharmony_ci { 130fb299fa2Sopenharmony_ci return nullptr; 131fb299fa2Sopenharmony_ci } 132fb299fa2Sopenharmony_ciprivate: 133fb299fa2Sopenharmony_ci bool isRetry = false; 134fb299fa2Sopenharmony_ci}; 135fb299fa2Sopenharmony_ci 136fb299fa2Sopenharmony_ciclass UScriptTest { 137fb299fa2Sopenharmony_cipublic: 138fb299fa2Sopenharmony_ci UScriptTest() 139fb299fa2Sopenharmony_ci { 140fb299fa2Sopenharmony_ci packageManager = PkgManager::CreatePackageInstance(); 141fb299fa2Sopenharmony_ci } 142fb299fa2Sopenharmony_ci 143fb299fa2Sopenharmony_ci ~UScriptTest() 144fb299fa2Sopenharmony_ci { 145fb299fa2Sopenharmony_ci PkgManager::ReleasePackageInstance(packageManager); 146fb299fa2Sopenharmony_ci ScriptManager::ReleaseScriptManager(); 147fb299fa2Sopenharmony_ci } 148fb299fa2Sopenharmony_ci 149fb299fa2Sopenharmony_ci int TestUscriptExecute(const std::vector<std::string> &inputFile) 150fb299fa2Sopenharmony_ci { 151fb299fa2Sopenharmony_ci CreatePackageBin(inputFile); 152fb299fa2Sopenharmony_ci if (packageManager == nullptr) { 153fb299fa2Sopenharmony_ci return PKG_SUCCESS; 154fb299fa2Sopenharmony_ci } 155fb299fa2Sopenharmony_ci std::vector<std::string> components; 156fb299fa2Sopenharmony_ci int32_t ret = packageManager->LoadPackage(TEST_PATH_TO + testPackageName, GetTestCertName(), components); 157fb299fa2Sopenharmony_ci if (ret != USCRIPT_SUCCESS) { 158fb299fa2Sopenharmony_ci USCRIPT_LOGI("LoadPackage fail ret:%d", ret); 159fb299fa2Sopenharmony_ci return USCRIPT_INVALID_SCRIPT; 160fb299fa2Sopenharmony_ci } 161fb299fa2Sopenharmony_ci 162fb299fa2Sopenharmony_ci UTestScriptEnv* env = new UTestScriptEnv(packageManager); 163fb299fa2Sopenharmony_ci Hpackage::HashDataVerifier scriptVerifier {packageManager}; 164fb299fa2Sopenharmony_ci ScriptManager* manager = ScriptManager::GetScriptManager(env, &scriptVerifier); 165fb299fa2Sopenharmony_ci if (manager == nullptr) { 166fb299fa2Sopenharmony_ci USCRIPT_LOGI("create manager fail ret:%d", ret); 167fb299fa2Sopenharmony_ci delete env; 168fb299fa2Sopenharmony_ci return USCRIPT_INVALID_SCRIPT; 169fb299fa2Sopenharmony_ci } 170fb299fa2Sopenharmony_ci int32_t priority = SCRIPT_TEST_PRIORITY_NUM; 171fb299fa2Sopenharmony_ci ret = manager->ExecuteScript(priority); 172fb299fa2Sopenharmony_ci USCRIPT_LOGI("ExecuteScript ret:%d", ret); 173fb299fa2Sopenharmony_ci priority = 0; 174fb299fa2Sopenharmony_ci ret = manager->ExecuteScript(priority); 175fb299fa2Sopenharmony_ci USCRIPT_LOGI("ExecuteScript ret:%d", ret); 176fb299fa2Sopenharmony_ci priority = 1; 177fb299fa2Sopenharmony_ci ret = manager->ExecuteScript(priority); 178fb299fa2Sopenharmony_ci priority = SCRIPT_TEST_LAST_PRIORITY; 179fb299fa2Sopenharmony_ci ret = manager->ExecuteScript(priority); 180fb299fa2Sopenharmony_ci delete env; 181fb299fa2Sopenharmony_ci ScriptManager::ReleaseScriptManager(); 182fb299fa2Sopenharmony_ci return ret; 183fb299fa2Sopenharmony_ci } 184fb299fa2Sopenharmony_ci 185fb299fa2Sopenharmony_ciprotected: 186fb299fa2Sopenharmony_ci int32_t BuildFileDigest(uint8_t &digest, size_t size, const std::string &packagePath) 187fb299fa2Sopenharmony_ci { 188fb299fa2Sopenharmony_ci PkgManager::StreamPtr stream = nullptr; 189fb299fa2Sopenharmony_ci int32_t ret = packageManager->CreatePkgStream(stream, packagePath, 0, PkgStream::PkgStreamType_Read); 190fb299fa2Sopenharmony_ci if (ret != PKG_SUCCESS) { 191fb299fa2Sopenharmony_ci PKG_LOGE("Create input stream fail %s", packagePath.c_str()); 192fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 193fb299fa2Sopenharmony_ci return ret; 194fb299fa2Sopenharmony_ci } 195fb299fa2Sopenharmony_ci size_t fileLen = stream->GetFileLength(); 196fb299fa2Sopenharmony_ci if (fileLen <= 0) { 197fb299fa2Sopenharmony_ci PKG_LOGE("invalid file to load"); 198fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 199fb299fa2Sopenharmony_ci return PKG_INVALID_FILE; 200fb299fa2Sopenharmony_ci } 201fb299fa2Sopenharmony_ci if (fileLen > SIZE_MAX) { 202fb299fa2Sopenharmony_ci PKG_LOGE("Invalid file len %zu to load %s", fileLen, stream->GetFileName().c_str()); 203fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 204fb299fa2Sopenharmony_ci return PKG_INVALID_FILE; 205fb299fa2Sopenharmony_ci } 206fb299fa2Sopenharmony_ci 207fb299fa2Sopenharmony_ci size_t buffSize = 4096; 208fb299fa2Sopenharmony_ci PkgBuffer buff(buffSize); 209fb299fa2Sopenharmony_ci // 整包检查 210fb299fa2Sopenharmony_ci DigestAlgorithm::DigestAlgorithmPtr algorithm = PkgAlgorithmFactory::GetDigestAlgorithm(PKG_DIGEST_TYPE_SHA256); 211fb299fa2Sopenharmony_ci if (algorithm == nullptr) { 212fb299fa2Sopenharmony_ci PKG_LOGE("Invalid file %s", stream->GetFileName().c_str()); 213fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 214fb299fa2Sopenharmony_ci return PKG_NOT_EXIST_ALGORITHM; 215fb299fa2Sopenharmony_ci } 216fb299fa2Sopenharmony_ci algorithm->Init(); 217fb299fa2Sopenharmony_ci 218fb299fa2Sopenharmony_ci size_t offset = 0; 219fb299fa2Sopenharmony_ci size_t readLen = 0; 220fb299fa2Sopenharmony_ci while (offset < fileLen) { 221fb299fa2Sopenharmony_ci ret = stream->Read(buff, offset, buffSize, readLen); 222fb299fa2Sopenharmony_ci if (ret != PKG_SUCCESS) { 223fb299fa2Sopenharmony_ci PKG_LOGE("read buffer fail %s", stream->GetFileName().c_str()); 224fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 225fb299fa2Sopenharmony_ci return ret; 226fb299fa2Sopenharmony_ci } 227fb299fa2Sopenharmony_ci algorithm->Update(buff, readLen); 228fb299fa2Sopenharmony_ci 229fb299fa2Sopenharmony_ci offset += readLen; 230fb299fa2Sopenharmony_ci readLen = 0; 231fb299fa2Sopenharmony_ci } 232fb299fa2Sopenharmony_ci PkgBuffer signBuffer(&digest, size); 233fb299fa2Sopenharmony_ci algorithm->Final(signBuffer); 234fb299fa2Sopenharmony_ci packageManager->ClosePkgStream(stream); 235fb299fa2Sopenharmony_ci return PKG_SUCCESS; 236fb299fa2Sopenharmony_ci } 237fb299fa2Sopenharmony_ci 238fb299fa2Sopenharmony_ci int CreatePackageBin(const std::vector<std::string> &inputFile) 239fb299fa2Sopenharmony_ci { 240fb299fa2Sopenharmony_ci int32_t ret = PKG_SUCCESS; 241fb299fa2Sopenharmony_ci uint32_t updateFileVersion = 1000; 242fb299fa2Sopenharmony_ci uint32_t componentInfoIdBase = 100; 243fb299fa2Sopenharmony_ci uint8_t componentInfoFlags = 22; 244fb299fa2Sopenharmony_ci PKG_LOGI("\n\n ************* CreatePackageBin %s \r\n", testPackageName.c_str()); 245fb299fa2Sopenharmony_ci UpgradePkgInfoExt pkgInfo; 246fb299fa2Sopenharmony_ci pkgInfo.softwareVersion = strdup("100.100.100.100"); 247fb299fa2Sopenharmony_ci pkgInfo.date = strdup("2021-02-02"); 248fb299fa2Sopenharmony_ci pkgInfo.time = strdup("21:23:49"); 249fb299fa2Sopenharmony_ci pkgInfo.productUpdateId = strdup("555.555.100.555"); 250fb299fa2Sopenharmony_ci pkgInfo.entryCount = inputFile.size(); 251fb299fa2Sopenharmony_ci pkgInfo.updateFileVersion = updateFileVersion; 252fb299fa2Sopenharmony_ci pkgInfo.digestMethod = PKG_DIGEST_TYPE_SHA256; 253fb299fa2Sopenharmony_ci pkgInfo.signMethod = PKG_SIGN_METHOD_RSA; 254fb299fa2Sopenharmony_ci pkgInfo.pkgType = PKG_PACK_TYPE_UPGRADE; 255fb299fa2Sopenharmony_ci std::string filePath; 256fb299fa2Sopenharmony_ci std::vector<ComponentInfoExt> comp(inputFile.size()); 257fb299fa2Sopenharmony_ci for (size_t i = 0; i < inputFile.size(); i++) { 258fb299fa2Sopenharmony_ci comp[i].componentAddr = strdup(inputFile[i].c_str()); 259fb299fa2Sopenharmony_ci filePath = TEST_PATH_TO; 260fb299fa2Sopenharmony_ci filePath += inputFile[i].c_str(); 261fb299fa2Sopenharmony_ci comp[i].filePath = strdup(filePath.c_str()); 262fb299fa2Sopenharmony_ci comp[i].version = strdup("55555555"); 263fb299fa2Sopenharmony_ci 264fb299fa2Sopenharmony_ci ret = BuildFileDigest(*comp[i].digest, sizeof(comp[i].digest), filePath); 265fb299fa2Sopenharmony_ci comp[i].size = GetFileSize(filePath); 266fb299fa2Sopenharmony_ci comp[i].originalSize = comp[i].size; 267fb299fa2Sopenharmony_ci comp[i].id = componentInfoIdBase; 268fb299fa2Sopenharmony_ci comp[i].resType = 1; 269fb299fa2Sopenharmony_ci comp[i].type = 1; 270fb299fa2Sopenharmony_ci comp[i].flags = componentInfoFlags; 271fb299fa2Sopenharmony_ci filePath.clear(); 272fb299fa2Sopenharmony_ci } 273fb299fa2Sopenharmony_ci 274fb299fa2Sopenharmony_ci std::string packagePath = TEST_PATH_TO; 275fb299fa2Sopenharmony_ci packagePath += testPackageName; 276fb299fa2Sopenharmony_ci ret = CreatePackage(&pkgInfo, comp, packagePath.c_str(), GetTestPrivateKeyName().c_str()); 277fb299fa2Sopenharmony_ci if (ret == 0) { 278fb299fa2Sopenharmony_ci PKG_LOGI("CreatePackage success offset"); 279fb299fa2Sopenharmony_ci } 280fb299fa2Sopenharmony_ci for (size_t i = 0; i < inputFile.size(); i++) { 281fb299fa2Sopenharmony_ci free(comp[i].componentAddr); 282fb299fa2Sopenharmony_ci free(comp[i].filePath); 283fb299fa2Sopenharmony_ci free(comp[i].version); 284fb299fa2Sopenharmony_ci } 285fb299fa2Sopenharmony_ci free(pkgInfo.productUpdateId); 286fb299fa2Sopenharmony_ci free(pkgInfo.softwareVersion); 287fb299fa2Sopenharmony_ci free(pkgInfo.date); 288fb299fa2Sopenharmony_ci free(pkgInfo.time); 289fb299fa2Sopenharmony_ci return ret; 290fb299fa2Sopenharmony_ci } 291fb299fa2Sopenharmony_ci 292fb299fa2Sopenharmony_ciprivate: 293fb299fa2Sopenharmony_ci PkgManager::PkgManagerPtr packageManager = nullptr; 294fb299fa2Sopenharmony_ci std::string testPackageName = "test_package.bin"; 295fb299fa2Sopenharmony_ci}; 296fb299fa2Sopenharmony_ci 297fb299fa2Sopenharmony_cistatic void ExtractAndExecuteScriptFun(const std::vector<std::string> &inputFile) 298fb299fa2Sopenharmony_ci{ 299fb299fa2Sopenharmony_ci UScriptTest test; 300fb299fa2Sopenharmony_ci test.TestUscriptExecute(inputFile); 301fb299fa2Sopenharmony_ci} 302fb299fa2Sopenharmony_ci 303fb299fa2Sopenharmony_cinamespace OHOS { 304fb299fa2Sopenharmony_ci void FuzzExtractAndExecuteScript(const uint8_t* data, size_t size) 305fb299fa2Sopenharmony_ci { 306fb299fa2Sopenharmony_ci FILE *pFile; 307fb299fa2Sopenharmony_ci std::vector<std::string> inputFile = { 308fb299fa2Sopenharmony_ci "loadScript.us", 309fb299fa2Sopenharmony_ci "registerCmd.us", 310fb299fa2Sopenharmony_ci "test_function.us", 311fb299fa2Sopenharmony_ci "test_if.us", 312fb299fa2Sopenharmony_ci "test_logic.us", 313fb299fa2Sopenharmony_ci "test_math.us", 314fb299fa2Sopenharmony_ci "test_native.us", 315fb299fa2Sopenharmony_ci "testscript.us", 316fb299fa2Sopenharmony_ci "Verse-script.us", 317fb299fa2Sopenharmony_ci "test_script.us" 318fb299fa2Sopenharmony_ci }; 319fb299fa2Sopenharmony_ci 320fb299fa2Sopenharmony_ci pFile = fopen("test_script.us", "w+"); 321fb299fa2Sopenharmony_ci if (pFile == nullptr) { 322fb299fa2Sopenharmony_ci LOG(ERROR) << "[fuzz]open file failed"; 323fb299fa2Sopenharmony_ci return; 324fb299fa2Sopenharmony_ci } 325fb299fa2Sopenharmony_ci 326fb299fa2Sopenharmony_ci (void)fwrite(data, 1, size, pFile); 327fb299fa2Sopenharmony_ci (void)fclose(pFile); 328fb299fa2Sopenharmony_ci 329fb299fa2Sopenharmony_ci ExtractAndExecuteScriptFun(inputFile); 330fb299fa2Sopenharmony_ci (void)remove("test_script.us"); 331fb299fa2Sopenharmony_ci } 332fb299fa2Sopenharmony_ci} 333fb299fa2Sopenharmony_ci 334fb299fa2Sopenharmony_ci/* Fuzzer entry point */ 335fb299fa2Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 336fb299fa2Sopenharmony_ci{ 337fb299fa2Sopenharmony_ci /* Run your code on data */ 338fb299fa2Sopenharmony_ci OHOS::FuzzExtractAndExecuteScript(data, size); 339fb299fa2Sopenharmony_ci return 0; 340fb299fa2Sopenharmony_ci} 341fb299fa2Sopenharmony_ci 342