Przeglądaj źródła

fuzz: Add harness for decoding strings from bytes

- Add a fuzz harness for deserializing strings from bytes
- Add entry to corpora that triggers an out-of-memory issue in string
  decoding
y 3 lat temu
rodzic
commit
433ff9d0a6

+ 6 - 0
fuzz/Cargo.toml

@@ -42,3 +42,9 @@ name = "zkas-decoder"
 path = "fuzz_targets/zkas_decoder.rs"
 test = false
 doc = false
+
+[[bin]]
+name = "decode-string"
+path = "fuzz_targets/decode_string.rs"
+test = false
+doc = false

BIN
fuzz/corpus/decode-string/corpora_oom_string_decode


+ 31 - 0
fuzz/fuzz_targets/decode_string.rs

@@ -0,0 +1,31 @@
+/* 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 <https://www.gnu.org/licenses/>.
+ */
+
+#![no_main]
+extern crate darkfi_serial;
+use darkfi_serial::deserialize;
+
+use libfuzzer_sys::fuzz_target;
+
+fuzz_target!(|data: &[u8]| {
+    // Deserialize arbitrary data as a String
+    let _res: String = match deserialize::<String>(&data) {
+        Ok(..) => "".to_string(),
+        Err(..) => "".to_string(),
+    };
+});