Back to all reviewers

network address validation

denoland/deno
Based on 3 comments
Rust

When validating network addresses and interfaces, properly handle special address values and use protocol-specific prefixes to avoid ambiguity. Network address validation should account for standard special addresses like `INADDR_ANY` (0.0.0.0) which allows the operating system to choose an appropriate interface, rather than treating them as invalid. For...

Networking Rust

Reviewer Prompt

When validating network addresses and interfaces, properly handle special address values and use protocol-specific prefixes to avoid ambiguity. Network address validation should account for standard special addresses like INADDR_ANY (0.0.0.0) which allows the operating system to choose an appropriate interface, rather than treating them as invalid. For address parsing that supports multiple protocols, use explicit prefixes to disambiguate between different address types.

For multicast interface validation, allow 0.0.0.0 as a valid interface address:

// Instead of rejecting 0.0.0.0 as invalid
if !interface_addr.is_multicast() {
  return Err(NetError::InvalidHostname(address));
}

// Allow INADDR_ANY for OS interface selection
if interface_addr == Ipv4Addr::new(0, 0, 0, 0) || interface_addr.is_multicast() {
  // Valid interface specification
}

For address parsing supporting multiple protocols, require explicit prefixes:

// Use protocol prefixes to avoid parsing ambiguity
match address_str {
  addr if addr.starts_with("tcp:") => parse_tcp_address(&addr[4..]),
  addr if addr.starts_with("unix:") => parse_unix_address(&addr[5..]),
  addr if addr.starts_with("vsock:") => parse_vsock_address(&addr[6..]),
  _ => return Err("Address must specify protocol prefix"),
}

This approach prevents validation bugs where legitimate network configurations are incorrectly rejected and ensures consistent address parsing across different network protocols.

3
Comments Analyzed
Rust
Primary Language
Networking
Category

Source Discussions