1 #include <sys/types.h>
2
3 #include <cstdint>
4 #include <string>
5 #include <vector>
6
7 #include "absl/status/status.h"
8 #include "absl/types/span.h"
9 #include "fuzztest/fuzztest.h"
10 #include "iamf/common/read_bit_buffer.h"
11 #include "iamf/obu/types.h"
12
13 namespace iamf_tools {
14 namespace {
15
ReadUnsignedLiteral64NoUndefinedBehavior(std::vector<uint8_t> data,int num_bits)16 void ReadUnsignedLiteral64NoUndefinedBehavior(std::vector<uint8_t> data,
17 int num_bits) {
18 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
19 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
20 uint64_t read_data;
21 absl::Status status = rb->ReadUnsignedLiteral(num_bits, read_data);
22 }
23
24 FUZZ_TEST(ReadBitBufferFuzzTest, ReadUnsignedLiteral64NoUndefinedBehavior);
25
ReadUnsignedLiteral32NoUndefinedBehavior(std::vector<uint8_t> data,int num_bits)26 void ReadUnsignedLiteral32NoUndefinedBehavior(std::vector<uint8_t> data,
27 int num_bits) {
28 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
29 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
30 uint32_t read_data;
31 absl::Status status = rb->ReadUnsignedLiteral(num_bits, read_data);
32 }
33
34 FUZZ_TEST(ReadBitBufferFuzzTest, ReadUnsignedLiteral32NoUndefinedBehavior);
35
ReadUnsignedLiteral16NoUndefinedBehavior(std::vector<uint8_t> data,int num_bits)36 void ReadUnsignedLiteral16NoUndefinedBehavior(std::vector<uint8_t> data,
37 int num_bits) {
38 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
39 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
40 uint16_t read_data;
41 absl::Status status = rb->ReadUnsignedLiteral(num_bits, read_data);
42 }
43
44 FUZZ_TEST(ReadBitBufferFuzzTest, ReadUnsignedLiteral16NoUndefinedBehavior);
45
ReadUnsignedLiteral8NoUndefinedBehavior(std::vector<uint8_t> data,int num_bits)46 void ReadUnsignedLiteral8NoUndefinedBehavior(std::vector<uint8_t> data,
47 int num_bits) {
48 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
49 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
50 uint8_t read_data;
51 absl::Status status = rb->ReadUnsignedLiteral(num_bits, read_data);
52 }
53
54 FUZZ_TEST(ReadBitBufferFuzzTest, ReadUnsignedLiteral8NoUndefinedBehavior);
55
ReadSigned16NoUndefinedBehavior(std::vector<uint8_t> data)56 void ReadSigned16NoUndefinedBehavior(std::vector<uint8_t> data) {
57 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
58 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
59 int16_t read_data;
60 absl::Status status = rb->ReadSigned16(read_data);
61 }
62
63 FUZZ_TEST(ReadBitBufferFuzzTest, ReadSigned16NoUndefinedBehavior);
64
ReadStringNoUndefinedBehavior(std::vector<uint8_t> data)65 void ReadStringNoUndefinedBehavior(std::vector<uint8_t> data) {
66 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
67 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
68 std::string read_data;
69 absl::Status status = rb->ReadString(read_data);
70 }
71
72 FUZZ_TEST(ReadBitBufferFuzzTest, ReadStringNoUndefinedBehavior);
73
ReadULeb128NoUndefinedBehavior(std::vector<uint8_t> data)74 void ReadULeb128NoUndefinedBehavior(std::vector<uint8_t> data) {
75 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
76 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
77 DecodedUleb128 read_data;
78 absl::Status status = rb->ReadULeb128(read_data);
79 }
80
81 FUZZ_TEST(ReadBitBufferFuzzTest, ReadULeb128NoUndefinedBehavior);
82
ReadIso14496_1ExpandedNoUndefinedBehavior(std::vector<uint8_t> data,uint32_t max_class_size)83 void ReadIso14496_1ExpandedNoUndefinedBehavior(std::vector<uint8_t> data,
84 uint32_t max_class_size) {
85 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
86 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
87 uint32_t read_data;
88 absl::Status status = rb->ReadIso14496_1Expanded(max_class_size, read_data);
89 }
90
91 FUZZ_TEST(ReadBitBufferFuzzTest, ReadIso14496_1ExpandedNoUndefinedBehavior);
92
ReadUint8SpanNoUndefinedBehavior(std::vector<uint8_t> data)93 void ReadUint8SpanNoUndefinedBehavior(std::vector<uint8_t> data) {
94 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
95 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
96 std::vector<uint8_t> read_data(data.size());
97 absl::Span<uint8_t> span(read_data);
98 absl::Status status = rb->ReadUint8Span(span);
99 }
100
101 FUZZ_TEST(ReadBitBufferFuzzTest, ReadUint8SpanNoUndefinedBehavior);
102
ReadBooleanNoUndefinedBehavior(std::vector<uint8_t> data)103 void ReadBooleanNoUndefinedBehavior(std::vector<uint8_t> data) {
104 std::unique_ptr<MemoryBasedReadBitBuffer> rb =
105 MemoryBasedReadBitBuffer::CreateFromSpan(256, absl::MakeConstSpan(data));
106 bool read_data;
107 absl::Status status = rb->ReadBoolean(read_data);
108 }
109
110 FUZZ_TEST(ReadBitBufferFuzzTest, ReadBooleanNoUndefinedBehavior);
111
112 } // namespace
113 } // namespace iamf_tools
114