blob: 335c397d913607f6dff535bc6c333787b144f68a [file] [log] [blame]
Avi Drissman8ba1bad2022-09-13 19:22:361// Copyright 2019 The Chromium Authors
Daniel Hosseinianb9bc53e2019-10-22 02:21:532// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Peter Kastingccea09832025-01-27 18:38:225#include "components/base32/base32.h"
6
Daniel Hosseinianb9bc53e2019-10-22 02:21:537#include <stddef.h>
8#include <stdint.h>
9
Peter Kastingccea09832025-01-27 18:38:2210#include <algorithm>
Daniel Hosseinianb9bc53e2019-10-22 02:21:5311#include <limits>
Tom Sepez46f69d892023-11-10 23:39:1012#include <string>
13#include <vector>
Daniel Hosseinianb9bc53e2019-10-22 02:21:5314
Tom Sepez46f69d892023-11-10 23:39:1015#include "base/check.h"
16#include "base/containers/span.h"
Daniel Hosseinianb9bc53e2019-10-22 02:21:5317
18base32::Base32EncodePolicy GetBase32EncodePolicyFromUint8(uint8_t value) {
19 // Dummy switch to detect changes to the enum definition.
20 switch (base32::Base32EncodePolicy()) {
21 case base32::Base32EncodePolicy::INCLUDE_PADDING:
22 case base32::Base32EncodePolicy::OMIT_PADDING:
23 break;
24 }
25
26 return (value % 2) == 0 ? base32::Base32EncodePolicy::INCLUDE_PADDING
27 : base32::Base32EncodePolicy::OMIT_PADDING;
28}
29
30extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
31 if (size < 2 || size > std::numeric_limits<size_t>::max() / 5)
32 return 0;
33
34 const base32::Base32EncodePolicy encode_policy =
35 GetBase32EncodePolicyFromUint8(data[0]);
Ellya88dc722024-09-04 22:32:2936 // SAFETY: libfuzzer guarantees that there are size bytes available at data.
37 UNSAFE_BUFFERS(
38 const base::span<const uint8_t> input_bytes(data + 1, size - 1));
Tom Sepez46f69d892023-11-10 23:39:1039 std::string encoded_string = base32::Base32Encode(input_bytes, encode_policy);
40 std::vector<uint8_t> decoded_bytes = base32::Base32Decode(encoded_string);
Peter Kastingccea09832025-01-27 18:38:2241 CHECK(std::ranges::equal(input_bytes, decoded_bytes));
Daniel Hosseinianb9bc53e2019-10-22 02:21:5342 return 0;
43}