1 /*
2  * Copyright (c) 2022-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 "dcameraenabledcameradevice_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 
21 #include "dcamera_provider.h"
22 #include "v1_1/id_camera_provider_callback.h"
23 
24 namespace OHOS {
25 namespace DistributedHardware {
26 
27 class MockDCameraProviderCallbackImpl : public IDCameraProviderCallback {
28 public:
MockDCameraProviderCallbackImpl(const std::string & devId,const std::string & dhId)29     MockDCameraProviderCallbackImpl(const std::string& devId, const std::string& dhId) : devId_(devId), dhId_(dhId)
30     {
31     }
32     ~MockDCameraProviderCallbackImpl() = default;
33 
OpenSession(const DHBase & dhBase)34     int32_t OpenSession(const DHBase& dhBase)
35     {
36         return DCamRetCode::SUCCESS;
37     }
CloseSession(const DHBase & dhBase)38     int32_t CloseSession(const DHBase& dhBase)
39     {
40         return DCamRetCode::SUCCESS;
41     }
ConfigureStreams(const DHBase & dhBase,const std::vector<DCStreamInfo> & streamInfos)42     int32_t ConfigureStreams(const DHBase& dhBase, const std::vector<DCStreamInfo>& streamInfos)
43     {
44         return DCamRetCode::SUCCESS;
45     }
ReleaseStreams(const DHBase & dhBase,const std::vector<int> & streamIds)46     int32_t ReleaseStreams(const DHBase& dhBase, const std::vector<int>& streamIds)
47     {
48         return DCamRetCode::SUCCESS;
49     }
StartCapture(const DHBase & dhBase,const std::vector<DCCaptureInfo> & captureInfos)50     int32_t StartCapture(const DHBase& dhBase, const std::vector<DCCaptureInfo>& captureInfos)
51     {
52         return DCamRetCode::SUCCESS;
53     }
StopCapture(const DHBase & dhBase,const std::vector<int> & streamIds)54     int32_t StopCapture(const DHBase& dhBase, const std::vector<int>& streamIds)
55     {
56         return DCamRetCode::SUCCESS;
57     }
UpdateSettings(const DHBase & dhBase,const std::vector<DCameraSettings> & settings)58     int32_t UpdateSettings(const DHBase& dhBase, const std::vector<DCameraSettings>& settings)
59     {
60         return DCamRetCode::SUCCESS;
61     }
NotifyEvent(const DHBase & dhBase,const DCameraHDFEvent & event)62     int32_t NotifyEvent(const DHBase& dhBase, const DCameraHDFEvent& event)
63     {
64         return DCamRetCode::SUCCESS;
65     }
66 
67 private:
68     std::string devId_;
69     std::string dhId_;
70 };
71 
DcameraEnableDCameraDeviceFuzzTest(const uint8_t * data,size_t size)72 void DcameraEnableDCameraDeviceFuzzTest(const uint8_t* data, size_t size)
73 {
74     if ((data == nullptr) || (size == 0)) {
75         return;
76     }
77     std::string deviceId = "1";
78     std::string dhId = "2";
79     std::string abilityInfo(reinterpret_cast<const char*>(data), size);
80     DHBase dhBase;
81     dhBase.deviceId_ = deviceId;
82     dhBase.dhId_ = dhId;
83 
84     sptr<IDCameraProviderCallback> callback(new MockDCameraProviderCallbackImpl(deviceId, dhId));
85 
86     DCameraProvider::GetInstance()->EnableDCameraDevice(dhBase, abilityInfo, callback);
87 }
88 }
89 }
90 
91 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)92 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
93 {
94     /* Run your code on data */
95     OHOS::DistributedHardware::DcameraEnableDCameraDeviceFuzzTest(data, size);
96     return 0;
97 }
98 
99