commit a9ccbb07c94f3c03213e58567b47e41501d2e0bb
parent 0f6b0ea4ad13104ac11794e4622de28af2c16202
Author: Johann150 <johann.galle@protonmail.com>
Date: Fri, 4 Feb 2022 18:14:53 +0100
add test for wrongly percent-encoded domains
Diffstat:
1 file changed, 42 insertions(+), 0 deletions(-)
diff --git a/tests/tests.rs b/tests/tests.rs
@@ -333,6 +333,48 @@ fn username() {
}
#[test]
+/// - URLS with invalid hostnames are rejected
+fn percent_encode() {
+ use rustls::{Certificate, ClientConnection, RootCertStore};
+ use std::io::Write;
+ use std::net::TcpStream;
+
+ let mut server = Server::new(&["--addr", "[::]:1988", "--certs", "multicert"]);
+
+ let mut certs = RootCertStore::empty();
+ certs
+ .add(&Certificate(
+ include_bytes!(concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/data/multicert/example.com/cert.der"
+ ))
+ .to_vec(),
+ ))
+ .unwrap();
+ let config = rustls::ClientConfig::builder()
+ .with_safe_defaults()
+ .with_root_certificates(certs)
+ .with_no_client_auth();
+
+ let mut session = ClientConnection::new(
+ std::sync::Arc::new(config),
+ "example.com".try_into().unwrap(),
+ )
+ .unwrap();
+ let mut tcp = TcpStream::connect(addr(1988)).unwrap();
+ let mut tls = rustls::Stream::new(&mut session, &mut tcp);
+
+ write!(tls, "gemini://%/\r\n").unwrap();
+
+ let mut buf = [0; 10];
+ let _ = tls.read(&mut buf);
+
+ assert_eq!(&buf[0..2], b"59");
+
+ server.stop().unwrap();
+}
+
+#[test]
/// - URLS with password are rejected
fn password() {
let page = get(