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 "timesettimezone_fuzzer.h"
17
18 #include <cstddef>
19 #include <cstdint>
20 #include <string_ex.h>
21
22 #include "time_service_client.h"
23 #include <fuzzer/FuzzedDataProvider.h>
24
25 using namespace OHOS::MiscServices;
26
27 namespace OHOS {
28
FuzzTimeSetTimezone(const uint8_t * rawData,size_t size)29 bool FuzzTimeSetTimezone(const uint8_t *rawData, size_t size)
30 {
31 std::string timeZone(reinterpret_cast<const char *>(rawData), size);
32 TimeServiceClient::GetInstance()->SetTimeZone(timeZone);
33 TimeServiceClient::GetInstance()->SetTimeZone(timeZone);
34 TimeServiceClient::GetInstance()->SetTimeZoneV9(timeZone);
35 int32_t code;
36 TimeServiceClient::GetInstance()->SetTimeZone(timeZone, code);
37 return true;
38 }
39
FuzzTimeGetTimezone(const uint8_t * rawData,size_t size)40 bool FuzzTimeGetTimezone(const uint8_t *rawData, size_t size)
41 {
42 TimeServiceClient::GetInstance()->GetTimeZone();
43 std::string timezoneId(reinterpret_cast<const char *>(rawData), size);
44 TimeServiceClient::GetInstance()->GetTimeZone(timezoneId);
45 return true;
46 }
47
FuzzTimeSetTime(const uint8_t * rawData,size_t size)48 bool FuzzTimeSetTime(const uint8_t *rawData, size_t size)
49 {
50 int64_t time = static_cast<int64_t>(*rawData);
51 TimeServiceClient::GetInstance()->SetTime(time);
52 TimeServiceClient::GetInstance()->SetTime(time);
53 TimeServiceClient::GetInstance()->SetTimeV9(time);
54 TimeServiceClient::GetInstance()->SetTimeV9(time);
55 int32_t code;
56 TimeServiceClient::GetInstance()->SetTime(time, code);
57 return true;
58 }
59
FuzzTimeGetTime(const uint8_t * rawData,size_t size)60 bool FuzzTimeGetTime(const uint8_t *rawData, size_t size)
61 {
62 FuzzedDataProvider fdp(rawData, size);
63 TimeServiceClient::GetInstance()->GetWallTimeMs();
64 int64_t time = fdp.ConsumeIntegral<int64_t>();
65 TimeServiceClient::GetInstance()->GetWallTimeMs(time);
66 TimeServiceClient::GetInstance()->GetWallTimeNs();
67 time = fdp.ConsumeIntegral<int64_t>();
68 TimeServiceClient::GetInstance()->GetWallTimeNs(time);
69
70 TimeServiceClient::GetInstance()->GetBootTimeMs();
71 time = fdp.ConsumeIntegral<int64_t>();
72 TimeServiceClient::GetInstance()->GetBootTimeMs(time);
73 TimeServiceClient::GetInstance()->GetBootTimeNs();
74 time = fdp.ConsumeIntegral<int64_t>();
75 TimeServiceClient::GetInstance()->GetBootTimeNs(time);
76
77 TimeServiceClient::GetInstance()->GetMonotonicTimeMs();
78 time = fdp.ConsumeIntegral<int64_t>();
79 TimeServiceClient::GetInstance()->GetMonotonicTimeMs(time);
80 TimeServiceClient::GetInstance()->GetMonotonicTimeNs();
81 time = fdp.ConsumeIntegral<int64_t>();
82 TimeServiceClient::GetInstance()->GetMonotonicTimeNs(time);
83
84 TimeServiceClient::GetInstance()->GetThreadTimeMs();
85 time = fdp.ConsumeIntegral<int64_t>();
86 TimeServiceClient::GetInstance()->GetThreadTimeMs(time);
87 TimeServiceClient::GetInstance()->GetThreadTimeNs();
88 time = fdp.ConsumeIntegral<int64_t>();
89 TimeServiceClient::GetInstance()->GetThreadTimeNs(time);
90 return true;
91 }
92
93 }
94 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)95 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
96 {
97 /* Run your code on data */
98 if (data == nullptr) {
99 return 0;
100 }
101
102 OHOS::FuzzTimeSetTimezone(data, size);
103 OHOS::FuzzTimeGetTimezone(data, size);
104 OHOS::FuzzTimeSetTime(data, size);
105 OHOS::FuzzTimeGetTime(data, size);
106 return 0;
107 }