1e1c44949Sopenharmony_ci/* 2e1c44949Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License. 5e1c44949Sopenharmony_ci * You may obtain a copy of the License at 6e1c44949Sopenharmony_ci * 7e1c44949Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e1c44949Sopenharmony_ci * 9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and 13e1c44949Sopenharmony_ci * limitations under the License. 14e1c44949Sopenharmony_ci */ 15e1c44949Sopenharmony_ci 16e1c44949Sopenharmony_ci#include "controlcamera_fuzzer.h" 17e1c44949Sopenharmony_ci 18e1c44949Sopenharmony_ci#include <cstddef> 19e1c44949Sopenharmony_ci#include <cstdint> 20e1c44949Sopenharmony_ci#define private public 21e1c44949Sopenharmony_ci#include "addcalltoken_fuzzer.h" 22e1c44949Sopenharmony_ci#include "surface_utils.h" 23e1c44949Sopenharmony_ci 24e1c44949Sopenharmony_ciusing namespace OHOS::Telephony; 25e1c44949Sopenharmony_cinamespace OHOS { 26e1c44949Sopenharmony_ci 27e1c44949Sopenharmony_ciint32_t ControlCamera(const uint8_t *data, size_t size) 28e1c44949Sopenharmony_ci{ 29e1c44949Sopenharmony_ci if (!IsServiceInited()) { 30e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 31e1c44949Sopenharmony_ci } 32e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 33e1c44949Sopenharmony_ci std::string cameraId(reinterpret_cast<const char *>(data), size); 34e1c44949Sopenharmony_ci auto cameraIdU16 = Str8ToStr16(cameraId); 35e1c44949Sopenharmony_ci MessageParcel dataParcel; 36e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 37e1c44949Sopenharmony_ci dataParcel.WriteString16(cameraIdU16); 38e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 39e1c44949Sopenharmony_ci MessageParcel reply; 40e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnControlCamera(dataParcel, reply); 41e1c44949Sopenharmony_ci} 42e1c44949Sopenharmony_ci 43e1c44949Sopenharmony_ciint32_t SetPreviewWindow(const uint8_t *data, size_t size) 44e1c44949Sopenharmony_ci{ 45e1c44949Sopenharmony_ci if (!IsServiceInited()) { 46e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 47e1c44949Sopenharmony_ci } 48e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 49e1c44949Sopenharmony_ci std::string surfaceId(reinterpret_cast<const char *>(data), size); 50e1c44949Sopenharmony_ci MessageParcel dataParcel; 51e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 52e1c44949Sopenharmony_ci int len = static_cast<int>(surfaceId.length()); 53e1c44949Sopenharmony_ci std::string subSurfaceId = surfaceId; 54e1c44949Sopenharmony_ci if (len >= 1) { 55e1c44949Sopenharmony_ci subSurfaceId = surfaceId.substr(0, 1); 56e1c44949Sopenharmony_ci } 57e1c44949Sopenharmony_ci if (subSurfaceId.empty() || subSurfaceId[0] < '0' || subSurfaceId[0] > '9') { 58e1c44949Sopenharmony_ci subSurfaceId = ""; 59e1c44949Sopenharmony_ci dataParcel.WriteString(subSurfaceId); 60e1c44949Sopenharmony_ci } else { 61e1c44949Sopenharmony_ci dataParcel.WriteString(subSurfaceId); 62e1c44949Sopenharmony_ci uint64_t tmpSurfaceId = std::stoull(subSurfaceId); 63e1c44949Sopenharmony_ci auto surface = SurfaceUtils::GetInstance()->GetSurface(tmpSurfaceId); 64e1c44949Sopenharmony_ci if (surface != nullptr) { 65e1c44949Sopenharmony_ci sptr<IBufferProducer> producer = surface->GetProducer(); 66e1c44949Sopenharmony_ci if (producer != nullptr) { 67e1c44949Sopenharmony_ci dataParcel.WriteRemoteObject(producer->AsObject()); 68e1c44949Sopenharmony_ci } 69e1c44949Sopenharmony_ci } 70e1c44949Sopenharmony_ci } 71e1c44949Sopenharmony_ci MessageParcel reply; 72e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnSetPreviewWindow(dataParcel, reply); 73e1c44949Sopenharmony_ci} 74e1c44949Sopenharmony_ci 75e1c44949Sopenharmony_ciint32_t SetDisplayWindow(const uint8_t *data, size_t size) 76e1c44949Sopenharmony_ci{ 77e1c44949Sopenharmony_ci if (!IsServiceInited()) { 78e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 79e1c44949Sopenharmony_ci } 80e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 81e1c44949Sopenharmony_ci std::string surfaceId(reinterpret_cast<const char *>(data), size); 82e1c44949Sopenharmony_ci MessageParcel dataParcel; 83e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 84e1c44949Sopenharmony_ci int len = static_cast<int>(surfaceId.length()); 85e1c44949Sopenharmony_ci std::string subSurfaceId = surfaceId; 86e1c44949Sopenharmony_ci if (len >= 1) { 87e1c44949Sopenharmony_ci subSurfaceId = surfaceId.substr(0, 1); 88e1c44949Sopenharmony_ci } 89e1c44949Sopenharmony_ci if (subSurfaceId.empty() || subSurfaceId[0] < '0' || subSurfaceId[0] > '9') { 90e1c44949Sopenharmony_ci subSurfaceId = ""; 91e1c44949Sopenharmony_ci dataParcel.WriteString(subSurfaceId); 92e1c44949Sopenharmony_ci } else { 93e1c44949Sopenharmony_ci dataParcel.WriteString(subSurfaceId); 94e1c44949Sopenharmony_ci uint64_t tmpSurfaceId = std::stoull(subSurfaceId); 95e1c44949Sopenharmony_ci auto surface = SurfaceUtils::GetInstance()->GetSurface(tmpSurfaceId); 96e1c44949Sopenharmony_ci if (surface != nullptr) { 97e1c44949Sopenharmony_ci sptr<IBufferProducer> producer = surface->GetProducer(); 98e1c44949Sopenharmony_ci if (producer != nullptr) { 99e1c44949Sopenharmony_ci dataParcel.WriteRemoteObject(producer->AsObject()); 100e1c44949Sopenharmony_ci } 101e1c44949Sopenharmony_ci } 102e1c44949Sopenharmony_ci } 103e1c44949Sopenharmony_ci MessageParcel reply; 104e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnSetDisplayWindow(dataParcel, reply); 105e1c44949Sopenharmony_ci} 106e1c44949Sopenharmony_ci 107e1c44949Sopenharmony_ciint32_t SetCameraZoom(const uint8_t *data, size_t size) 108e1c44949Sopenharmony_ci{ 109e1c44949Sopenharmony_ci if (!IsServiceInited()) { 110e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 111e1c44949Sopenharmony_ci } 112e1c44949Sopenharmony_ci float zoomRatio = static_cast<float>(size); 113e1c44949Sopenharmony_ci MessageParcel dataParcel; 114e1c44949Sopenharmony_ci dataParcel.WriteFloat(zoomRatio); 115e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 116e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 117e1c44949Sopenharmony_ci MessageParcel reply; 118e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnSetCameraZoom(dataParcel, reply); 119e1c44949Sopenharmony_ci} 120e1c44949Sopenharmony_ci 121e1c44949Sopenharmony_ciint32_t SetPausePicture(const uint8_t *data, size_t size) 122e1c44949Sopenharmony_ci{ 123e1c44949Sopenharmony_ci if (!IsServiceInited()) { 124e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 125e1c44949Sopenharmony_ci } 126e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 127e1c44949Sopenharmony_ci std::string path(reinterpret_cast<const char *>(data), size); 128e1c44949Sopenharmony_ci auto pathU16 = Str8ToStr16(path); 129e1c44949Sopenharmony_ci MessageParcel dataParcel; 130e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 131e1c44949Sopenharmony_ci dataParcel.WriteString16(pathU16); 132e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 133e1c44949Sopenharmony_ci MessageParcel reply; 134e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnSetPausePicture(dataParcel, reply); 135e1c44949Sopenharmony_ci} 136e1c44949Sopenharmony_ci 137e1c44949Sopenharmony_ciint32_t SetDeviceDirection(const uint8_t *data, size_t size) 138e1c44949Sopenharmony_ci{ 139e1c44949Sopenharmony_ci if (!IsServiceInited()) { 140e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 141e1c44949Sopenharmony_ci } 142e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 143e1c44949Sopenharmony_ci int32_t rotation = static_cast<int32_t>(size); 144e1c44949Sopenharmony_ci MessageParcel dataParcel; 145e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 146e1c44949Sopenharmony_ci dataParcel.WriteInt32(rotation); 147e1c44949Sopenharmony_ci MessageParcel reply; 148e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnSetDeviceDirection(dataParcel, reply); 149e1c44949Sopenharmony_ci} 150e1c44949Sopenharmony_ci 151e1c44949Sopenharmony_ciint32_t CancelCallUpgrade(const uint8_t *data, size_t size) 152e1c44949Sopenharmony_ci{ 153e1c44949Sopenharmony_ci if (!IsServiceInited()) { 154e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 155e1c44949Sopenharmony_ci } 156e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 157e1c44949Sopenharmony_ci MessageParcel dataParcel; 158e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 159e1c44949Sopenharmony_ci MessageParcel reply; 160e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnCancelCallUpgrade(dataParcel, reply); 161e1c44949Sopenharmony_ci} 162e1c44949Sopenharmony_ci 163e1c44949Sopenharmony_ciint32_t RequestCameraCapabilities(const uint8_t *data, size_t size) 164e1c44949Sopenharmony_ci{ 165e1c44949Sopenharmony_ci if (!IsServiceInited()) { 166e1c44949Sopenharmony_ci return TELEPHONY_ERROR; 167e1c44949Sopenharmony_ci } 168e1c44949Sopenharmony_ci int32_t callId = static_cast<int32_t>(size); 169e1c44949Sopenharmony_ci MessageParcel dataParcel; 170e1c44949Sopenharmony_ci dataParcel.WriteInt32(callId); 171e1c44949Sopenharmony_ci MessageParcel reply; 172e1c44949Sopenharmony_ci return DelayedSingleton<CallManagerService>::GetInstance()->OnRequestCameraCapabilities(dataParcel, reply); 173e1c44949Sopenharmony_ci} 174e1c44949Sopenharmony_ci 175e1c44949Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size) 176e1c44949Sopenharmony_ci{ 177e1c44949Sopenharmony_ci if (data == nullptr || size == 0) { 178e1c44949Sopenharmony_ci return; 179e1c44949Sopenharmony_ci } 180e1c44949Sopenharmony_ci ControlCamera(data, size); 181e1c44949Sopenharmony_ci SetPreviewWindow(data, size); 182e1c44949Sopenharmony_ci SetDisplayWindow(data, size); 183e1c44949Sopenharmony_ci SetCameraZoom(data, size); 184e1c44949Sopenharmony_ci SetPausePicture(data, size); 185e1c44949Sopenharmony_ci SetDeviceDirection(data, size); 186e1c44949Sopenharmony_ci CancelCallUpgrade(data, size); 187e1c44949Sopenharmony_ci RequestCameraCapabilities(data, size); 188e1c44949Sopenharmony_ci} 189e1c44949Sopenharmony_ci} // namespace OHOS 190e1c44949Sopenharmony_ci 191e1c44949Sopenharmony_ci/* Fuzzer entry point */ 192e1c44949Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 193e1c44949Sopenharmony_ci{ 194e1c44949Sopenharmony_ci OHOS::AddCallTokenFuzzer token; 195e1c44949Sopenharmony_ci /* Run your code on data */ 196e1c44949Sopenharmony_ci OHOS::DoSomethingInterestingWithMyAPI(data, size); 197e1c44949Sopenharmony_ci return 0; 198e1c44949Sopenharmony_ci} 199