blob: 5fc17113325611d377f469d3c33616a4591c8719 [file] [log] [blame]
// Copyright 2020 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.
//! This module contains fuzzing targets for Archivist.
use arbitrary::{Arbitrary, Result, Unstructured};
use archivist_lib::logs;
use archivist_lib::logs::Message;
use fuchsia_zircon as zx;
use fuzz::fuzz;
#[derive(Clone, Debug)]
struct RandomLogRecord(zx::sys::zx_log_record_t);
/// Fuzzer for kernel debuglog parser.
#[fuzz]
fn convert_debuglog_to_log_message_fuzzer(record: RandomLogRecord) -> Option<Message> {
logs::convert_debuglog_to_log_message(&record.0)
}
impl Arbitrary for RandomLogRecord {
fn arbitrary(u: &mut Unstructured<'_>) -> Result<Self> {
let unused = u32::arbitrary(u)?;
let datalen = u16::arbitrary(u)?;
let severity = u8::arbitrary(u)?;
let flags = u8::arbitrary(u)?;
let timestamp = i64::arbitrary(u)? as zx::sys::zx_time_t;
let pid = u64::arbitrary(u)?;
let tid = u64::arbitrary(u)?;
// Fill the first datalen bytes of data.
let mut data = [0 as u8; zx::sys::ZX_LOG_RECORD_DATA_MAX];
let mut partial = &mut data[0..datalen as usize];
u.fill_buffer(&mut partial)?;
Ok(RandomLogRecord(zx::sys::zx_log_record_t {
unused,
datalen,
severity,
flags,
timestamp,
pid,
tid,
data,
}))
}
fn size_hint(_: usize) -> (usize, Option<usize>) {
(
std::mem::size_of::<zx::sys::zx_log_record_t>(),
Some(std::mem::size_of::<zx::sys::zx_log_record_t>()),
)
}
}