• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "ecmascript/global_env.h"
17 #include "ecmascript/napi/include/jsnapi.h"
18 #include "promiseref_fuzzer.h"
19 
20 using namespace panda;
21 using namespace panda::ecmascript;
22 
23 namespace OHOS {
PromiseRefCatchFuzzTest(const uint8_t * data,size_t size)24     void PromiseRefCatchFuzzTest(const uint8_t* data, size_t size)
25     {
26         using FunctionCallback = Local<JSValueRef>(*)(JsiRuntimeCallInfo*);
27         RuntimeOption option;
28         option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
29         EcmaVM *vm = JSNApi::CreateJSVM(option);
30         if (data == nullptr || size <= 0) {
31             LOG_ECMA(ERROR) << "illegal input!";
32             return;
33         }
34         uint8_t* ptr = nullptr;
35         ptr = const_cast<uint8_t*>(data);
36         Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
37         Local<PromiseRef> promise = capability->GetPromise(vm);
38         FunctionCallback RejectCallback = nullptr;
39         Local<FunctionRef> reject = FunctionRef::New(vm, RejectCallback);
40         promise->Catch(vm, reject);
41         JSNApi::DestroyJSVM(vm);
42     }
43 
PromiseRefThenFinallyFuzzTest(const uint8_t * data,size_t size)44     void PromiseRefThenFinallyFuzzTest(const uint8_t* data, size_t size)
45     {
46         using FunctionCallback = Local<JSValueRef>(*)(JsiRuntimeCallInfo*);
47         RuntimeOption option;
48         option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
49         EcmaVM *vm = JSNApi::CreateJSVM(option);
50         if (data == nullptr || size <= 0) {
51             LOG_ECMA(ERROR) << "illegal input!";
52             return;
53         }
54         uint8_t* ptr = nullptr;
55         ptr = const_cast<uint8_t*>(data);
56         Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
57         Local<PromiseRef> promise = capability->GetPromise(vm);
58         FunctionCallback RejectCallback = nullptr;
59         Local<FunctionRef> reject = FunctionRef::New(vm, RejectCallback);
60         promise->Finally(vm, reject);
61         promise->Then(vm, reject, reject);
62         JSNApi::DestroyJSVM(vm);
63     }
64 
PromiseRefThenWithTwoParameterFuzzTest(const uint8_t * data,size_t size)65     void PromiseRefThenWithTwoParameterFuzzTest(const uint8_t* data, size_t size)
66     {
67         using FunctionCallback = Local<JSValueRef>(*)(JsiRuntimeCallInfo*);
68         RuntimeOption option;
69         option.SetLogLevel(RuntimeOption::LOG_LEVEL::ERROR);
70         EcmaVM *vm = JSNApi::CreateJSVM(option);
71         if (data == nullptr || size <= 0) {
72             LOG_ECMA(ERROR) << "illegal input!";
73             return;
74         }
75         uint8_t* ptr = nullptr;
76         ptr = const_cast<uint8_t*>(data);
77         Local<PromiseCapabilityRef> capability = PromiseCapabilityRef::New(vm);
78         Local<PromiseRef> promise = capability->GetPromise(vm);
79         FunctionCallback RejectCallback = nullptr;
80         Local<FunctionRef> reject = FunctionRef::New(vm, RejectCallback);
81         promise->Then(vm, reject);
82         JSNApi::DestroyJSVM(vm);
83     }
84 }
85 
86 // Fuzzer entry point.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)87 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
88 {
89     // Run your code on data.
90     OHOS::PromiseRefCatchFuzzTest(data, size);
91     OHOS::PromiseRefThenFinallyFuzzTest(data, size);
92     OHOS::PromiseRefThenWithTwoParameterFuzzTest(data, size);
93     return 0;
94 }