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