use default port in URL port check

This commit is contained in:
Johann150 2026-04-03 18:42:04 +02:00
parent aadddc2c0c
commit 1536c382ab
No known key found for this signature in database
GPG key ID: 9EE6577A2A06F8F1
3 changed files with 19 additions and 12 deletions

View file

@ -10,6 +10,9 @@ This may lead to no listed changes for a version.
## [Unreleased]
### Fixed
* Use the default port when checking for the right port.
## [3.3.19] - 2025-09-18
### Fixed

View file

@ -591,16 +591,14 @@ where
return Err((PROXY_REQUEST_REFUSED, "Proxy request refused"));
}
// correct port
if let Some(expected_port) = self.local_port_check
&& let Some(port) = url.port()
{
// Validate that the port in the URL is the same as for the stream this request
// came in on.
if port != expected_port {
if let Some(expected_port) = self.local_port_check
&& url.port().unwrap_or(DEFAULT_PORT) != expected_port
{
return Err((PROXY_REQUEST_REFUSED, "Proxy request refused"));
}
}
Ok(url)
}

View file

@ -36,6 +36,7 @@ static PORT: AtomicU16 = AtomicU16::new(DEFAULT_PORT);
struct Server {
addr: SocketAddr,
server: std::process::Child,
port: u16,
// is set when output is collected by stop()
output: Option<Result<(), String>>,
}
@ -44,11 +45,10 @@ impl Server {
pub fn new(args: &[&str]) -> Self {
use std::net::{IpAddr, Ipv4Addr};
let port = PORT.fetch_add(1, Ordering::SeqCst);
// generate unique port/address so tests do not clash
let addr = (
IpAddr::V4(Ipv4Addr::LOCALHOST),
PORT.fetch_add(1, Ordering::SeqCst),
)
let addr = (IpAddr::V4(Ipv4Addr::LOCALHOST), port)
.to_socket_addrs()
.unwrap()
.next()
@ -84,6 +84,7 @@ impl Server {
Self {
addr,
server,
port,
output: None,
}
}
@ -147,7 +148,12 @@ impl Drop for Server {
fn get(args: &[&str], url: &str) -> Result<Response, String> {
let mut server = Server::new(args);
let url = Url::parse(url).unwrap();
let mut url = Url::parse(url).unwrap();
if url.port().is_none() {
// inject port number into URL because that is only determined
// when constructing the `Server` above.
url.set_port(Some(server.port)).unwrap();
}
let actor = Actor::default().proxy("localhost".into(), server.addr.port());
let request = actor.get(url);