1 /******************************************************************************
2  *
3  * Copyright (C) 2020 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19  */
20 
21 #include "ExtractorFuzzerBase.h"
22 
23 #ifdef MPEG2PS
24 #include "MPEG2PSExtractor.h"
25 #else
26 #include "MPEG2TSExtractor.h"
27 #endif
28 
29 using namespace android;
30 
31 class MPEG2Extractor : public ExtractorFuzzerBase {
32  public:
33   MPEG2Extractor() = default;
34   ~MPEG2Extractor() = default;
35 
36   bool createExtractor();
37 };
38 
createExtractor()39 bool MPEG2Extractor::createExtractor() {
40 #ifdef MPEG2PS
41   mExtractor = new MPEG2PSExtractor(new DataSourceHelper(mDataSource->wrap()));
42 #else
43   mExtractor = new MPEG2TSExtractor(new DataSourceHelper(mDataSource->wrap()));
44 #endif
45   if (!mExtractor) {
46     return false;
47   }
48   mExtractor->name();
49   return true;
50 }
51 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)52 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
53   if ((!data) || (size == 0)) {
54     return 0;
55   }
56   MPEG2Extractor* extractor = new MPEG2Extractor();
57   if (extractor) {
58     extractor->processData(data, size);
59     delete extractor;
60   }
61   return 0;
62 }
63