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 "dcameraadddcameradevice_fuzzer.h"
17
18 #include <cstddef>
19 #include <cstdint>
20
21 #include "dcamera_host.h"
22 #include "v1_0/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 }
62
63 private:
64
65 std::string devId_;
66 std::string dhId_;
67 };
68
DcameraAddDCameraDeviceFuzzTest(const uint8_t * data,size_t size)69 void DcameraAddDCameraDeviceFuzzTest(const uint8_t* data, size_t size)
70 {
71 if ((data == nullptr) || (size == 0)) {
72 return;
73 }
74 std::string deviceId(reinterpret_cast<const char*>(data), size);
75 std::string dhId(reinterpret_cast<const char*>(data), size);
76 std::string abilityInfo(reinterpret_cast<const char*>(data), size);
77 DHBase dhBase;
78 dhBase.deviceId_ = deviceId;
79 dhBase.dhId_ = dhId;
80
81 sptr<IDCameraProviderCallback> callback(new MockDCameraProviderCallbackImpl(deviceId, dhId));
82
83 DCameraHost::GetInstance()->AddDCameraDevice(dhBase, abilityInfo, callback);
84 }
85 }
86 }
87
88 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)89 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
90 {
91 /* Run your code on data */
92 OHOS::DistributedHardware::DcameraAddDCameraDeviceFuzzTest(data, size);
93 return 0;
94 }
95
96