1 /*
2 * Copyright (c) 2025 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 "extensioncontrolinterceptorfirst_fuzzer.h"
17
18 #include <fuzzer/FuzzedDataProvider.h>
19
20 #define private public
21 #include "extension_control_interceptor.h"
22 #undef private
23
24 #include "ability_record.h"
25
26 using namespace OHOS::AAFwk;
27 using namespace OHOS::AppExecFwk;
28
29 namespace OHOS {
GetFuzzAbilityToken()30 sptr<Token> GetFuzzAbilityToken()
31 {
32 sptr<Token> token = nullptr;
33 AbilityRequest abilityRequest;
34 abilityRequest.appInfo.bundleName = "com.example.fuzzTest";
35 abilityRequest.abilityInfo.name = "MainAbility";
36 abilityRequest.abilityInfo.type = AbilityType::DATA;
37 std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
38 if (abilityRecord) {
39 token = abilityRecord->GetToken();
40 }
41 return token;
42 }
43
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)44 bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
45 {
46 std::shared_ptr<ExtensionControlInterceptor> extensionControlInterceptor =
47 std::make_shared<ExtensionControlInterceptor>();
48 int intParam;
49 int32_t int32Param;
50 Want want;
51 bool boolParam;
52 sptr<IRemoteObject> token = GetFuzzAbilityToken();
53 auto shouldBlockFunc = []() { return false; };
54 FuzzedDataProvider fdp(data, size);
55 intParam = fdp.ConsumeIntegral<int>();
56 int32Param = fdp.ConsumeIntegral<int32_t>();
57 boolParam = fdp.ConsumeBool();
58 AbilityInterceptorParam param = AbilityInterceptorParam(want, intParam, int32Param, boolParam, token,
59 shouldBlockFunc);
60 AbilityInfo targetAbilityInfo;
61 AbilityInfo callerAbilityInfo;
62 extensionControlInterceptor->DoProcess(param);
63 extensionControlInterceptor->ProcessInterceptOld(param, targetAbilityInfo, callerAbilityInfo);
64 extensionControlInterceptor->ProcessInterceptNew(param, targetAbilityInfo, callerAbilityInfo);
65 extensionControlInterceptor->GetCallerAbilityInfo(param, callerAbilityInfo);
66 extensionControlInterceptor->GetTargetAbilityInfo(param, targetAbilityInfo);
67 return true;
68 }
69 }
70
71 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)72 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
73 {
74 // Run your code on data.
75 OHOS::DoSomethingInterestingWithMyAPI(data, size);
76 return 0;
77 }