#commit 271022150d7961b9aa39dbfd88e0c6a4bc48c3ee # BUG/MINOR: map: fix map_regm with backref # # Due to a cascade of get_trash_chunk calls the sample is # corrupted when we want to read it. # # The fix consist to use a temporary chunk to copy the sample # value and use it. varnishtest "map_regm get_trash_chunk test" feature ignore_unknown_macro #REQUIRE_VERSION=1.6 syslog S1 -level notice { recv expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Proxy (fe|be)1 started." recv expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Proxy (fe|be)1 started." recv info # not expecting ${h1_pid} with master-worker expect ~ "[^:\\[ ]\\[[[:digit:]]+\\]: .* fe1 be1/s1 [[:digit:]]+/[[:digit:]]+/[[:digit:]]+/[[:digit:]]+/[[:digit:]]+ 200 [[:digit:]]+ - - ---- .* \"GET / HTTP/(1|2)(\\.1)?\"" } -start server s1 { rxreq expect req.method == "GET" expect req.http.x-mapped-from-header == example_AND_org expect req.http.x-mapped-from-var == example_AND_org txresp rxreq expect req.method == "GET" expect req.http.x-mapped-from-header == www.example_AND_org expect req.http.x-mapped-from-var == www.example_AND_org txresp } -start haproxy h1 -conf { global log ${S1_addr}:${S1_port} local0 debug err defaults mode http ${no-htx} option http-use-htx log global option httplog timeout connect 15ms timeout client 20ms timeout server 20ms frontend fe1 bind "fd@${fe1}" # Remove port from Host header http-request replace-value Host '(.*):.*' '\1' # Store host header in variable http-request set-var(txn.host) req.hdr(Host) # This works correctly http-request set-header X-Mapped-From-Header %[req.hdr(Host),map_regm(${testdir}/b00000.map,"unknown")] # This breaks before commit 271022150d7961b9aa39dbfd88e0c6a4bc48c3ee http-request set-header X-Mapped-From-Var %[var(txn.host),map_regm(${testdir}/b00000.map,"unknown")] default_backend be1 backend be1 server s1 ${s1_addr}:${s1_port} } -start client c1 -connect ${h1_fe1_sock} { txreq -hdr "Host: example.org:8443" rxresp expect resp.status == 200 txreq -hdr "Host: www.example.org" rxresp expect resp.status == 200 } -run