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();