tiny_http_fork 0.12.8

Low level HTTP server library FORK
Documentation
extern crate tiny_http_fork;

use std::{io::{Read, Write}, net::TcpStream, time::Duration};
use tiny_http_fork::{Header, Response, Server};


#[test]
fn test_cve2026_66753() 
{
    let handle = 
        std::thread::spawn(move ||
            {
                let server = Server::http("127.0.0.1:8004").unwrap();
    
                for request in server.incoming_requests() 
                {
                    for h in request.headers() 
                    {
                        if h.field.equiv("X-Test") 
                        {
                            println!("parsed X-Test value = {:?}", h.value.as_str());
                        }
                    }
                    
                    let evil = "a\r\nX-Injected: yes";
                    let mut resp = Response::from_string("body");
                    resp.add_header(Header::from_bytes(&b"X-Echo"[..], evil.as_bytes()).unwrap());
                    let _ = request.respond(resp);
                }
            }
        );

    std::thread::sleep(Duration::from_millis(500));

    let mut client = TcpStream::connect("127.0.0.1:8004").unwrap();

    client.write("GET / HTTP/1.1\r\nHost: x\r\nX-Test: aaa\nbbb\r\nConnection: close\r\n\r\n".as_bytes()).unwrap();

    let mut response = [0_u8; 512];
    let n = client.read(&mut response).unwrap();

    let resp = str::from_utf8(&response[..n]).unwrap();
    println!("{}", resp);

    assert_eq!(resp.starts_with("HTTP/1.1 400 Bad Request"), true);

    drop(client);

    drop(handle);
    
}