blob: 9b90ad748fa58e8a8114a882be8942a1ed40781d [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fuzzer/FuzzedDataProvider.h>
#include "src/connectivity/bluetooth/core/bt-host/public/pw_bluetooth_sapphire/internal/host/common/advertising_data.h"
#include "src/connectivity/bluetooth/core/bt-host/public/pw_bluetooth_sapphire/internal/host/common/byte_buffer.h"
namespace bt::common {
void fuzz(const uint8_t* data, size_t size) {
FuzzedDataProvider fuzzed_data(data, size);
auto adv_flags = fuzzed_data.ConsumeIntegral<AdvFlags>();
bool include_adv_flags = fuzzed_data.ConsumeBool();
auto write_buffer_size = fuzzed_data.ConsumeIntegralInRange(0, 2000);
auto adv_data = fuzzed_data.ConsumeRemainingBytes<uint8_t>();
AdvertisingData::ParseResult result =
AdvertisingData::FromBytes(BufferView(adv_data));
if (result.is_ok()) {
DynamicByteBuffer write_buffer(write_buffer_size);
result->WriteBlock(
&write_buffer,
include_adv_flags ? std::optional(adv_flags) : std::nullopt);
}
}
} // namespace bt::common
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
bt::common::fuzz(data, size);
return 0;
}