• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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