OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <stddef.h> | |
6 | |
7 #include "base/numerics/safe_conversions.h" | |
8 #include "media/filters/h264_parser.h" | |
9 | |
10 // Entry point for LibFuzzer. | |
11 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { | |
12 if (!size) | |
13 return 0; | |
14 | |
15 media::H264Parser parser; | |
16 parser.SetStream(data, base::checked_cast<off_t>(size)); | |
17 | |
18 // Parse until the end of stream/unsupported stream/error in stream is | |
19 // found. | |
20 while (true) { | |
DaleCurtis
2016/03/07 21:40:17
could do {} while (res = ok) and move res outside
jrummell
2016/03/08 01:38:45
I considered it, but there are 2 checks for != kOk
| |
21 media::H264NALU nalu; | |
22 media::H264Parser::Result res = parser.AdvanceToNextNALU(&nalu); | |
23 if (res != media::H264Parser::kOk) | |
24 break; | |
25 | |
26 switch (nalu.nal_unit_type) { | |
27 case media::H264NALU::kIDRSlice: | |
28 case media::H264NALU::kNonIDRSlice: { | |
29 media::H264SliceHeader shdr; | |
30 res = parser.ParseSliceHeader(nalu, &shdr); | |
31 break; | |
32 } | |
33 | |
34 case media::H264NALU::kSPS: { | |
35 int id; | |
36 res = parser.ParseSPS(&id); | |
37 break; | |
38 } | |
39 | |
40 case media::H264NALU::kPPS: { | |
41 int id; | |
42 res = parser.ParsePPS(&id); | |
43 break; | |
44 } | |
45 | |
46 case media::H264NALU::kSEIMessage: { | |
47 media::H264SEIMessage sei_msg; | |
48 res = parser.ParseSEI(&sei_msg); | |
49 break; | |
50 } | |
51 | |
52 default: | |
53 // Skip any other NALU. | |
54 break; | |
55 } | |
56 if (res != media::H264Parser::kOk) | |
57 break; | |
58 } | |
59 | |
60 return 0; | |
61 } | |
OLD | NEW |