#commit b406b87 # BUG/MEDIUM: connection: don't store recv() result into trash.data # # Cyril Bonté discovered that the proxy protocol randomly fails since # commit 843b7cb ("MEDIUM: chunks: make the chunk struct's fields match # the buffer struct"). This is because we used to store recv()'s return # code into trash.data which is now unsigned, so it never compares as # negative against 0. Let's clean this up and test the result itself # without storing it first. varnishtest "PROXY protocol random failures" #REQUIRE_OPTIONS=OPENSSL feature ignore_unknown_macro #REGTEST_TYPE=bug syslog Slog_1 -repeat 8 -level info { recv expect ~ "Connect from .* to ${h1_ssl_addr}:${h1_ssl_port}" recv expect ~ "ssl-offload-http/http .* \"POST (https://.*:${h1_ssl_port})?/[1-8] HTTP/(2\\.0|1\\.1)\"" } -start haproxy h1 -conf { global nbproc 4 tune.ssl.default-dh-param 2048 stats bind-process 1 log ${Slog_1_addr}:${Slog_1_port} len 2048 local0 debug err defaults mode http ${no-htx} option http-use-htx timeout client 1s timeout server 1s timeout connect 1s log global listen http bind-process 1 bind unix@"${tmpdir}/http.socket" accept-proxy name ssl-offload-http option forwardfor listen ssl-offload-http option httplog bind-process 2-4 bind "fd@${ssl}" ssl crt ${testdir}/common.pem ssl no-sslv3 alpn h2,http/1.1 server http unix@"${tmpdir}/http.socket" send-proxy } -start shell { HOST=${h1_ssl_addr} if [ "$HOST" = "::1" ] ; then HOST="\[::1\]" fi for i in 1 2 3 4 5 6 7 8 ; do urls="$urls https://$HOST:${h1_ssl_port}/$i" done curl -i -k -d 'x=x' $urls & wait $! } syslog Slog_1 -wait