Compare commits

..

No commits in common. "e27b788e8f612ceaa2b22372d8d00c1fdc47770f" and "9b0a39fa905bad96b56a5da7f2c6edf49da7d348" have entirely different histories.

8 changed files with 5 additions and 1606 deletions

4
fuzz/.gitignore vendored
View file

@ -1,4 +0,0 @@
target
corpus
artifacts
coverage

1559
fuzz/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,21 +0,0 @@
[package]
name = "fwd-fuzz"
version = "0.0.0"
publish = false
edition = "2021"
[package.metadata]
cargo-fuzz = true
[dependencies]
libfuzzer-sys = "0.4"
[dependencies.fwd]
path = ".."
[[bin]]
name = "fuzz_target_1"
path = "fuzz_targets/fuzz_target_1.rs"
test = false
doc = false
bench = false

View file

@ -1,11 +0,0 @@
#![no_main]
use libfuzzer_sys::fuzz_target;
extern crate fwd;
use fwd::server::refresh::docker::JsonValue;
fuzz_target!(|data: &[u8]| {
// fuzzed code goes here
let _ = JsonValue::parse(data);
});

View file

@ -1,7 +1,7 @@
mod client; mod client;
mod message; mod message;
mod reverse; mod reverse;
pub mod server; mod server;
pub const VERSION: &str = env!("CARGO_PKG_VERSION"); pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const REV: &str = env!("REPO_REV"); pub const REV: &str = env!("REPO_REV");

View file

@ -5,7 +5,7 @@ use log::{error, warn};
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, BufReader, BufWriter}; use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, BufReader, BufWriter};
use tokio::sync::mpsc; use tokio::sync::mpsc;
pub mod refresh; mod refresh;
// We drive writes through an mpsc queue, because we not only handle requests // We drive writes through an mpsc queue, because we not only handle requests
// and responses from the client (refresh ports and the like) but also need // and responses from the client (refresh ports and the like) but also need

View file

@ -10,7 +10,7 @@ use crate::message::PortDesc;
mod procfs; mod procfs;
#[cfg(unix)] #[cfg(unix)]
pub mod docker; mod docker;
pub async fn get_entries(_send_anonymous: bool) -> Result<Vec<PortDesc>> { pub async fn get_entries(_send_anonymous: bool) -> Result<Vec<PortDesc>> {
#[cfg_attr(not(target_os = "linux"), allow(unused_mut))] #[cfg_attr(not(target_os = "linux"), allow(unused_mut))]

View file

@ -77,7 +77,7 @@ async fn list_containers() -> Result<Vec<u8>> {
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum JsonValue { enum JsonValue {
Null, Null,
True, True,
False, False,
@ -207,7 +207,7 @@ impl JsonValue {
} }
i += 1; i += 1;
} }
if i >= blob.len() { if i == blob.len() {
bail!("Unterminated string at {i}"); bail!("Unterminated string at {i}");
} }
assert_eq!(blob[i], b'"'); assert_eq!(blob[i], b'"');
@ -874,10 +874,4 @@ mod test {
]); ]);
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[test]
pub fn json_decode_unterminated_string_with_escape() {
let input = b"\"\\";
let _ = JsonValue::parse(input);
}
} }