diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 67a884c61..e059d7a53 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -12,6 +12,7 @@ libfuzzer-sys = "0.4" [dependencies.darkfi] path = ".." +features = ["zkas"] [dependencies.darkfi-serial] path = "../src/serial" @@ -29,3 +30,9 @@ name = "serial" path = "fuzz_targets/serial.rs" test = false doc = false + +[[bin]] +name = "zkas-lexer" +path = "fuzz_targets/zkas_lexer.rs" +test = false +doc = false diff --git a/fuzz/fuzz_targets/serial.rs b/fuzz/fuzz_targets/serial.rs index ed965efab..9d44cfd31 100644 --- a/fuzz/fuzz_targets/serial.rs +++ b/fuzz/fuzz_targets/serial.rs @@ -1,3 +1,21 @@ +/* This file is part of DarkFi (https://dark.fi) + * + * Copyright (C) 2020-2023 Dyne.org foundation + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + #![no_main] extern crate darkfi_serial; use darkfi_serial::{deserialize, serialize}; diff --git a/fuzz/fuzz_targets/zkas_lexer.rs b/fuzz/fuzz_targets/zkas_lexer.rs new file mode 100644 index 000000000..59bd352f5 --- /dev/null +++ b/fuzz/fuzz_targets/zkas_lexer.rs @@ -0,0 +1,33 @@ +/* This file is part of DarkFi (https://dark.fi) + * + * Copyright (C) 2020-2023 Dyne.org foundation + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#![no_main] +use libfuzzer_sys::fuzz_target; + +use darkfi::zkas::Lexer; + +// Run with: ZKAS_SILENT=1 cargo fuzz run zkas-lexer + +fuzz_target!(|data: &[u8]| { + if let Ok(source) = std::str::from_utf8(data) { + let filename = "fuzz0r"; + let source = source.replace('\t', " ").replace("\r\n", "\n"); + let lexer = Lexer::new(filename, source.chars()); + let _ = lexer.lex(); + } +}); diff --git a/src/zkas/error.rs b/src/zkas/error.rs index a1251bf70..498fcec04 100644 --- a/src/zkas/error.rs +++ b/src/zkas/error.rs @@ -55,6 +55,10 @@ impl ErrorEmitter { } pub fn emit(&self, typ: &str, msg: &str) { + if let Ok(_) = std::env::var("ZKAS_SILENT") { + return + } + let stderr = io::stderr(); let mut handle = stderr.lock();