1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License. 5da853ecaSopenharmony_ci * You may obtain a copy of the License at 6da853ecaSopenharmony_ci * 7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8da853ecaSopenharmony_ci * 9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and 13da853ecaSopenharmony_ci * limitations under the License. 14da853ecaSopenharmony_ci */ 15da853ecaSopenharmony_ci#include <atomic> 16da853ecaSopenharmony_ci#include <iostream> 17da853ecaSopenharmony_ci#include <fstream> 18da853ecaSopenharmony_ci#include <queue> 19da853ecaSopenharmony_ci#include <string> 20da853ecaSopenharmony_ci#include <thread> 21da853ecaSopenharmony_ci#include "audiodecoderdemo.h" 22da853ecaSopenharmony_ci#define FUZZ_PROJECT_NAME "audiodecoderpreapiflush_fuzzer" 23da853ecaSopenharmony_ci 24da853ecaSopenharmony_ciusing namespace std; 25da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 26da853ecaSopenharmony_ciusing namespace OHOS; 27da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioDemoAuto; 28da853ecaSopenharmony_ci 29da853ecaSopenharmony_cinamespace OHOS { 30da853ecaSopenharmony_cibool AudioDecoderAACFlushFuzzTest(const uint8_t *data, size_t size) 31da853ecaSopenharmony_ci{ 32da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 33da853ecaSopenharmony_ci return false; 34da853ecaSopenharmony_ci } 35da853ecaSopenharmony_ci // FUZZ aac 36da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 37da853ecaSopenharmony_ci aDecBufferDemo->InitFile("aac"); 38da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 39da853ecaSopenharmony_ci delete aDecBufferDemo; 40da853ecaSopenharmony_ci return res; 41da853ecaSopenharmony_ci} 42da853ecaSopenharmony_ci 43da853ecaSopenharmony_cibool AudioDecoderFlacFlushFuzzTest(const uint8_t *data, size_t size) 44da853ecaSopenharmony_ci{ 45da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 46da853ecaSopenharmony_ci return false; 47da853ecaSopenharmony_ci } 48da853ecaSopenharmony_ci // FUZZ flac 49da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 50da853ecaSopenharmony_ci aDecBufferDemo->InitFile("flac"); 51da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 52da853ecaSopenharmony_ci delete aDecBufferDemo; 53da853ecaSopenharmony_ci return res; 54da853ecaSopenharmony_ci} 55da853ecaSopenharmony_ci 56da853ecaSopenharmony_cibool AudioDecoderVORBISFlushFuzzTest(const uint8_t *data, size_t size) 57da853ecaSopenharmony_ci{ 58da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 59da853ecaSopenharmony_ci return false; 60da853ecaSopenharmony_ci } 61da853ecaSopenharmony_ci // FUZZ vorbis 62da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 63da853ecaSopenharmony_ci aDecBufferDemo->InitFile("vorbis"); 64da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 65da853ecaSopenharmony_ci delete aDecBufferDemo; 66da853ecaSopenharmony_ci return res; 67da853ecaSopenharmony_ci} 68da853ecaSopenharmony_ci 69da853ecaSopenharmony_cibool AudioDecoderAMRNBFlushFuzzTest(const uint8_t *data, size_t size) 70da853ecaSopenharmony_ci{ 71da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 72da853ecaSopenharmony_ci return false; 73da853ecaSopenharmony_ci } 74da853ecaSopenharmony_ci // FUZZ amrnb 75da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 76da853ecaSopenharmony_ci aDecBufferDemo->InitFile("amrnb"); 77da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 78da853ecaSopenharmony_ci delete aDecBufferDemo; 79da853ecaSopenharmony_ci return res; 80da853ecaSopenharmony_ci} 81da853ecaSopenharmony_ci 82da853ecaSopenharmony_cibool AudioDecoderAMRWBFlushFuzzTest(const uint8_t *data, size_t size) 83da853ecaSopenharmony_ci{ 84da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 85da853ecaSopenharmony_ci return false; 86da853ecaSopenharmony_ci } 87da853ecaSopenharmony_ci // FUZZ amrwb 88da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 89da853ecaSopenharmony_ci aDecBufferDemo->InitFile("amrwb"); 90da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 91da853ecaSopenharmony_ci delete aDecBufferDemo; 92da853ecaSopenharmony_ci return res; 93da853ecaSopenharmony_ci} 94da853ecaSopenharmony_ci 95da853ecaSopenharmony_cibool AudioDecoderOPUSFlushFuzzTest(const uint8_t *data, size_t size) 96da853ecaSopenharmony_ci{ 97da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 98da853ecaSopenharmony_ci return false; 99da853ecaSopenharmony_ci } 100da853ecaSopenharmony_ci // FUZZ opus 101da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 102da853ecaSopenharmony_ci aDecBufferDemo->InitFile("opus"); 103da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 104da853ecaSopenharmony_ci delete aDecBufferDemo; 105da853ecaSopenharmony_ci return res; 106da853ecaSopenharmony_ci} 107da853ecaSopenharmony_ci 108da853ecaSopenharmony_cibool AudioDecoderG711FlushFuzzTest(const uint8_t *data, size_t size) 109da853ecaSopenharmony_ci{ 110da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 111da853ecaSopenharmony_ci return false; 112da853ecaSopenharmony_ci } 113da853ecaSopenharmony_ci // FUZZ g711 114da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 115da853ecaSopenharmony_ci aDecBufferDemo->InitFile("g711mu"); 116da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 117da853ecaSopenharmony_ci delete aDecBufferDemo; 118da853ecaSopenharmony_ci return res; 119da853ecaSopenharmony_ci} 120da853ecaSopenharmony_ci 121da853ecaSopenharmony_cibool AudioDecoderMP3FlushFuzzTest(const uint8_t *data, size_t size) 122da853ecaSopenharmony_ci{ 123da853ecaSopenharmony_ci if (size < sizeof(int64_t)) { 124da853ecaSopenharmony_ci return false; 125da853ecaSopenharmony_ci } 126da853ecaSopenharmony_ci // FUZZ mp3 127da853ecaSopenharmony_ci ADecDemoAuto* aDecBufferDemo = new ADecDemoAuto(); 128da853ecaSopenharmony_ci aDecBufferDemo->InitFile("mp3"); 129da853ecaSopenharmony_ci auto res = aDecBufferDemo->RunCaseFlush(data, size); 130da853ecaSopenharmony_ci delete aDecBufferDemo; 131da853ecaSopenharmony_ci return res; 132da853ecaSopenharmony_ci} 133da853ecaSopenharmony_ci 134da853ecaSopenharmony_ci} 135da853ecaSopenharmony_ci 136da853ecaSopenharmony_ci/* Fuzzer entry point */ 137da853ecaSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 138da853ecaSopenharmony_ci{ 139da853ecaSopenharmony_ci /* Run your code on data */ 140da853ecaSopenharmony_ci OHOS::AudioDecoderAACFlushFuzzTest(data, size); 141da853ecaSopenharmony_ci OHOS::AudioDecoderFlacFlushFuzzTest(data, size); 142da853ecaSopenharmony_ci OHOS::AudioDecoderG711FlushFuzzTest(data, size); 143da853ecaSopenharmony_ci OHOS::AudioDecoderVORBISFlushFuzzTest(data, size); 144da853ecaSopenharmony_ci OHOS::AudioDecoderAMRNBFlushFuzzTest(data, size); 145da853ecaSopenharmony_ci OHOS::AudioDecoderAMRWBFlushFuzzTest(data, size); 146da853ecaSopenharmony_ci OHOS::AudioDecoderMP3FlushFuzzTest(data, size); 147da853ecaSopenharmony_ci return 0; 148da853ecaSopenharmony_ci}